1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#!/usr/bin/perl -w
# Test for memory leaks.
# XXX TODO: This test file doesn't actually seem to work! If you remove
# the sv_2mortal() in the XS file, it still happily passes all tests...
use Test::More;
use strict;
BEGIN
{
$| = 1;
unshift @INC, ('../lib', '../blib/arch'); # for running manually
plan tests => 22;
}
use Math::BigInt::FastCalc;
#############################################################################
package Math::BigInt::FastCalc::LeakCheck;
use base qw(Math::BigInt::FastCalc);
my $destroyed = 0;
sub DESTROY { $destroyed++; }
#############################################################################
package main;
for my $method (qw(_zero _one _two _ten))
{
$destroyed = 0;
{
my $num = Math::BigInt::FastCalc::LeakCheck->$method();
bless $num, "Math::BigInt::FastCalc::LeakCheck";
}
is ($destroyed, 1, "$method does not leak memory");
}
my $num = Math::BigInt::FastCalc->_zero();
for my $method (qw(_is_zero _is_one _is_two _is_ten _num))
{
$destroyed = 0;
{
my $rc = Math::BigInt::FastCalc->$method($num);
bless \$rc, "Math::BigInt::FastCalc::LeakCheck";
}
is ($destroyed, 1, "$method does not leak memory");
}
my $num_10 = Math::BigInt::FastCalc->_ten();
my $num_2 = Math::BigInt::FastCalc->_two();
my $num_long = Math::BigInt::FastCalc->_new("1234567890");
my $num_long_2 = Math::BigInt::FastCalc->_new("12345678900987654321");
is (Math::BigInt::FastCalc->_str($num_long), "1234567890");
is (Math::BigInt::FastCalc->_str($num_long_2), "12345678900987654321");
# to hit all possible code branches
_test_acmp($num, $num);
_test_acmp($num_10, $num_10);
_test_acmp($num, $num_10);
_test_acmp($num_10, $num);
_test_acmp($num, $num_2);
_test_acmp($num_2, $num);
_test_acmp($num_long, $num);
_test_acmp($num, $num_long);
_test_acmp($num_long, $num_long);
_test_acmp($num_long, $num_long_2);
_test_acmp($num_long_2, $num_long);
sub _test_acmp
{
my ($n1,$n2) = @_;
$destroyed = 0;
{
my $rc = Math::BigInt::FastCalc->_acmp($n1,$n2);
bless \$rc, "Math::BigInt::FastCalc::LeakCheck";
}
my $n_1 = Math::BigInt::FastCalc->_str($n1);
my $n_2 = Math::BigInt::FastCalc->_str($n2);
is ($destroyed, 1, "_acmp($n_1,$n_2) does not leak memory");
}
|