[libmath-prime-util-perl] 04/08: Compiler warnings and coverage
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:47:22 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.22
in repository libmath-prime-util-perl.
commit 7228a756b2f706622b2edb74033207629f596b0b
Author: Dana Jacobsen <dana at acm.org>
Date: Mon Feb 25 19:38:46 2013 -0800
Compiler warnings and coverage
---
MANIFEST | 2 +-
lib/Math/Prime/Util.pm | 7 +++----
lib/Math/Prime/Util/PP.pm | 1 +
sieve.h | 4 ++++
t/50-factoring.t | 5 ++++-
t/81-bignum.t | 15 +++++++++++----
util.c | 35 +----------------------------------
util.h | 1 -
8 files changed, 25 insertions(+), 45 deletions(-)
diff --git a/MANIFEST b/MANIFEST
index 6457a3a..bcd426f 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -49,7 +49,6 @@ examples/test-primes-yafu.pl
examples/test-holf.pl
examples/test-nthapprox.pl
examples/test-pcapprox.pl
-examples/test-primality-small.pl
examples/sophie_germain.pl
examples/twin_primes.pl
examples/find_mr_bases.pl
@@ -88,4 +87,5 @@ t/90-release-perlcritic.t
t/91-release-pod-syntax.t
t/92-release-pod-coverage.t
xt/moebius-mertens.pl
+xt/primality-small.pl
.travis.yml
diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index 22589e0..d2f85e8 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -1255,10 +1255,9 @@ sub divisor_sum {
}
croak "Second argument must be a code ref" unless ref($sub) eq 'CODE';
- my $sum = $n - $n;
- return ($sum+$sub->(1)) if $n == 1;
-
- foreach my $f (1, all_factors($n), $n ) {
+ my $sum = $sub->(1);
+ return $sum if $n == 1;
+ foreach my $f (all_factors($n), $n ) {
$sum += $sub->($f);
}
return $sum;
diff --git a/lib/Math/Prime/Util/PP.pm b/lib/Math/Prime/Util/PP.pm
index 6bccaed..4f036d8 100644
--- a/lib/Math/Prime/Util/PP.pm
+++ b/lib/Math/Prime/Util/PP.pm
@@ -1138,6 +1138,7 @@ sub trial_factor {
sub factor {
my($n) = @_;
_validate_positive_integer($n);
+ $n = $n->copy if ref($n) eq 'Math::BigInt';
return trial_factor($n) if $n < 100000;
diff --git a/sieve.h b/sieve.h
index 9bf8c49..8e1f3f9 100644
--- a/sieve.h
+++ b/sieve.h
@@ -27,12 +27,14 @@ static const unsigned char distancewheel30[30] =
static const unsigned char wheeladvance30[30] =
{0,6,0,0,0,0,0,4,0,0,0,2,0,4,0,0,0,2,0,4,0,0,0,6,0,0,0,0,0,2};
+#if 0
static int is_prime_in_sieve(const unsigned char* sieve, UV p) {
UV d = p/30;
UV m = p - d*30;
/* If m isn't part of the wheel, we return 0 */
return ( (masktab30[m] != 0) && ((sieve[d] & masktab30[m]) == 0) );
}
+#endif
/* Warning -- can go off the end of the sieve */
static UV next_prime_in_sieve(const unsigned char* sieve, UV p) {
@@ -47,6 +49,7 @@ static UV next_prime_in_sieve(const unsigned char* sieve, UV p) {
} while (sieve[d] & masktab30[m]);
return(d*30+m);
}
+#if 0
static UV prev_prime_in_sieve(const unsigned char* sieve, UV p) {
UV d, m;
if (p <= 7)
@@ -58,6 +61,7 @@ static UV prev_prime_in_sieve(const unsigned char* sieve, UV p) {
} while (sieve[d] & masktab30[m]);
return(d*30+m);
}
+#endif
/* Useful macros for the wheel-30 sieve array */
#define START_DO_FOR_EACH_SIEVE_PRIME(sieve, a, b) \
diff --git a/t/50-factoring.t b/t/50-factoring.t
index fdc2008..35cf133 100644
--- a/t/50-factoring.t
+++ b/t/50-factoring.t
@@ -73,7 +73,7 @@ my %all_factors = (
0 => [],
);
-plan tests => (2 * scalar @testn) + scalar(keys %all_factors) + 7*8;
+plan tests => (2 * scalar @testn) + scalar(keys %all_factors) + 10*8;
foreach my $n (@testn) {
my @f = factor($n);
@@ -113,7 +113,10 @@ sub extra_factor_test {
is_deeply( [ sort {$a<=>$b} $fsub->(1) ], [1], "$fname(1)" );
is_deeply( [ sort {$a<=>$b} $fsub->(4) ], [2, 2], "$fname(4)" );
is_deeply( [ sort {$a<=>$b} $fsub->(9) ], [3, 3], "$fname(9)" );
+ is_deeply( [ sort {$a<=>$b} $fsub->(11) ], [11], "$fname(11)" );
is_deeply( [ sort {$a<=>$b} $fsub->(25) ], [5, 5], "$fname(25)" );
+ is_deeply( [ sort {$a<=>$b} $fsub->(30) ], [2, 3, 5], "$fname(30)" );
+ is_deeply( [ sort {$a<=>$b} $fsub->(210) ], [2,3,5,7], "$fname(210)" );
is_deeply( [ sort {$a<=>$b} $fsub->(175) ], [5, 5, 7], "$fname(175)" );
is_deeply( [ sort {$a<=>$b} $fsub->(403) ], [13, 31], "$fname(403)" );
is_deeply( [ sort {$a<=>$b} $fsub->(549900) ], [2,2,3,3,5,5,13,47], "$fname(549900)" );
diff --git a/t/81-bignum.t b/t/81-bignum.t
index d7bfba8..96e5baa 100644
--- a/t/81-bignum.t
+++ b/t/81-bignum.t
@@ -74,7 +74,7 @@ plan tests => 0
+ 6*2*$extra # more PC tests
+ scalar(keys %factors)
+ scalar(keys %allfactors)
- + 2 # moebius, euler_phi
+ + 4 # moebius, euler_phi, jordan totient
+ 15 # random primes
+ 0;
@@ -95,6 +95,8 @@ use Math::Prime::Util qw/
all_factors
moebius
euler_phi
+ jordan_totient
+ divisor_sum
ExponentialIntegral
LogarithmicIntegral
RiemannR
@@ -199,9 +201,14 @@ SKIP: {
###############################################################################
SKIP: {
- skip "Your 64-bit Perl is broken, skipping moebius and euler_phi tests", 2 if $broken64;
- is( moebius(618970019642690137449562110), -1, "moebius(618970019642690137449562110)" );
- is( euler_phi(618970019642690137449562110), 145857122964987051805507584, "euler_phi(618970019642690137449562110)" );
+ skip "Your 64-bit Perl is broken, skipping moebius and euler_phi tests", 4 if $broken64;
+ my $n;
+ $n = 618970019642690137449562110;
+ is( moebius($n), -1, "moebius($n)" );
+ is( euler_phi($n), 145857122964987051805507584, "euler_phi($n)" );
+ $n = 48981631802481400359696467;
+ is( jordan_totient(5,$n), 281946200770875813001683560563488308767928594805846855593191749929654015729263525162226378019837608857421063724603387506651820000, "jordan_totient(5,$n)" );
+ is( divisor_sum( $n, sub { my $d=shift; $d**5 * moebius($n/$d); }), 281946200770875813001683560563488308767928594805846855593191749929654015729263525162226378019837608857421063724603387506651820000, "jordan totient using divisor_sum and moebius" );
}
###############################################################################
diff --git a/util.c b/util.c
index b6aa33e..5e83a3a 100644
--- a/util.c
+++ b/util.c
@@ -14,7 +14,7 @@
/* These math functions are a clusterfrack. They're defined by C99, but
* NetBSD doesn't have them. You need them in both the headers and libraries,
* but there is no standard way to find out if the libraries have them. The
- * best way (I belive) to deal with this is having the make system do test
+ * best way (I believe) to deal with this is having the make system do test
* compiles. Barring that, we make limited guesses, and just give up
* precision on any system we don't recognize.
*/
@@ -151,39 +151,6 @@ int _XS_is_prime(UV n)
return (isprime >= 0) ? isprime : _is_prime7(n);
}
-/* Shortcut, asking for a very quick response of 1 = prime, 0 = dunno.
- * No trial divisions will be done, making this useful for factoring.
- */
-int is_definitely_prime(UV n)
-{
- UV d, m;
- unsigned char mtab;
- const unsigned char* sieve;
- int isprime;
-
- if ( n < (NPRIME_IS_SMALL*8))
- return ((prime_is_small[n/8] >> (n%8)) & 1);
-
- d = n/30;
- m = n - d*30;
- mtab = masktab30[m]; /* Bitmask in mod30 wheel */
-
- /* Return 0 if a multiple of 2, 3, or 5 */
- if (mtab == 0)
- return 0;
-
- isprime = (n <= get_prime_cache(0, &sieve))
- ? ((sieve[d] & mtab) == 0)
- : -1;
- release_prime_cache(sieve);
- if (isprime >= 0) return isprime;
-
- if (n > MPU_PROB_PRIME_BEST)
- return (_XS_is_prob_prime(n) == 2);
-
- return 0;
-}
-
static const unsigned char prime_next_small[] =
{2,2,3,5,5,7,7,11,11,11,11,13,13,17,17,17,17,19,19,23,23,23,23,
diff --git a/util.h b/util.h
index 18f5568..4ab091f 100644
--- a/util.h
+++ b/util.h
@@ -7,7 +7,6 @@ extern int _XS_get_verbose(void);
extern void _XS_set_verbose(int v);
extern int _XS_is_prime(UV x);
-extern int is_definitely_prime(UV x);
extern UV next_trial_prime(UV x);
extern UV _XS_next_prime(UV x);
extern UV _XS_prev_prime(UV x);
--
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