diff options
Diffstat (limited to 't/110_bignum.t')
-rw-r--r-- | t/110_bignum.t | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/t/110_bignum.t b/t/110_bignum.t new file mode 100644 index 0000000..044e0e6 --- /dev/null +++ b/t/110_bignum.t @@ -0,0 +1,50 @@ + +use strict; +use Test::More; +BEGIN { plan tests => 9 }; + +BEGIN { $ENV{PERL_JSON_BACKEND} ||= "JSON::backportPP"; } + +use JSON -support_by_pp; + +eval q| require Math::BigInt |; + +SKIP: { + skip "Can't load Math::BigInt.", 9 if ($@); + + my $v = Math::BigInt->VERSION; + $v =~ s/_.+$// if $v; + +my $fix = !$v ? '+' + : $v < 1.6 ? '+' + : ''; + + +my $json = new JSON; + +$json->allow_nonref->allow_bignum(1); +$json->convert_blessed->allow_blessed; + +my $num = $json->decode(q|100000000000000000000000000000000000000|); + +ok($num->isa('Math::BigInt')); +is("$num", $fix . '100000000000000000000000000000000000000'); +is($json->encode($num), $fix . '100000000000000000000000000000000000000'); + +SKIP: { skip "requires $JSON::BackendModule 2.91_03 or newer", 2 if $JSON::BackendModulePP and eval $JSON::BackendModulePP->VERSION < 2.91_03; +$num = $json->decode(q|10|); + +ok(!(ref $num and $num->isa('Math::BigInt')), 'small integer is not a BigInt'); +ok(!(ref $num and $num->isa('Math::BigFloat')), 'small integer is not a BigFloat'); +} + +$num = $json->decode(q|2.0000000000000000001|); + +ok($num->isa('Math::BigFloat')); +is("$num", '2.0000000000000000001'); +is($json->encode($num), '2.0000000000000000001'); + +SKIP: { skip "requires $JSON::BackendModule 2.90 or newer", 1 if $JSON::BackendModulePP and eval $JSON::BackendModulePP->VERSION < 2.90; +is($json->encode([Math::BigInt->new("0")]), "[${fix}0]", "zero bigint is 0 (the number), not '0' (the string)" ); +} +} |