From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

# -*- mode: perl; -*-
use strict;
use Test::More tests => 6;
###############################################################################
require Exporter;
our @ISA = qw/Math::BigFloat Exporter/;
sub isa {
my ($self, $class) = @_;
return if $class =~ /^Math::Big(Int|Float$)/; # we aren't one of these
UNIVERSAL::isa($self, $class);
}
sub bmul {
return __PACKAGE__->new(123);
}
sub badd {
return __PACKAGE__->new(321);
}
###############################################################################
package main;
# use Math::BigInt upgrade => 'Math::BigFloat';
use Math::BigFloat upgrade => 'Math::BigFloat::Test';
my ($x, $y, $z);
our ($CLASS, $EXPECTED_CLASS, $LIB);
$CLASS = "Math::BigFloat";
$EXPECTED_CLASS = "Math::BigFloat::Test";
$LIB = "Math::BigInt::Calc"; # backend
is(Math::BigFloat->upgrade(), $EXPECTED_CLASS,
qq|Math::BigFloat->upgrade()|);
is(Math::BigFloat->downgrade(), undef,
qq|Math::BigFloat->downgrade()|);
$x = $CLASS->new(123);
$y = $EXPECTED_CLASS->new(123);
$z = $x->bmul($y);
is(ref($z), $EXPECTED_CLASS,
qq|\$x = $CLASS->new(123); \$y = $EXPECTED_CLASS->new(123);|
. q| $z = $x->bmul($y); ref($z)|);
is($z, 123,
qq|\$x = $CLASS->new(123); \$y = $EXPECTED_CLASS->new(123);|
. q| $z = $x->bmul($y); $z|);
$x = $CLASS->new(123);
$y = $EXPECTED_CLASS->new(123);
$z = $x->badd($y);
is(ref($z), $EXPECTED_CLASS,
qq|$x = $CLASS->new(123); $y = $EXPECTED_CLASS->new(123);|
. q| $z = $x->badd($y); ref($z)|);
is($z, 321,
qq|$x = $CLASS->new(123); $y = $EXPECTED_CLASS->new(123);|
. q| $z = $x->badd($y); $z|);
# not yet:
#require './t/upgrade.inc'; # all tests here for sharing