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