#include #include /* * During the development of OpenGL on NT, we have had problems * with the compiler and floating point. Here are a few simple * sanity checks to make sure the compiler didn't regress. */ #define POW_TEST \ /* pow(0,0) should be 1 not 0 */ \ f = (float)pow(0.0, 0.0); \ printf("pow(0.0, 0.0) is %f ", f); \ if (f == 1.0F) { \ printf("Correct\n"); \ } else { \ printf("ERROR\n"); \ errorcount++; \ } #define FLOOR_TEST \ /* floor() would always return 0! */ \ d = floor(8.123); \ printf("floor(8.123) is %lf ", d); \ if (d == 8.0) { \ printf("Correct\n"); \ } else { \ printf("ERROR\n"); \ errorcount++; \ } \ d = floor(63.5); \ printf("floor(63.5) is %lf ", d); \ if (d == 63.0) { \ printf("Correct\n"); \ } else { \ printf("ERROR\n"); \ errorcount++; \ } int nointrin(void); int CastTest(void); main() { float f; double d; int errorcount = 0; f = (float)pow(0.0, 3.0); if (f != 0.0F) { printf("pow(0.0, 3.0) not 0.0! ERROR\n"); errorcount++; } else { printf("pow(0.0, 3.0) is 0.0 Correct\n"); } POW_TEST; FLOOR_TEST; errorcount += CastTest(); errorcount += nointrin(); if (errorcount) printf("%d errors in test\n", errorcount); else printf("\nAll tests passed\n"); return errorcount; } int CastTest() { double dMaxUint; unsigned int uiResult; dMaxUint = 4294967295.0; uiResult = (unsigned int)dMaxUint; printf("uiResult(0x%08lX) = (unsigned int)dMaxUint(%lf) ", uiResult, dMaxUint); if (uiResult == 0xffffffff) { printf("Correct\n"); return 0; } else { printf("ERROR\n"); return 1; } } #pragma function (pow) #pragma function (floor) int nointrin() { float f; double d; int errorcount = 0; printf("\n\nNot using intrinsic functions for:\n"); printf("pow()\n"); printf("floor()\n"); printf("\n"); POW_TEST; FLOOR_TEST; return errorcount; }