1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 6;
###############################################################################
package Math::BigFloat::Test;
use Math::BigFloat;
require Exporter;
our @ISA = qw/Exporter Math::BigFloat/;
use overload;
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, $CALC);
$CLASS = "Math::BigFloat";
$EXPECTED_CLASS = "Math::BigFloat::Test";
$CALC = "Math::BigInt::Calc"; # backend
is(Math::BigFloat->upgrade(), $EXPECTED_CLASS,
qq|Math::BigFloat->upgrade()|);
is(Math::BigFloat->downgrade() || '', '',
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
|