1# -*- mode: perl; -*- 2 3use strict; 4use warnings; 5 6use Test::More tests => 365; 7 8my $class; 9 10BEGIN { $class = 'Math::BigInt'; } 11BEGIN { use_ok($class); } 12 13# For simplicity, we use the same data in the test programs for to_base_num() and 14# from_base_num(). 15 16my @data = 17 ( 18 [ 0, 2, [ 0 ] ], 19 [ 1, 2, [ 1 ] ], 20 [ 2, 2, [ 1, 0 ] ], 21 [ 3, 2, [ 1, 1, ] ], 22 [ 4, 2, [ 1, 0, 0 ] ], 23 24 [ 0, 10, [ 0 ] ], 25 [ 1, 10, [ 1 ] ], 26 [ 12, 10, [ 1, 2 ] ], 27 [ 123, 10, [ 1, 2, 3 ] ], 28 [ 1230, 10, [ 1, 2, 3, 0 ] ], 29 30 [ "123456789", 100, [ 1, 23, 45, 67, 89 ] ], 31 32 [ "1234567890" x 3, 33 "987654321", 34 [ "128", "142745769", "763888804", "574845669" ]], 35 36 [ "1234567890" x 5, 37 "987654321" x 3, 38 [ "12499999874843750102814", "447551941015330718793208596" ]], 39 ); 40 41for (my $i = 0 ; $i <= $#data ; ++ $i) { 42 my @in = ($data[$i][2], $data[$i][1]); 43 my $out = $data[$i][0]; 44 45 # As class method. 46 47 { 48 for my $base_as_scalar (1, 0) { 49 for my $elements_as_scalar (1, 0) { 50 51 my $x; 52 my $test = "\$x = $class -> from_base_num(["; 53 if ($elements_as_scalar) { 54 $test .= join ", ", map qq|"$_"|, @{ $in[0] }; 55 } else { 56 $test .= join ", ", map qq|$class -> new("$_")|, @{ $in[0] }; 57 } 58 $test .= "], "; 59 if ($base_as_scalar) { 60 $test .= qq|"$in[1]"|; 61 } else { 62 $test .= qq|$class -> new("$in[1]")|; 63 } 64 $test .= ")"; 65 66 eval $test; 67 die "\nThe following test died when eval()'ed. This", 68 "indicates a broken test\n\n $test\n\nThe error", 69 " message was\n\n $@\n" if $@; 70 71 subtest $test, sub { 72 plan tests => 2, 73 74 is(ref($x), $class, "output arg is a $class"); 75 is($x, $out, 'output arg has the right value'); 76 }; 77 } 78 } 79 } 80 81 # As instance method. 82 83 { 84 for my $base_as_scalar (1, 0) { 85 for my $elements_as_scalar (1, 0) { 86 for my $str ("-1", "0", "1", "-inf", "+inf", "NaN") { 87 88 my $x; 89 my $test = qq|\$x = $class -> new("$str");|; 90 $test .= " \$x -> from_base_num(["; 91 if ($elements_as_scalar) { 92 $test .= join ", ", map qq|"$_"|, @{ $in[0] }; 93 } else { 94 $test .= join ", ", map qq|$class -> new("$_")|, @{ $in[0] }; 95 } 96 $test .= "], "; 97 if ($base_as_scalar) { 98 $test .= qq|"$in[1]"|; 99 } else { 100 $test .= qq|$class -> new("$in[1]")|; 101 } 102 $test .= ")"; 103 104 eval $test; 105 die "\nThe following test died when eval()'ed. This", 106 "indicates a broken test\n\n $test\n\nThe error", 107 " message was\n\n $@\n" if $@; 108 109 subtest $test, sub { 110 plan tests => 2, 111 112 is(ref($x), $class, "output arg is a $class"); 113 is($x, $out, 'output arg has the right value'); 114 }; 115 } 116 } 117 } 118 } 119} 120