1#!perl 2 3use strict; 4use warnings; 5 6use Test::More tests => 72; 7 8# test whether Math::BigInt->config() and Math::BigFloat->config() work 9 10use Math::BigInt lib => 'Calc'; 11use Math::BigFloat; 12 13my $mbi = 'Math::BigInt'; 14my $mbf = 'Math::BigFloat'; 15 16my @defaults = 17 ([ 'lib', 'Math::BigInt::Calc' ], 18 [ 'lib_version', $Math::BigInt::Calc::VERSION, ], 19 [ 'upgrade', undef, ], 20 [ 'div_scale', 40, ], 21 [ 'precision', undef, ], 22 [ 'accuracy', undef, ], 23 [ 'round_mode', 'even', ], 24 [ 'trap_nan', 0, ], 25 [ 'trap_inf', 0, ]); 26 27############################################################################## 28# Math::BigInt 29 30{ 31 can_ok($mbi, 'config'); 32 33 my @table = @defaults; 34 unshift @table, ['class', $mbi ]; 35 36 # Test getting via the new-style $class->($key): 37 38 for (my $i = 0 ; $i <= $#table ; ++ $i) { 39 my $key = $table[$i][0]; 40 my $val = $table[$i][1]; 41 is($mbi->config($key), $val, qq|$mbi->config("$key")|); 42 } 43 44 # Test getting via the old-style $class->()->{$key}, which is still 45 # supported: 46 47 my $cfg = $mbi->config(); 48 is(ref($cfg), 'HASH', 'ref() of output from $mbi->config()'); 49 50 for (my $i = 0 ; $i <= $#table ; ++ $i) { 51 my $key = $table[$i][0]; 52 my $val = $table[$i][1]; 53 is($cfg->{$key}, $val, qq|$mbi->config()->{$key}|); 54 } 55 56 # can set via hash ref? 57 $cfg = $mbi->config({ trap_nan => 1 }); 58 is($cfg->{trap_nan}, 1, 'can set "trap_nan" via hash ref'); 59 60 # reset for later 61 $mbi->config(trap_nan => 0); 62} 63 64############################################################################## 65# Math::BigFloat 66 67{ 68 can_ok($mbf, 'config'); 69 70 my @table = @defaults; 71 unshift @table, ['class', $mbf ]; 72 73 # Test getting via the new-style $class->($key): 74 75 for (my $i = 0 ; $i <= $#table ; ++ $i) { 76 my $key = $table[$i][0]; 77 my $val = $table[$i][1]; 78 is($mbf->config($key), $val, qq|$mbf->config("$key")|); 79 } 80 81 # Test getting via the old-style $class->()->{$key}, which is still 82 # supported: 83 84 my $cfg = $mbf->config(); 85 is(ref($cfg), 'HASH', 'ref() of output from $mbf->config()'); 86 87 for (my $i = 0 ; $i <= $#table ; ++ $i) { 88 my $key = $table[$i][0]; 89 my $val = $table[$i][1]; 90 is($cfg->{$key}, $val, qq|$mbf->config()->{$key}|); 91 } 92 93 # can set via hash ref? 94 $cfg = $mbf->config({ trap_nan => 1 }); 95 is($cfg->{trap_nan}, 1, 'can set "trap_nan" via hash ref'); 96 97 # reset for later 98 $mbf->config(trap_nan => 0); 99} 100 101############################################################################## 102# test setting values 103 104my $test = { 105 trap_nan => 1, 106 trap_inf => 1, 107 accuracy => 2, 108 precision => 3, 109 round_mode => 'zero', 110 div_scale => '100', 111 upgrade => 'Math::BigInt::SomeClass', 112 downgrade => 'Math::BigInt::SomeClass', 113}; 114 115my $cfg; 116 117foreach my $key (keys %$test) { 118 119 # see if setting in MBI works 120 eval { $mbi->config($key => $test->{$key}); }; 121 $cfg = $mbi->config(); 122 is("$key = $cfg->{$key}", "$key = $test->{$key}", "$key = $test->{$key}"); 123 $cfg = $mbf->config(); 124 125 # see if setting it in MBI leaves MBF alone 126 ok(($cfg->{$key} || 0) ne $test->{$key}, 127 "$key ne \$cfg->{$key}"); 128 129 # see if setting in MBF works 130 eval { $mbf->config($key => $test->{$key}); }; 131 $cfg = $mbf->config(); 132 is("$key = $cfg->{$key}", "$key = $test->{$key}", "$key = $test->{$key}"); 133} 134 135############################################################################## 136# test setting illegal keys (should croak) 137 138eval { $mbi->config('some_garbage' => 1); }; 139like($@, 140 qr/ ^ Illegal \s+ key\(s\) \s+ 'some_garbage' \s+ passed \s+ to \s+ 141 Math::BigInt->config\(\) \s+ at 142 /x, 143 'Passing invalid key to Math::BigInt->config() causes an error.'); 144 145eval { $mbf->config('some_garbage' => 1); }; 146like($@, 147 qr/ ^ Illegal \s+ key\(s\) \s+ 'some_garbage' \s+ passed \s+ to \s+ 148 Math::BigFloat->config\(\) \s+ at 149 /x, 150 'Passing invalid key to Math::BigFloat->config() causes an error.'); 151