—# 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;
"1..6\n"
; }
END {
"not ok 1\n"
unless
$loaded
;}
use
CTest;
$TCTEST
=
'Mail::SpamCannibal::DNSBLserver::CTest'
;
$loaded
= 1;
"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 {
"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
;
"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;
"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;
"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;
"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;
"failed s1 > s2 && s1 - s2 < rollover, exp: 1, got: $_\nnot "
unless
((
$_
= &{
"${TCTEST}::t_cmp_serial"
}(
$s1
,
$s2
)) == 1);
&ok
;