1*256a93a4Safresh1# -*- mode: perl; -*- 25759b3d2Safresh1 35759b3d2Safresh1# test calling conventions, and :constant overloading 45759b3d2Safresh1 55759b3d2Safresh1use strict; 65759b3d2Safresh1use warnings; 75759b3d2Safresh1 8de8cc8edSafresh1use Test::More tests => 156; 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 -> new($arg) -> $method();"; 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 1125759b3d2Safresh11:-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