xref: /openbsd-src/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling-class-methods.t (revision 256a93a44f36679bee503f12e49566c2183f6181)
1*256a93a4Safresh1# -*- mode: perl; -*-
25759b3d2Safresh1
35759b3d2Safresh1# test calling conventions, and :constant overloading
45759b3d2Safresh1
55759b3d2Safresh1use strict;
65759b3d2Safresh1use warnings;
75759b3d2Safresh1
8de8cc8edSafresh1use Test::More tests => 164;
95759b3d2Safresh1
105759b3d2Safresh1##############################################################################
115759b3d2Safresh1
125759b3d2Safresh1package Math::BigInt::Test;
135759b3d2Safresh1
145759b3d2Safresh1use Math::BigInt;
155759b3d2Safresh1our @ISA = qw/Math::BigInt/;            # subclass of MBI
165759b3d2Safresh1use overload;
175759b3d2Safresh1
185759b3d2Safresh1##############################################################################
195759b3d2Safresh1
205759b3d2Safresh1package Math::BigFloat::Test;
215759b3d2Safresh1
225759b3d2Safresh1use Math::BigFloat;
235759b3d2Safresh1our @ISA = qw/Math::BigFloat/;          # subclass of MBI
245759b3d2Safresh1use overload;
255759b3d2Safresh1
265759b3d2Safresh1##############################################################################
275759b3d2Safresh1
285759b3d2Safresh1package main;
295759b3d2Safresh1
305759b3d2Safresh1use Math::BigInt try => 'Calc';
315759b3d2Safresh1use Math::BigFloat;
325759b3d2Safresh1
335759b3d2Safresh1my ($x, $y, $z, $u);
345759b3d2Safresh1
355759b3d2Safresh1###############################################################################
365759b3d2Safresh1# check whether op's accept normal strings, even when inherited by subclasses
375759b3d2Safresh1
385759b3d2Safresh1# do one positive and one negative test to avoid false positives by "accident"
395759b3d2Safresh1
405759b3d2Safresh1my ($method, $expected);
415759b3d2Safresh1while (<DATA>) {
425759b3d2Safresh1    s/#.*$//;                   # remove comments
435759b3d2Safresh1    s/\s+$//;                   # remove trailing whitespace
445759b3d2Safresh1    next unless length;         # skip empty lines
455759b3d2Safresh1
465759b3d2Safresh1    if (s/^&//) {
475759b3d2Safresh1        $method = $_;
485759b3d2Safresh1        next;
495759b3d2Safresh1    }
505759b3d2Safresh1
515759b3d2Safresh1    my @args = split /:/, $_, 99;
525759b3d2Safresh1    $expected = pop @args;
535759b3d2Safresh1    foreach my $class (qw/
545759b3d2Safresh1                             Math::BigInt       Math::BigFloat
555759b3d2Safresh1                             Math::BigInt::Test Math::BigFloat::Test
565759b3d2Safresh1                         /)
575759b3d2Safresh1    {
585759b3d2Safresh1        my $arg = $args[0] =~ /"/ || $args[0] eq "" ? $args[0]
595759b3d2Safresh1                                                    : qq|"$args[0]"|;
605759b3d2Safresh1        my $try = "$class -> $method($arg);";
615759b3d2Safresh1        my $got = eval $try;
625759b3d2Safresh1        is($got, $expected, $try);
635759b3d2Safresh1    }
645759b3d2Safresh1}
655759b3d2Safresh1
665759b3d2Safresh1__END__
675759b3d2Safresh1&is_zero
685759b3d2Safresh11:0
695759b3d2Safresh10:1
705759b3d2Safresh1&is_one
715759b3d2Safresh11:1
725759b3d2Safresh10:0
735759b3d2Safresh1&is_positive
745759b3d2Safresh11:1
755759b3d2Safresh1-1:0
765759b3d2Safresh1&is_negative
775759b3d2Safresh11:0
785759b3d2Safresh1-1:1
79de8cc8edSafresh1&is_non_positive
80de8cc8edSafresh11:0
81de8cc8edSafresh1-1:1
82de8cc8edSafresh1&is_non_negative
83de8cc8edSafresh11:1
84de8cc8edSafresh1-1:0
855759b3d2Safresh1&is_nan
865759b3d2Safresh1abc:1
875759b3d2Safresh11:0
885759b3d2Safresh1&is_inf
895759b3d2Safresh1inf:1
905759b3d2Safresh10:0
915759b3d2Safresh1&bstr
925759b3d2Safresh15:5
935759b3d2Safresh110:10
945759b3d2Safresh1-10:-10
955759b3d2Safresh1abc:NaN
965759b3d2Safresh1"+inf":inf
975759b3d2Safresh1"-inf":-inf
985759b3d2Safresh1&bsstr
995759b3d2Safresh11:1e+0
1005759b3d2Safresh10:0e+0
1015759b3d2Safresh12:2e+0
1025759b3d2Safresh1200:2e+2
1035759b3d2Safresh1-5:-5e+0
1045759b3d2Safresh1-100:-1e+2
1055759b3d2Safresh1abc:NaN
1065759b3d2Safresh1"+inf":inf
1075759b3d2Safresh1&babs
1085759b3d2Safresh1-1:1
1095759b3d2Safresh11:1
1105759b3d2Safresh1#&bnot
1115759b3d2Safresh1#-2:1
1125759b3d2Safresh1#1:-2
1135759b3d2Safresh1&bzero
1145759b3d2Safresh1:0
1155759b3d2Safresh1&bnan
1165759b3d2Safresh1:NaN
1175759b3d2Safresh1abc:NaN
1185759b3d2Safresh1&bone
1195759b3d2Safresh1:1
1205759b3d2Safresh1"+":1
1215759b3d2Safresh1"-":-1
1225759b3d2Safresh1&binf
1235759b3d2Safresh1:inf
1245759b3d2Safresh1"+":inf
1255759b3d2Safresh1"-":-inf
126