1# -*- mode: perl; -*-
2
3use strict;
4use warnings;
5
6use Test::More tests => 6;
7
8###############################################################################
9package Math::BigFloat::Test;
10
11use Math::BigFloat;
12require Exporter;
13our @ISA = qw/Math::BigFloat Exporter/;
14
15use overload;
16
17sub isa {
18    my ($self, $class) = @_;
19    return if $class =~ /^Math::Big(Int|Float$)/;   # we aren't one of these
20    UNIVERSAL::isa($self, $class);
21}
22
23sub bmul {
24    return __PACKAGE__->new(123);
25}
26
27sub badd {
28    return __PACKAGE__->new(321);
29}
30
31###############################################################################
32package main;
33
34# use Math::BigInt upgrade => 'Math::BigFloat';
35use Math::BigFloat upgrade => 'Math::BigFloat::Test';
36
37my ($x, $y, $z);
38
39our ($CLASS, $EXPECTED_CLASS, $LIB);
40$CLASS          = "Math::BigFloat";
41$EXPECTED_CLASS = "Math::BigFloat::Test";
42$LIB            = "Math::BigInt::Calc";         # backend
43
44is(Math::BigFloat->upgrade(), $EXPECTED_CLASS,
45   qq|Math::BigFloat->upgrade()|);
46is(Math::BigFloat->downgrade(), undef,
47   qq|Math::BigFloat->downgrade()|);
48
49$x = $CLASS->new(123);
50$y = $EXPECTED_CLASS->new(123);
51$z = $x->bmul($y);
52is(ref($z), $EXPECTED_CLASS,
53   qq|\$x = $CLASS->new(123); \$y = $EXPECTED_CLASS->new(123);|
54   . q| $z = $x->bmul($y); ref($z)|);
55is($z, 123,
56   qq|\$x = $CLASS->new(123); \$y = $EXPECTED_CLASS->new(123);|
57   . q| $z = $x->bmul($y); $z|);
58
59$x = $CLASS->new(123);
60$y = $EXPECTED_CLASS->new(123);
61$z = $x->badd($y);
62is(ref($z), $EXPECTED_CLASS,
63   qq|$x = $CLASS->new(123); $y = $EXPECTED_CLASS->new(123);|
64   . q| $z = $x->badd($y); ref($z)|);
65is($z, 321,
66   qq|$x = $CLASS->new(123); $y = $EXPECTED_CLASS->new(123);|
67   . q| $z = $x->badd($y); $z|);
68
69# not yet:
70#require './t/upgrade.inc';     # all tests here for sharing
71