[libmath-prime-util-perl] 68/72: Update iterator object value_to_i*

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


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

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

commit 396279fbeb61714944c202968ffd3bc5aee23d00
Author: Dana Jacobsen <dana at acm.org>
Date:   Mon Oct 14 13:21:15 2013 -0700

    Update iterator object value_to_i*
---
 TODO                                 |  2 --
 lib/Math/Prime/Util/PrimeIterator.pm | 34 +++++++++++++++++++++++++++-------
 t/32-iterators.t                     |  7 ++++---
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/TODO b/TODO
index 4dd824b..23dd043 100644
--- a/TODO
+++ b/TODO
@@ -40,8 +40,6 @@
 
 - Use Montgomery routines in more places: Factoring.
 
-- More tests for PrimeIterator.
-
 - Put euler_phi and moebius directly in XS.
     (1) optional second argument.  Easily handled, and not hard to do in
         generic sub call.
diff --git a/lib/Math/Prime/Util/PrimeIterator.pm b/lib/Math/Prime/Util/PrimeIterator.pm
index 7aa20f9..f5ab634 100644
--- a/lib/Math/Prime/Util/PrimeIterator.pm
+++ b/lib/Math/Prime/Util/PrimeIterator.pm
@@ -12,7 +12,7 @@ our @EXPORT_OK = qw( );
 our %EXPORT_TAGS = (all => [ @EXPORT_OK ]);
 
 
-use Math::Prime::Util qw/next_prime prev_prime/;
+use Math::Prime::Util qw/next_prime prev_prime is_prime prime_count nth_prime/;
 use Math::BigInt try => "GMP,Pari";
 
 my $bigprime = Math::BigInt->new(
@@ -65,19 +65,19 @@ sub rewind {
 # Some methods to match Math::NumSeq
 sub tell_i {
   my $self = shift;
-  return Math::Prime::Util::prime_count($self->{p});
+  return prime_count($self->{p});
 }
 sub pred {
   my($self, $n) = @_;
-  return Math::Prime::Util::is_prime($n);
+  return is_prime($n);
 }
 sub ith {
   my($self, $n) = @_;
-  return Math::Prime::Util::nth_prime($n);
+  return nth_prime($n);
 }
 sub seek_to_i {
   my($self, $n) = @_;
-  $self->rewind( Math::Prime::Util::nth_prime($n) );
+  $self->rewind( nth_prime($n) );
 }
 sub seek_to_value {
   my($self, $n) = @_;
@@ -85,7 +85,16 @@ sub seek_to_value {
 }
 sub value_to_i {
   my($self, $n) = @_;
-  return Math::Prime::Util::prime_count($n);
+  return unless is_prime($n);
+  return prime_count($n);
+}
+sub value_to_i_ceil {
+  my($self, $n) = @_;
+  return prime_count(next_prime($n-1));
+}
+sub value_to_i_floor {
+  my($self, $n) = @_;
+  return prime_count($n);
 }
 sub value_to_i_estimate {
   my($self, $n) = @_;
@@ -216,7 +225,18 @@ Math::NumSeq::Primes returns 4708661.
 
 =head2 value_to_i
 
-Returns the index corresponding to the argument.
+If the argument is prime, then returns the index.  In this case:
+
+  ith( value_to_i( $n ) ) == $n
+
+Returns C<undef> if the argument is not prime.
+
+=head2 value_to_i_floor
+
+=head2 value_to_i_ceil
+
+Returns the index corresponding to the first prime less than or equal
+to the argument, or greater than or equal to the argument, respectively.
 
 =head2 seek_to_i
 
diff --git a/t/32-iterators.t b/t/32-iterators.t
index b7fc19c..c16440f 100644
--- a/t/32-iterators.t
+++ b/t/32-iterators.t
@@ -14,7 +14,7 @@ plan tests => 8 + 5
             + 3 + 7
             + 2
             + 3 + 7
-            + 22
+            + 25
             + 0;
 
 ok(!eval { forprimes { 1 } undef; },   "forprimes undef");
@@ -174,8 +174,9 @@ ok(!eval { prime_iterator_object(4.5); }, "iterator 4.5");
   is( $it->ith(589), 4289, "iterator object ith returns nth prime");
   ok( $it->pred(577), "iterator object pred returns true if is_prime");
   is( $it->value_to_i(4289), 589, "iterator object value_to_i works");
-  # missing: value_to_i_ceil
-  # missing: value_to_i_floor
+  is( $it->value_to_i(4290), undef, "iterator object value_to_i for non-prime returns undef");
+  is( $it->value_to_i_floor(4290), 589, "iterator object value_to_i_floor");
+  is( $it->value_to_i_ceil(4290), 590, "iterator object value_to_i_ceil");
   my $est = $it->value_to_i_estimate( 4171510507 );
   my $act = 197710788;
   # We will get an estimate that is much, much closer than Math::NumSeq

-- 
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