#include #include #include #include using namespace std; namespace { float divideByTwo (float x) { return x / 2; } struct timesN { timesN (float n): n (n) {} float operator () (float x) {return x * n;} float n; }; } // namespace void testFunction () { cout << "halfFunction\n"; halfFunction d2 (divideByTwo); assert (d2 (0) == 0); assert (d2 (2) == 1); assert (d2 (-2) == -1); assert (d2 (HALF_MAX) == HALF_MAX / 2); assert (d2 (-HALF_MAX) == -HALF_MAX / 2); assert (d2 (half::posInf()) == 0); assert (d2 (half::negInf()) == 0); assert (d2 (half::qNan()) == 0); halfFunction t5 (timesN (5), // function 0, HALF_MAX / 8, // domain -1, // default value half::posInf(), // posInfValue half::negInf(), // negInfValue half::qNan()); // nanValue assert (t5 (0) == 0); assert (t5 (2) == 10); assert (t5 (-2) == -1); assert (t5 (HALF_MAX) == -1); assert (t5 (-HALF_MAX) == -1); assert ( t5(half::posInf()).isInfinity() && !t5(half::posInf()).isNegative()); assert (t5(half::negInf()).isInfinity() && t5(half::negInf()).isNegative()); assert (t5(half::qNan()).isNan()); cout << "ok\n\n" << flush; }