# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..6\n"; } END {print "not ok 1\n" unless $loaded;} use CTest; $TCTEST = 'Mail::SpamCannibal::DNSBLserver::CTest'; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): $test = 2; sub ok { print "ok $test\n"; ++$test; } =pod This is what we are testing: /* serial max = 4294967295 * rollover = (1 + max / 2) = 2147483648 * * returns: * 0 s1 = s2 * -1 s1 < s2 * 1 s1 > s2 * >1 undefined */ int cmp_serial(u_int32_t s1, u_int32_t s2) { u_int32_t rollover = 2147483647; rollover += 1; /* silence unsigned integer compiler warning */ if (s1 == s2) return(0); else if ((s1 < s2 && s2 - s1 < rollover) || (s1 > s2 && s1 - s2 > rollover)) return(-1); else if ((s1 < s2 && s2 - s1 > rollover) || (s1 > s2 && s1 - s2 < rollover)) return(1); return(2); } =cut ## test 2 check equality my $s1 = 123456; my $s2 = $s1; print "failed s1 == s2, exp: 0, got: $_\nnot " if ($_ = &{"${TCTEST}::t_cmp_serial"}($s1,$s2)); &ok; ## test 3 check s1 < s2 && s2 - s1 < rollover $s1 = 123456; $s2 = $s1 + 1; print "failed s1 < s2 && s2 - s1 < rollover, exp: -1, got: $_\nnot " unless (($_ = &{"${TCTEST}::t_cmp_serial"}($s1,$s2)) == -1); &ok; ## test 4 check s1 > s2 && s1 - s2 > rollover $s1 = 4294967295; $s2 = 0; print "failed s1 > s2 && s1 - s2 > rollover, exp: -1, got $_\nnot " unless (($_ = &{"${TCTEST}::t_cmp_serial"}($s1,$s2)) == -1); &ok; ## test 5 check s1 < s2 && s2 - s1 > rollover $s1 = 0; $s2 = 4294967295; print "failed s1 < s2 && s2 - s1 > rollover, exp: 1, got: $_\nnot " unless (($_ = &{"${TCTEST}::t_cmp_serial"}($s1,$s2)) == 1); &ok; ## test 6 check s1 > s2 && s1 - s2 < rollover $s1 = 123456; $s2 = $s1 -1; print "failed s1 > s2 && s1 - s2 < rollover, exp: 1, got: $_\nnot " unless (($_ = &{"${TCTEST}::t_cmp_serial"}($s1,$s2)) == 1); &ok;