This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Math::BigInt 1.75, by Tels
[perl5.git] / lib / Math / BigInt / t / mbi_rand.t
index dd28051..d24920f 100644 (file)
@@ -28,6 +28,12 @@ my $length = 128;
 my $seed = ($#ARGV == 0) ? $ARGV[0] : int(rand(1165537));
 print "# seed: $seed\n"; srand($seed);
 
+print "# lib: ", Math::BigInt->config()->{lib},"\n";
+if (Math::BigInt->config()->{lib} =~ /::Calc/)
+  {
+  print "# base len: ", scalar Math::BigInt::Calc->_base_len(),"\n";
+  }
+
 my ($A,$B,$As,$Bs,$ADB,$AMB,$la,$lb);
 my $two = Math::BigInt->new(2);
 for (my $i = 0; $i < $count; $i++)
@@ -46,9 +52,9 @@ for (my $i = 0; $i < $count; $i++)
 
   $As =~ s/^0+//; $Bs =~ s/^0+//; 
   $As = $As || '0'; $Bs = $Bs || '0';
-  # print "# As $As\n# Bs $Bs\n";
+ print "# As $As\n# Bs $Bs\n";
   $A = $c->new($As); $B = $c->new($Bs);
-  print "# A $A\n# B $B\n";
+  print "# A $A\n# B $B\n";
   if ($A->is_zero() || $B->is_zero())
     {
     for (1..4) { ok (1,1); } next;
@@ -59,22 +65,28 @@ for (my $i = 0; $i < $count; $i++)
   # $X = ($A/$B)*$B + 2 * ($A % $B) - ($A % $B);
 
   ($ADB,$AMB) = $A->copy()->bdiv($B);
-#  print "# ($A / $B, $A % $B ) = $ADB $AMB\n";
+  print "# ($A / $B, $A % $B ) = $ADB $AMB\n";
 
   print "# seed $seed, ". join(' ',Math::BigInt::Calc->_base_len()),"\n".
         "# tried $ADB * $B + $two*$AMB - $AMB\n"
    unless ok ($ADB*$B+$two*$AMB-$AMB,$As);
-  print "# seed: $seed, \$ADB * \$B / \$B = ", $ADB * $B / $B, " != $ADB (\$B=$B)\n"
-   unless ok ($ADB*$B/$B,$ADB);
+  if (ok ($ADB*$B/$B,$ADB))
+    {
+    print "# seed: $seed, \$ADB * \$B / \$B = ", $ADB * $B / $B, " != $ADB (\$B=$B)\n";
+    if (Math::BigInt->config()->{lib} =~ /::Calc/)
+      {
+      print "# ADB->[-1]: ", $ADB->{value}->[-1], " B->[-1]: ", $B->{value}->[-1],"\n";
+      }
+    }
   # swap 'em and try this, too
   # $X = ($B/$A)*$A + $B % $A;
   ($ADB,$AMB) = $B->copy()->bdiv($A);
-  #print "check: $ADB $AMB";
+  # print "check: $ADB $AMB";
   print "# seed $seed, ". join(' ',Math::BigInt::Calc->_base_len()),"\n".
         "# tried $ADB * $A + $two*$AMB - $AMB\n"
    unless ok ($ADB*$A+$two*$AMB-$AMB,$Bs);
-#  print " +$two * $AMB = ",$ADB * $A + $two * $AMB,"\n";
-#  print " -$AMB = ",$ADB * $A + $two * $AMB - $AMB,"\n";
+  print "# +$two * $AMB = ",$ADB * $A + $two * $AMB,"\n";
+  print "# -$AMB = ",$ADB * $A + $two * $AMB - $AMB,"\n";
   print "# seed $seed, \$ADB * \$A / \$A = ", $ADB * $A / $A, " != $ADB (\$A=$A)\n"
    unless ok ($ADB*$A/$A,$ADB);
   }