// test_round.cc -- test driver for round and round // $Header$ #include #include #include "stdc.h" #include "util.hh" using namespace AHFinderDirect; using jtutil::round; // // Usage: // test_round x // int main(int argc, const char* const argv[]) { for (int i = -10 ; i <= +10 ; ++i) { printf("testing %d +/- various things...\n", i); float f = float(i); double d = double(i); // // round::to_integer() // assert( round::to_integer(d - 0.49) == i ); assert( round::to_integer(d - 0.01) == i ); assert( round::to_integer(d - 1e-4) == i ); assert( round::to_integer(d - 1e-10) == i ); assert( round::to_integer(d ) == i ); assert( round::to_integer(d + 1e-10) == i ); assert( round::to_integer(d + 1e-4) == i ); assert( round::to_integer(d + 0.01) == i ); assert( round::to_integer(d + 0.49) == i ); assert( round::to_integer(f - 0.49) == i ); assert( round::to_integer(f - 0.01) == i ); assert( round::to_integer(f - 1e-4) == i ); assert( round::to_integer(f - 1e-10) == i ); assert( round::to_integer(f ) == i ); assert( round::to_integer(f + 1e-10) == i ); assert( round::to_integer(f + 1e-4) == i ); assert( round::to_integer(f + 0.01) == i ); assert( round::to_integer(f + 0.49) == i ); // // round::floor() // assert( round::floor(d - 0.49) == i-1 ); assert( round::floor(d - 0.01) == i-1); assert( round::floor(d - 1e-4) == i-1 ); assert( round::floor(d - 1e-10) == i-1 ); assert( round::floor(d ) == i ); assert( round::floor(d + 1e-10) == i ); assert( round::floor(d + 1e-4) == i ); assert( round::floor(d + 0.01) == i ); assert( round::floor(d + 0.49) == i ); assert( round::floor(f - 0.49) == i-1 ); assert( round::floor(f - 0.01) == i-1 ); assert( round::floor(f - 1e-4) == i-1 ); assert( round::floor(f - 1e-10) == ((i == 0) ? i-1 : i) ); // i != 0 ==> not enough precision // to see as noninteger assert( round::floor(f ) == i ); assert( round::floor(f + 1e-10) == i ); assert( round::floor(f + 1e-4) == i ); assert( round::floor(f + 0.01) == i ); assert( round::floor(f + 0.49) == i ); // // round::ceiling() // assert( round::ceiling(d - 0.49) == i ); assert( round::ceiling(d - 0.01) == i); assert( round::ceiling(d - 1e-4) == i ); assert( round::ceiling(d - 1e-10) == i ); assert( round::ceiling(d ) == i ); assert( round::ceiling(d + 1e-10) == i+1 ); assert( round::ceiling(d + 1e-4) == i+1 ); assert( round::ceiling(d + 0.01) == i+1 ); assert( round::ceiling(d + 0.49) == i+1 ); assert( round::ceiling(f - 0.49) == i ); assert( round::ceiling(f - 0.01) == i); assert( round::ceiling(f - 1e-4) == i ); assert( round::ceiling(f - 1e-10) == i ); assert( round::ceiling(f ) == i ); assert( round::ceiling(f + 1e-10) == ((i == 0) ? i+1 : i) ); // i != 0 ==> not enough precision // to see as noninteger assert( round::ceiling(f + 1e-4) == i+1 ); assert( round::ceiling(f + 0.01) == i+1 ); assert( round::ceiling(f + 0.49) == i+1 ); } printf("everything looks ok!\n"); return 0; }