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