--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/testmath.c Wed Aug 02 04:13:15 2006 +0000 @@ -0,0 +1,159 @@ +#include +#include +#include + +#define write_string(x) printf(x) +#define write_int(x) printf( "%08X", x ) + +int do_fsca(int angle, float *a, float *b); +float do_fsrra( float param ); +float do_fipr( float *vectora, float *vectorb ); +float do_fipr2( float *vectora, float *vectorb ); +void do_ftrv( float *matrix, float *vector ); +void do_ftrv2( float *matrix, float *vector ); + +unsigned int get_fpscr(); +void set_fpscr( unsigned int fpscr ); + +#define MAX_FLOAT_DIFF 0.00001 + + +int compare_float( float a, float b ) +{ + if( a == b ) + return 1; + float diff = (a>b?(a-b):(b-a)); + return diff < MAX_FLOAT_DIFF; +} + +#define TEST_FEQUALS( a, b ) if( !compare_float(a,b) ) { printf( "Assertion failed at %s.%d: expected %.8f but was %.8f\n", __FILE__, __LINE__, a, b ); return 1; } + +int test_fsca( int angle, float expect_a, float expect_b ) +{ + float a = 10.0; + float b = 10.0; + do_fsca(angle, &a, &b ); + + TEST_FEQUALS(expect_a, a); + TEST_FEQUALS(expect_b, b); +} + +int test_fsrra( float f, float expect ) +{ + float f2 = do_fsrra( f ); + TEST_FEQUALS( expect, f2 ); +} + +void test_coercion( float f ) +{ + double d = (double)f; + float q = (float)d; + unsigned int i = (unsigned int)d; + signed int j = (signed int)q; + + printf( "Coerce: %08X %08X%08X %08X %08X %08X\n", *((unsigned int *)&f), + *((unsigned int *)&d), *(((unsigned int *)&d)+1), + *((unsigned int *)&q), i, j ); +} + +void test_doublearr( int len ) +{ + double arr[len]; + unsigned int *iarr = (unsigned int *)&arr; + int i; + arr[0] = 2.5; + for( i=1; i