xref: /openbsd-src/gnu/usr.bin/perl/cpan/Math-BigInt/t/rt-16221.t (revision 256a93a44f36679bee503f12e49566c2183f6181)
1*256a93a4Safresh1# -*- mode: perl; -*-
2b8851fccSafresh1#
3b8851fccSafresh1# Verify that
4b8851fccSafresh1#   - Math::BigInt::objectify() calls as_int() (or as_number(), as a fallback)
5b8851fccSafresh1#     if the target object class is Math::BigInt.
6b8851fccSafresh1#   - Math::BigInt::objectify() calls as_float() if the target object class is
7b8851fccSafresh1#     Math::BigFloat.
8b8851fccSafresh1#
9b8851fccSafresh1# See RT #16221 and RT #52124.
10b8851fccSafresh1
11b8851fccSafresh1use strict;
12b8851fccSafresh1use warnings;
13b8851fccSafresh1
14b8851fccSafresh1package main;
15b8851fccSafresh1
16b8851fccSafresh1use Test::More tests => 2;
17b8851fccSafresh1use Math::BigInt;
18b8851fccSafresh1use Math::BigFloat;
19b8851fccSafresh1
20b8851fccSafresh1############################################################################
21b8851fccSafresh1
22b8851fccSafresh1my $int = Math::BigInt->new(10);
23b8851fccSafresh1my $int_percent = My::Percent::Float->new(100);
24b8851fccSafresh1
25b8851fccSafresh1is($int * $int_percent, 10, '$int * $int_percent = 10');
26b8851fccSafresh1
27b8851fccSafresh1############################################################################
28b8851fccSafresh1
29b8851fccSafresh1my $float = Math::BigFloat->new(10);
30b8851fccSafresh1my $float_percent = My::Percent::Float->new(100);
31b8851fccSafresh1
32b8851fccSafresh1is($float * $float_percent, 10, '$float * $float_percent = 10');
33b8851fccSafresh1
34b8851fccSafresh1############################################################################
35b8851fccSafresh1
36b8851fccSafresh1package My::Percent::Int;
37b8851fccSafresh1
38b8851fccSafresh1sub new {
39b8851fccSafresh1    my $class = shift;
40b8851fccSafresh1    my $num = shift;
41b8851fccSafresh1    return bless \$num, $class;
42b8851fccSafresh1}
43b8851fccSafresh1
44b8851fccSafresh1sub as_number {
45b8851fccSafresh1    my $self = shift;
46b8851fccSafresh1    return Math::BigInt->new($$self / 100);
47b8851fccSafresh1}
48b8851fccSafresh1
49b8851fccSafresh1sub as_string {
50b8851fccSafresh1    my $self = shift;
51b8851fccSafresh1    return $$self;
52b8851fccSafresh1}
53b8851fccSafresh1
54b8851fccSafresh1############################################################################
55b8851fccSafresh1
56b8851fccSafresh1package My::Percent::Float;
57b8851fccSafresh1
58b8851fccSafresh1sub new {
59b8851fccSafresh1    my $class = shift;
60b8851fccSafresh1    my $num = shift;
61b8851fccSafresh1    return bless \$num, $class;
62b8851fccSafresh1}
63b8851fccSafresh1
64b8851fccSafresh1sub as_int {
65b8851fccSafresh1    my $self = shift;
66b8851fccSafresh1    return Math::BigInt->new($$self / 100);
67b8851fccSafresh1}
68b8851fccSafresh1
69b8851fccSafresh1sub as_float {
70b8851fccSafresh1    my $self = shift;
71b8851fccSafresh1    return Math::BigFloat->new($$self / 100);
72b8851fccSafresh1}
73b8851fccSafresh1
74b8851fccSafresh1sub as_string {
75b8851fccSafresh1    my $self = shift;
76b8851fccSafresh1    return $$self;
77b8851fccSafresh1}
78