This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Math::BigInt from 1.999701 to 1.999704
[perl5.git] / cpan / Math-BigInt / t / objectify_mbf.t
1 #!perl
2 #
3 # Verify that objectify() is able to convert a "foreign" object into what we
4 # want, when what we want is Math::BigFloat or subclass thereof.
5
6 use strict;
7 use warnings;
8
9 package main;
10
11 use Test::More tests => 6;
12
13 use Math::BigFloat;
14
15 ###############################################################################
16
17 for my $class ('Math::BigFloat', 'Math::BigFloat::Subclass') {
18
19     # This object defines what we want.
20
21     my $float = $class -> new(10);
22
23     # Create various objects that should work with the object above after
24     # objectify() has done its thing.
25
26     my $float_percent1 = My::Percent::Float1 -> new(100);
27     is($float * $float_percent1, 10);
28
29     my $float_percent2 = My::Percent::Float2 -> new(100);
30     is($float * $float_percent2, 10);
31
32     my $float_percent3 = My::Percent::Float3 -> new(100);
33     is($float * $float_percent3, 10);
34 }
35
36 ###############################################################################
37 # Class supports as_float(), which returns a Math::BigFloat.
38
39 package My::Percent::Float1;
40
41 sub new {
42     my $class = shift;
43     my $num = shift;
44     return bless \$num, $class;
45 }
46
47 sub as_float {
48     my $self = shift;
49     return Math::BigFloat -> new($$self / 100);
50 }
51
52 ###############################################################################
53 # Class supports as_float(), which returns a scalar.
54
55 package My::Percent::Float2;
56
57 sub new {
58     my $class = shift;
59     my $num = shift;
60     return bless \$num, $class;
61 }
62
63 sub as_float {
64     my $self = shift;
65     return $$self / 100;
66 }
67
68 ###############################################################################
69 # Class does not support as_float().
70
71 package My::Percent::Float3;
72
73 use overload '""' => sub { $_[0] -> as_string(); };
74
75 sub new {
76     my $class = shift;
77     my $num = shift;
78     return bless \$num, $class;
79 }
80
81 sub as_string {
82     my $self = shift;
83     return $$self / 100;
84 }
85
86 ###############################################################################
87
88 package Math::BigFloat::Subclass;
89
90 use base 'Math::BigFloat';