1*eac174f2Safresh1# -*- mode: perl; -*-
2b8851fccSafresh1
3b8851fccSafresh1# Math::BigFloat->new had a bug where it would assume any object is a
4b8851fccSafresh1# Math::BigInt which broke overloaded non-Math::BigInt objects.
5b8851fccSafresh1
6b8851fccSafresh1use strict;
7b8851fccSafresh1use warnings;
8b8851fccSafresh1
9b8851fccSafresh1use Test::More tests => 4;
10b8851fccSafresh1
11b8851fccSafresh1##############################################################################
12b8851fccSafresh1
13b8851fccSafresh1package Overloaded::Num;
14b8851fccSafresh1
15b8851fccSafresh1use overload
16b8851fccSafresh1  '0+'     => sub { ${$_[0]} },
17b8851fccSafresh1  fallback => 1;
18b8851fccSafresh1
19b8851fccSafresh1sub new {
20b8851fccSafresh1    my ($class, $num) = @_;
21b8851fccSafresh1    return bless \$num, $class;
22b8851fccSafresh1}
23b8851fccSafresh1
24b8851fccSafresh1package main;
25b8851fccSafresh1
26b8851fccSafresh1use Math::BigFloat;
27b8851fccSafresh1
28b8851fccSafresh1my $overloaded_num = Overloaded::Num->new(2.23);
29b8851fccSafresh1is($overloaded_num, 2.23, 'Overloaded::Num->new(2.23)');
30b8851fccSafresh1
31b8851fccSafresh1my $bigfloat = Math::BigFloat->new($overloaded_num);
32b8851fccSafresh1is($bigfloat, 2.23, 'Math::BigFloat->new() accepts overloaded numbers');
33b8851fccSafresh1
34b8851fccSafresh1my $bigint = Math::BigInt->new(Overloaded::Num->new(3));
35b8851fccSafresh1is($bigint, 3, 'Math::BigInt->new() accepts overloaded numbers');
36b8851fccSafresh1
37b8851fccSafresh1is(Math::BigFloat->new($bigint), 3,
38b8851fccSafresh1   'Math::BigFloat->new() accepts a Math::BigInt');
39