Combined the tests for addition in occam into a macro

This commit is contained in:
Neil Brown 2009-01-22 11:46:54 +00:00
parent 0d2ea4c920
commit 890b922f2b

View File

@ -31,7 +31,7 @@ int g_stopped;
if (g_stopped == 1) { \
report_failure(#call "failed, unexpectedly stopped\n"); \
} else { \
report_failure(#call " failed, expected %d, got %d\n", exp, call); \
report_failure(#call " failed, expected %lld, got %lld\n", (int64_t)exp, (int64_t)call); \
} \
} \
} while (0)
@ -57,7 +57,22 @@ int g_stopped;
} \
}passes++; comm_label_##f:;} while (0)
// All the addition cases I wrote were effectively the same,
// so I just made it a macro. We define min to be -max-1, which gets around
// the fact that the C standard apparently says that the largest
// constant for a value is -max (not -max-1).
#define check_addition(max, f) \
do { testp(2,f(1,1,"")); \
testp(0,f(0,0,"")); \
testp(-1,f(0,-1,"")); \
testp(max,f((max>>1)+1,max>>1,"")); \
testf(f((max>>1)+1,(max>>1)+1,"")); \
testf(f(max,max,"")); \
testf(f(-max-1,-max-1,"")); \
testp(-1,f(-max-1,max,"")); \
testp(-max-1,f(-max-1,0,"")); \
testp(max,f(max,0,"")); \
} while (0)
int main(int argc, char** argv)
{
@ -68,13 +83,11 @@ int main(int argc, char** argv)
//we only need to test one arrangement of each addition
//and multiplication test
testp(2,occam_add_int8_t(1,1,""));
testp(127,occam_add_int8_t(64,63,""));
testf(occam_add_int8_t(64,64,""));
testp(-1,occam_add_int8_t(127,-128,""));
testp(-1,occam_add_int8_t(-1,0,""));
testp(-128,occam_add_int8_t(-128,0,""));
check_addition(127,occam_add_int8_t);
check_addition(32767,occam_add_int16_t);
check_addition(2147483647,occam_add_int32_t);
check_addition(9223372036854775807,occam_add_int64_t);
testf(occam_mul_int8_t(127,127,""));
testf(occam_mul_int8_t(2,127,""));
testf(occam_mul_int8_t(127,127,""));
@ -87,10 +100,6 @@ int main(int argc, char** argv)
test_commutative(int8_t,occam_add_int8_t);
test_commutative(int8_t,occam_mul_int8_t);
testp(-32768,occam_add_int16_t(-32768,0,""));
testf(occam_add_int16_t(-1,-32768,""));
testp(32767,occam_add_int16_t(0,32767,""));
test_commutative(int16_t,occam_add_int16_t);
test_commutative(int16_t,occam_mul_int16_t);