#include #include #include #include "Vector.h" // The following macro defines a family of functions that work with 1D // arrays with the forms // // TYPE SNAMELength( TYPE vector[3]); // TYPE SNAMEProd( TYPE * series, int size); // TYPE SNAMESum( int size, TYPE * series); // void SNAMEReverse(TYPE array[3]); // void SNAMEOnes( TYPE * array, int size); // void SNAMEZeros( int size, TYPE * array); // void SNAMEEOSplit(TYPE vector[3], TYPE even[3], odd[3]); // void SNAMETwos( TYPE * twoVec, int size); // void SNAMEThrees( int size, TYPE * threeVec); // // for any specified type TYPE (for example: short, unsigned int, long // long, etc.) with given short name SNAME (for example: short, uint, // longLong, etc.). The macro is then expanded for the given // TYPE/SNAME pairs. The resulting functions are for testing numpy // interfaces, respectively, for: // // * 1D input arrays, hard-coded length // * 1D input arrays // * 1D input arrays, data last // * 1D in-place arrays, hard-coded length // * 1D in-place arrays // * 1D in-place arrays, data last // * 1D argout arrays, hard-coded length // * 1D argout arrays // * 1D argout arrays, data last // #define TEST_FUNCS(TYPE, SNAME) \ \ TYPE SNAME ## Length(TYPE vector[3]) { \ double result = 0; \ for (int i=0; i<3; ++i) result += vector[i]*vector[i]; \ return (TYPE)sqrt(result); \ } \ \ TYPE SNAME ## Prod(TYPE * series, int size) { \ TYPE result = 1; \ for (int i=0; i