The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

# -*- mode: perl; -*-
use strict;
use Test::More tests => 784;
while (<DATA>) {
s/#.*$//; # remove comments
s/\s+$//; # remove trailing whitespace
next unless length; # skip empty lines
my ($x_str, $int_str, $frc_str) = split /:/;
note(qq|\n\$x = Math::BigInt::Lite -> new("$x_str");|,
qq| (\$i, \$f) = \$x -> dparts();\n\n|);
{
my $x = Math::BigInt::Lite -> new($x_str);
my ($int_got, $frc_got) = $x -> dparts();
like(ref($int_got), qr/^Math::BigInt(::Lite)?$/,
"class of integer part (got a " . ref($int_got) . ")");
like(ref($frc_got), qr/^Math::BigInt(::Lite)?$/,
"class of fraction part (got a " . ref($frc_got) . ")");
is($int_got, $int_str, "value of integer part");
is($frc_got, $frc_str, "value of fraction part");
is($x, $x_str, "input is unmodified");
}
note(qq|\n\$x = Math::BigInt::Lite -> new("$x_str");|,
qq| \$i = \$x -> dparts();\n\n|);
{
my $x = Math::BigInt::Lite -> new($x_str);
my $int_got = $x -> dparts();
like(ref($int_got), qr/^Math::BigInt(::Lite)?$/,
"class of integer part (got a " . ref($int_got) . ")");
is($int_got, $int_str, "value of integer part");
is($x, $x_str, "input is unmodified");
}
}
__DATA__
NaN:NaN:0
inf:inf:0
-inf:-inf:0
0:0:0
# positive numbers
1:1:0
10:10:0
100:100:0
1000:1000:0
10000:10000:0
100000:100000:0
1000000:1000000:0
10000000:10000000:0
100000000:100000000:0
1000000000:1000000000:0
10000000000:10000000000:0
100000000000:100000000000:0
1000000000000:1000000000000:0
12:12:0
120:120:0
1200:1200:0
12000:12000:0
120000:120000:0
1200000:1200000:0
12000000:12000000:0
120000000:120000000:0
1200000000:1200000000:0
12000000000:12000000000:0
120000000000:120000000000:0
1200000000000:1200000000000:0
123:123:0
1230:1230:0
12300:12300:0
123000:123000:0
1230000:1230000:0
12300000:12300000:0
123000000:123000000:0
1230000000:1230000000:0
12300000000:12300000000:0
123000000000:123000000000:0
1230000000000:1230000000000:0
1234:1234:0
12340:12340:0
123400:123400:0
1234000:1234000:0
12340000:12340000:0
123400000:123400000:0
1234000000:1234000000:0
12340000000:12340000000:0
123400000000:123400000000:0
1234000000000:1234000000000:0
3141592:3141592:0
# negative numbers
-1:-1:0
-10:-10:0
-100:-100:0
-1000:-1000:0
-10000:-10000:0
-100000:-100000:0
-1000000:-1000000:0
-10000000:-10000000:0
-100000000:-100000000:0
-1000000000:-1000000000:0
-10000000000:-10000000000:0
-100000000000:-100000000000:0
-1000000000000:-1000000000000:0
-12:-12:0
-120:-120:0
-1200:-1200:0
-12000:-12000:0
-120000:-120000:0
-1200000:-1200000:0
-12000000:-12000000:0
-120000000:-120000000:0
-1200000000:-1200000000:0
-12000000000:-12000000000:0
-120000000000:-120000000000:0
-1200000000000:-1200000000000:0
-123:-123:0
-1230:-1230:0
-12300:-12300:0
-123000:-123000:0
-1230000:-1230000:0
-12300000:-12300000:0
-123000000:-123000000:0
-1230000000:-1230000000:0
-12300000000:-12300000000:0
-123000000000:-123000000000:0
-1230000000000:-1230000000000:0
-1234:-1234:0
-12340:-12340:0
-123400:-123400:0
-1234000:-1234000:0
-12340000:-12340000:0
-123400000:-123400000:0
-1234000000:-1234000000:0
-12340000000:-12340000000:0
-123400000000:-123400000000:0
-1234000000000:-1234000000000:0
-3141592:-3141592:0