xref: /openbsd-src/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/leak.t (revision eac174f2741a08d8deb8aae59a7f778ef9b5d770)
1*eac174f2Safresh1# -*- mode: perl; -*-
2b8851fccSafresh1
3b8851fccSafresh1# Test for memory leaks.
4b8851fccSafresh1
5b8851fccSafresh1# XXX TODO: This test file doesn't actually seem to work! If you remove
6b8851fccSafresh1# the sv_2mortal() in the XS file, it still happily passes all tests...
7b8851fccSafresh1
8b8851fccSafresh1use strict;
9b8851fccSafresh1use Test::More tests => 22;
10b8851fccSafresh1
11b8851fccSafresh1use Math::BigInt::FastCalc;
12b8851fccSafresh1
13b8851fccSafresh1#############################################################################
14b8851fccSafresh1package Math::BigInt::FastCalc::LeakCheck;
159f11ffb7Safresh1
169f11ffb7Safresh1use Math::BigInt::FastCalc;
179f11ffb7Safresh1our @ISA = qw< Math::BigInt::FastCalc >;
18b8851fccSafresh1
19b8851fccSafresh1my $destroyed = 0;
20b8851fccSafresh1sub DESTROY { $destroyed++; }
21b8851fccSafresh1
22b8851fccSafresh1#############################################################################
23b8851fccSafresh1package main;
24b8851fccSafresh1
25b8851fccSafresh1for my $method (qw(_zero _one _two _ten))
26b8851fccSafresh1  {
27b8851fccSafresh1  $destroyed = 0;
28b8851fccSafresh1    {
29b8851fccSafresh1    my $num = Math::BigInt::FastCalc::LeakCheck->$method();
30b8851fccSafresh1    bless $num, "Math::BigInt::FastCalc::LeakCheck";
31b8851fccSafresh1    }
32b8851fccSafresh1  is ($destroyed, 1, "$method does not leak memory");
33b8851fccSafresh1  }
34b8851fccSafresh1
35b8851fccSafresh1my $num = Math::BigInt::FastCalc->_zero();
36b8851fccSafresh1for my $method (qw(_is_zero _is_one _is_two _is_ten _num))
37b8851fccSafresh1  {
38b8851fccSafresh1  $destroyed = 0;
39b8851fccSafresh1    {
40b8851fccSafresh1    my $rc = Math::BigInt::FastCalc->$method($num);
41b8851fccSafresh1    bless \$rc, "Math::BigInt::FastCalc::LeakCheck";
42b8851fccSafresh1    }
43b8851fccSafresh1  is ($destroyed, 1, "$method does not leak memory");
44b8851fccSafresh1  }
45b8851fccSafresh1
46b8851fccSafresh1my $num_10 = Math::BigInt::FastCalc->_ten();
47b8851fccSafresh1my $num_2 = Math::BigInt::FastCalc->_two();
48b8851fccSafresh1
49b8851fccSafresh1my $num_long   = Math::BigInt::FastCalc->_new("1234567890");
50b8851fccSafresh1my $num_long_2 = Math::BigInt::FastCalc->_new("12345678900987654321");
51b8851fccSafresh1
52b8851fccSafresh1is (Math::BigInt::FastCalc->_str($num_long), "1234567890");
53b8851fccSafresh1is (Math::BigInt::FastCalc->_str($num_long_2), "12345678900987654321");
54b8851fccSafresh1
55b8851fccSafresh1# to hit all possible code branches
56b8851fccSafresh1_test_acmp($num, $num);
57b8851fccSafresh1_test_acmp($num_10, $num_10);
58b8851fccSafresh1_test_acmp($num, $num_10);
59b8851fccSafresh1_test_acmp($num_10, $num);
60b8851fccSafresh1_test_acmp($num, $num_2);
61b8851fccSafresh1_test_acmp($num_2, $num);
62b8851fccSafresh1_test_acmp($num_long, $num);
63b8851fccSafresh1_test_acmp($num, $num_long);
64b8851fccSafresh1_test_acmp($num_long, $num_long);
65b8851fccSafresh1_test_acmp($num_long, $num_long_2);
66b8851fccSafresh1_test_acmp($num_long_2, $num_long);
67b8851fccSafresh1
68b8851fccSafresh1sub _test_acmp
69b8851fccSafresh1  {
70b8851fccSafresh1  my ($n1,$n2) = @_;
71b8851fccSafresh1
72b8851fccSafresh1  $destroyed = 0;
73b8851fccSafresh1    {
74b8851fccSafresh1    my $rc = Math::BigInt::FastCalc->_acmp($n1,$n2);
75b8851fccSafresh1    bless \$rc, "Math::BigInt::FastCalc::LeakCheck";
76b8851fccSafresh1    }
77b8851fccSafresh1  my $n_1 = Math::BigInt::FastCalc->_str($n1);
78b8851fccSafresh1  my $n_2 = Math::BigInt::FastCalc->_str($n2);
79b8851fccSafresh1  is ($destroyed, 1, "_acmp($n_1,$n_2) does not leak memory");
80b8851fccSafresh1  }
81