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