1# -*- mode: perl; -*- 2 3use strict; 4use warnings; 5 6use Test::More; 7 8BEGIN { 9 eval "use Math::BigRat"; 10 plan skip_all => 'Math::BigRat required for these tests' if $@; 11} 12 13plan tests => 10; 14 15use bignum upgrade => undef; 16 17is(bignum -> downgrade(), "Math::BigInt", 18 "bignum's upgrade class is Math::BigInt"); 19is(bignum -> upgrade(), undef, 20 "bignum's downgrade class is undefined"); 21 22is(Math::BigInt -> upgrade(), undef, 23 "Math::BigInt's upgrade class is undefined"); 24is(Math::BigFloat -> downgrade(), "Math::BigInt", 25 "Math::BigFloat's downgrade class is Math::BigInt"); 26 27my $i1 = 7; 28my $i2 = 2; 29my $f1 = 3.75; 30my $f2 = 1.25; 31 32is(ref($i1), "Math::BigInt", "literal $i1 is a Math::BigInt"); 33is(ref($f1), "Math::BigFloat", "literal $f1 is a Math::BigFloat"); 34 35# Verify that the result is not upgraded to a Math::BigFloat. 36 37cmp_ok($i1/$i2, "==", "3", "$i1/$i2 is 3"); 38is(ref($i1/$i2), "Math::BigInt", 39 "$i1/$i2 is 3 as a Math::BigInt due to no upgrading"); 40 41# Verify that the result is downgraded to a Math::BigInt. 42 43cmp_ok($f1/$f2, "==", "3", "$f1/$f2 is 3"); 44is(ref($f1/$f2), "Math::BigInt", 45 "$f1/$f2 is 3 as a Math::BigInt due to downgrading"); 46