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 => "Math::BigRat"; 16 17is(bignum -> downgrade(), "Math::BigInt", 18 "bignum's upgrade class is Math::BigInt"); 19is(bignum -> upgrade(), "Math::BigRat", 20 "bignum's downgrade class is Math::BigInt"); 21 22is(Math::BigInt -> upgrade(), "Math::BigRat", 23 "Math::BigInt's upgrade class is Math::BigRat"); 24is(Math::BigRat -> downgrade(), "Math::BigInt", 25 "Math::BigRat's downgrade class is Math::BigInt"); 26 27my $i1 = 7; 28my $i2 = 2; 29my $r1 = 3.75; 30my $r2 = 1.25; 31 32is(ref($i1), "Math::BigInt", "literal $i1 is a Math::BigInt"); 33is(ref($r1), "Math::BigRat", "literal $r1 is a Math::BigRat"); 34 35# Verify that the result is upgraded to a Math::BigRat. 36 37cmp_ok($i1/$i2, "==", "3.5", "$i1/$i2 is 3.5"); 38is(ref($i1/$i2), "Math::BigRat", "$i1/$i2 is 3.5 as a Math::BigRat"); 39 40# Verify that the result is downgraded to a Math::BigInt. 41 42cmp_ok($r1/$r2, "==", "3", "($r1)/($r2) is 3"); 43is(ref($r1/$r2), "Math::BigInt", "($r1)/($r2) is 3 as a Math::BigInt"); 44