[libmath-prime-util-perl] 159/181: Call Math::BigInt importer only if it hasn't been loaded already

Partha P. Mukherjee ppm-guest at moszumanska.debian.org
Thu May 21 18:51:17 UTC 2015


This is an automated email from the git hooks/post-receive script.

ppm-guest pushed a commit to annotated tag v0.36
in repository libmath-prime-util-perl.

commit e86068b2f482fbd54d4345e88e6d308daf44feed
Author: Dana Jacobsen <dana at acm.org>
Date:   Fri Jan 10 17:16:51 2014 -0800

    Call Math::BigInt importer only if it hasn't been loaded already
---
 lib/Math/Prime/Util.pm                   |  9 ++++-
 lib/Math/Prime/Util/ECAffinePoint.pm     |  6 ++-
 lib/Math/Prime/Util/ECProjectivePoint.pm |  6 ++-
 lib/Math/Prime/Util/PP.pm                |  6 ++-
 lib/Math/Prime/Util/PrimalityProving.pm  |  6 ++-
 lib/Math/Prime/Util/PrimeIterator.pm     |  1 -
 lib/Math/Prime/Util/ZetaBigFloat.pm      |  8 +++-
 t/23-primality-proofs.t                  |  5 ---
 t/80-pp.t                                |  2 +-
 t/81-bignum.t                            |  2 +-
 t/94-weaken.t                            | 68 ++++++++++++++++++++++++++++++++
 11 files changed, 104 insertions(+), 15 deletions(-)

diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index 9a7a1ff..b74c021 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -2,13 +2,20 @@ package Math::Prime::Util;
 use strict;
 use warnings;
 use Carp qw/croak confess carp/;
-use Math::BigInt try=>"GMP,Pari";
 
 BEGIN {
   $Math::Prime::Util::AUTHORITY = 'cpan:DANAJ';
   $Math::Prime::Util::VERSION = '0.36';
 }
 
+BEGIN {
+  # If they have used Math::BigInt already, make sure we don't change the
+  # back end.  If they have not, try to get one of the fast ones.
+  do { require Math::BigInt;  Math::BigInt->import(try=>"GMP,Pari"); }
+    unless defined $Math::BigInt::VERSION;
+}
+
+
 # parent is cleaner, and in the Perl 5.10.1 / 5.12.0 core, but not earlier.
 # use parent qw( Exporter );
 use base qw( Exporter );
diff --git a/lib/Math/Prime/Util/ECAffinePoint.pm b/lib/Math/Prime/Util/ECAffinePoint.pm
index 22e6cb6..9683ffc 100644
--- a/lib/Math/Prime/Util/ECAffinePoint.pm
+++ b/lib/Math/Prime/Util/ECAffinePoint.pm
@@ -2,13 +2,17 @@ package Math::Prime::Util::ECAffinePoint;
 use strict;
 use warnings;
 use Carp qw/carp croak confess/;
-use Math::BigInt try=>"GMP,Pari";
 
 BEGIN {
   $Math::Prime::Util::ECAffinePoint::AUTHORITY = 'cpan:DANAJ';
   $Math::Prime::Util::ECAffinePoint::VERSION = '0.36';
 }
 
+BEGIN {
+  do { require Math::BigInt;  Math::BigInt->import(try=>"GMP,Pari"); }
+    unless defined $Math::BigInt::VERSION;
+}
+
 # Pure perl (with Math::BigInt) manipulation of Elliptic Curves
 # in affine coordinates.  Should be split into a point class.
 
diff --git a/lib/Math/Prime/Util/ECProjectivePoint.pm b/lib/Math/Prime/Util/ECProjectivePoint.pm
index f6343c0..568d6f8 100644
--- a/lib/Math/Prime/Util/ECProjectivePoint.pm
+++ b/lib/Math/Prime/Util/ECProjectivePoint.pm
@@ -2,13 +2,17 @@ package Math::Prime::Util::ECProjectivePoint;
 use strict;
 use warnings;
 use Carp qw/carp croak confess/;
-use Math::BigInt try=>"GMP,Pari";
 
 BEGIN {
   $Math::Prime::Util::ECProjectivePoint::AUTHORITY = 'cpan:DANAJ';
   $Math::Prime::Util::ECProjectivePoint::VERSION = '0.36';
 }
 
+BEGIN {
+  do { require Math::BigInt;  Math::BigInt->import(try=>"GMP,Pari"); }
+    unless defined $Math::BigInt::VERSION;
+}
+
 # Pure perl (with Math::BigInt) manipulation of Elliptic Curves
 # in projective coordinates.
 
diff --git a/lib/Math/Prime/Util/PP.pm b/lib/Math/Prime/Util/PP.pm
index ca5eebd..b1bdead 100644
--- a/lib/Math/Prime/Util/PP.pm
+++ b/lib/Math/Prime/Util/PP.pm
@@ -2,13 +2,17 @@ package Math::Prime::Util::PP;
 use strict;
 use warnings;
 use Carp qw/carp croak confess/;
-use Math::BigInt try=>"GMP,Pari";
 
 BEGIN {
   $Math::Prime::Util::PP::AUTHORITY = 'cpan:DANAJ';
   $Math::Prime::Util::PP::VERSION = '0.36';
 }
 
+BEGIN {
+  do { require Math::BigInt;  Math::BigInt->import(try=>"GMP,Pari"); }
+    unless defined $Math::BigInt::VERSION;
+}
+
 # The Pure Perl versions of all the Math::Prime::Util routines.
 #
 # Some of these will be relatively similar in performance, some will be
diff --git a/lib/Math/Prime/Util/PrimalityProving.pm b/lib/Math/Prime/Util/PrimalityProving.pm
index 69aebf4..1e2cfd5 100644
--- a/lib/Math/Prime/Util/PrimalityProving.pm
+++ b/lib/Math/Prime/Util/PrimalityProving.pm
@@ -2,7 +2,6 @@ package Math::Prime::Util::PrimalityProving;
 use strict;
 use warnings;
 use Carp qw/carp croak confess/;
-use Math::BigInt try=>"GMP,Pari";
 use Math::Prime::Util qw/is_prob_prime is_strong_pseudoprime
                          is_provable_prime_with_cert
                          lucas_sequence
@@ -15,6 +14,11 @@ BEGIN {
   $Math::Prime::Util::PrimalityProving::VERSION = '0.36';
 }
 
+BEGIN {
+  do { require Math::BigInt;  Math::BigInt->import(try=>"GMP,Pari"); }
+    unless defined $Math::BigInt::VERSION;
+}
+
 my $_smallval = Math::BigInt->new("18446744073709551615");
 
 
diff --git a/lib/Math/Prime/Util/PrimeIterator.pm b/lib/Math/Prime/Util/PrimeIterator.pm
index 4573c34..6a4c2a7 100644
--- a/lib/Math/Prime/Util/PrimeIterator.pm
+++ b/lib/Math/Prime/Util/PrimeIterator.pm
@@ -13,7 +13,6 @@ our %EXPORT_TAGS = (all => [ @EXPORT_OK ]);
 
 
 use Math::Prime::Util qw/next_prime prev_prime is_prime prime_count nth_prime/;
-use Math::BigInt try => "GMP,Pari";
 
 # We're going to use a scalar rather than a hash because there is currently
 # only one data object (the current value) and this makes it little faster.
diff --git a/lib/Math/Prime/Util/ZetaBigFloat.pm b/lib/Math/Prime/Util/ZetaBigFloat.pm
index b87792c..9b2e075 100644
--- a/lib/Math/Prime/Util/ZetaBigFloat.pm
+++ b/lib/Math/Prime/Util/ZetaBigFloat.pm
@@ -7,8 +7,12 @@ BEGIN {
   $Math::Prime::Util::ZetaBigFloat::VERSION = '0.36';
 }
 
-use Math::BigInt try => "GMP,Pari";
-use Math::BigFloat;
+BEGIN {
+  do { require Math::BigInt;  Math::BigInt->import(try=>"GMP,Pari"); }
+    unless defined $Math::BigInt::VERSION;
+  use Math::BigFloat;
+}
+
 
 # Riemann Zeta($k) for integer $k.
 # So many terms and digits are used so we can quickly do bignum R.
diff --git a/t/23-primality-proofs.t b/t/23-primality-proofs.t
index cdc5912..d5f2191 100644
--- a/t/23-primality-proofs.t
+++ b/t/23-primality-proofs.t
@@ -7,7 +7,6 @@ use Math::Prime::Util qw/is_prime is_provable_prime is_provable_prime_with_cert
                          prime_certificate verify_prime
                          prime_get_config prime_set_config
                         /;
-use Math::BigInt try => 'GMP';
 
 my $use_test_warn;
 BEGIN {
@@ -42,10 +41,6 @@ if ($extra || prime_get_config->{'gmp'}) {
 #push @plist, '531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127'
 #             if $extra && prime_get_config->{'gmp'};
 
- at plist = sort { $a<=>$b }
-         map { $_ > ~0 ? Math::BigInt->new("$_") : $_ }
-         @plist;
-
 plan tests => 0
             + 2  # is_provable_prime
             + 6 * scalar(@plist)
diff --git a/t/80-pp.t b/t/80-pp.t
index 9294d1a..b744b5e 100644
--- a/t/80-pp.t
+++ b/t/80-pp.t
@@ -271,7 +271,7 @@ use Math::Prime::Util qw/primes prime_count_approx prime_count_lower
                          exp_mangoldt chebyshev_theta chebyshev_psi
                          is_prob_prime
                         /;
-use Math::BigInt try => 'GMP';
+use Math::BigInt;
 use Math::BigFloat;
 require_ok 'Math::Prime::Util::PP';
 require_ok 'Math::Prime::Util::PrimalityProving';
diff --git a/t/81-bignum.t b/t/81-bignum.t
index a636b09..6d90652 100644
--- a/t/81-bignum.t
+++ b/t/81-bignum.t
@@ -85,7 +85,7 @@ plan tests =>  0
              + 1;
 
 # Using GMP makes these tests run about 2x faster on some machines
-use bigint try => 'GMP';   #  <--------------- large numbers ahead!  > 2^64
+use bigint try => 'GMP,Pari'; #  <--------------- large numbers ahead!  > 2^64
 use Math::BigFloat;
 
 use Math::Prime::Util qw/
diff --git a/t/94-weaken.t b/t/94-weaken.t
new file mode 100644
index 0000000..6c9c20f
--- /dev/null
+++ b/t/94-weaken.t
@@ -0,0 +1,68 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+BEGIN {
+  unless ($ENV{RELEASE_TESTING}) {
+    require Test::More;
+    Test::More::plan(skip_all => 'these tests are for release candidate testing');
+  }
+}
+
+#---------------------------------------------------------------------
+
+
+use Test::More;
+eval "use Test::Weaken";
+plan skip_all => "Test::Weaken required for testing leaks" if $@;
+
+use Math::Prime::Util qw/prime_iterator primes factor moebius/;
+use Math::Prime::Util::PrimeIterator;
+
+my $leaks;
+
+$leaks = Test::Weaken::leaks(
+  { constructor => sub {
+      my $it = prime_iterator(100);
+      return \$it;
+    }
+  });
+ok(!$leaks, "Prime iterator doesn't leak");
+
+$leaks = Test::Weaken::leaks(
+  { constructor => sub {
+      my $it = Math::Prime::Util::PrimeIterator->new(100);
+      return \$it;
+    }
+  });
+ok(!$leaks, "Prime iterator object doesn't leak");
+
+$leaks = Test::Weaken::leaks(
+  { constructor => sub {
+      my $it = prime_iterator("1000000000000000000000000");
+      my $p = $it->();
+      return \$it;
+    }
+  });
+ok(!$leaks, "Prime iterator object doesn't leak");
+
+$leaks = Test::Weaken::leaks(
+  sub {
+    my $primes = primes(66000);
+    return $primes
+  });
+ok(!$leaks, "primes array doesn't leak");
+
+$leaks = Test::Weaken::leaks(
+  sub {
+    return [factor(2938424874)];
+  });
+ok(!$leaks, "factor array doesn't leak");
+
+$leaks = Test::Weaken::leaks(
+  sub {
+    return [moebius(500,1000)];
+  });
+ok(!$leaks, "moebius range doesn't leak");
+
+done_testing();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git



More information about the Pkg-perl-cvs-commits mailing list