1# -*- mode: perl; -*- 2 3use strict; 4use warnings; 5 6use Test::More tests => 14; 7 8use bignum; 9 10is(bignum -> downgrade(), "Math::BigInt", 11 "bignum's downgrade class is Math::BigInt"); 12is(bignum -> upgrade(), "Math::BigFloat", 13 "bignum's upgrade class is Math::BigFloat"); 14 15is(Math::BigFloat -> downgrade(), "Math::BigInt", 16 "Math::BigFloat's downgrade class is Math::BigInt"); 17is(Math::BigInt -> upgrade(), "Math::BigFloat", 18 "Math::BigInt's upgrade class is Math::BigFloat"); 19 20my $i1 = 7; 21my $i2 = 2; 22my $f1 = 3.75; 23my $f2 = 1.25; 24 25is(ref($i1), "Math::BigInt", "literal $i1 is a Math::BigInt"); 26is(ref($f1), "Math::BigFloat", "literal $f1 is a Math::BigFloat"); 27 28# Verify that the result is upgraded to a Math::BigFloat. 29 30cmp_ok($i1/$i2, "==", "3.5", "$i1/$i2 is 3.5"); 31is(ref($i1/$i2), "Math::BigFloat", "$i1/$i2 is 3.5 as a Math::BigFloat"); 32 33# Verify that the result is downgraded to a Math::BigInt. 34 35cmp_ok($f1/$f2, "==", "3", "$f1/$f2 is 3"); 36is(ref($f1/$f2), "Math::BigInt", "$f1/$f2 is 3 as a Math::BigInt"); 37 38# Change the upgrade class during runtime. 39 40SKIP: { 41 eval "use Math::BigRat"; 42 skip "Math::BigRat not installed", 4 if $@; 43 44 bignum -> upgrade("Math::BigRat"); 45 46 my $r1 = 3.75; 47 my $r2 = 1.25; 48 49 # Verify that the result is upgraded to a Math::BigRat. 50 51 cmp_ok($i1/$i2, "==", "3.5", "$i1/$i2 is 3.5"); 52 is(ref($i1/$i2), "Math::BigRat", "$i1/$i2 is 3.5 as a Math::BigRat"); 53 54 # Verify that the result is downgraded to a Math::BigInt. 55 56 cmp_ok($r1/$r2, "==", "3", "($r1)/($r2) is 3"); 57 is(ref($r1/$r2), "Math::BigInt", "($r1)/($r2) is 3 as a Math::BigInt"); 58}; 59