summaryrefslogtreecommitdiff
path: root/cpan/Math-BigInt/t/upgradef.t
blob: d76e97c74b4faa9ba7a66f48fecbc2fe92154e54 (plain)
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
# -*- mode: perl; -*-

use strict;
use warnings;

use Test::More tests => 6;

###############################################################################
package Math::BigFloat::Test;

use Math::BigFloat;
require Exporter;
our @ISA = qw/Math::BigFloat Exporter/;

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, $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