xref: /openbsd-src/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t (revision eac174f2741a08d8deb8aae59a7f778ef9b5d770)
1*eac174f2Safresh1# -*- mode: perl; -*-
2b8851fccSafresh1
3b8851fccSafresh1use strict;
4b8851fccSafresh1use warnings;
5b8851fccSafresh1
6*eac174f2Safresh1use Test::More tests => 3070            # tests in require'd file
79f11ffb7Safresh1                         + 19;          # tests in this file
8b8851fccSafresh1
99f11ffb7Safresh1use Math::BigInt only => 'Calc';
10b8851fccSafresh1use Math::BigFloat;
11b8851fccSafresh1
12b46d8ef2Safresh1our ($CLASS, $LIB);
139f11ffb7Safresh1$CLASS = "Math::BigFloat";
14b46d8ef2Safresh1$LIB   = Math::BigInt -> config('lib');         # backend library
15b8851fccSafresh1
16b46d8ef2Safresh1is($CLASS->config("class"), $CLASS, qq|$CLASS->config("class")|);
17b46d8ef2Safresh1is($CLASS->config("with"),  $LIB,   qq|$CLASS->config("with")|);
18b8851fccSafresh1
19b8851fccSafresh1# bug #17447: Can't call method Math::BigFloat->bsub, not a valid method
20b8851fccSafresh1my $c = Math::BigFloat->new('123.3');
21b8851fccSafresh1is($c->bsub(123), '0.3',
22b8851fccSafresh1   qq|\$c = Math::BigFloat -> new("123.3"); \$y = \$c -> bsub("123")|);
23b8851fccSafresh1
24b8851fccSafresh1# Bug until Math::BigInt v1.86, the scale wasn't treated as a scalar:
25b8851fccSafresh1$c = Math::BigFloat->new('0.008');
26b8851fccSafresh1my $d = Math::BigFloat->new(3);
27b8851fccSafresh1my $e = $c->bdiv(Math::BigFloat->new(3), $d);
28b8851fccSafresh1
29b8851fccSafresh1is($e, '0.00267', '0.008 / 3 = 0.0027');
30b8851fccSafresh1
319f11ffb7Safresh1my $x;
329f11ffb7Safresh1
339f11ffb7Safresh1#############################################################################
349f11ffb7Safresh1# bgcd() as function, class method and instance method.
359f11ffb7Safresh1
369f11ffb7Safresh1my $gcd0 = Math::BigFloat::bgcd(-12, 18, 27);
379f11ffb7Safresh1isa_ok($gcd0, "Math::BigFloat", "bgcd() as function");
389f11ffb7Safresh1is($gcd0, 3, "bgcd() as function");
399f11ffb7Safresh1
409f11ffb7Safresh1my $gcd1 = Math::BigFloat->bgcd(-12, 18, 27);
419f11ffb7Safresh1isa_ok($gcd1, "Math::BigFloat", "bgcd() as class method");
429f11ffb7Safresh1is($gcd1, 3, "bgcd() as class method");
439f11ffb7Safresh1
449f11ffb7Safresh1$x = Math::BigFloat -> new(-12);
459f11ffb7Safresh1my $gcd2 = $x -> bgcd(18, 27);
469f11ffb7Safresh1isa_ok($gcd2, "Math::BigFloat", "bgcd() as instance method");
479f11ffb7Safresh1is($gcd2, 3, "bgcd() as instance method");
489f11ffb7Safresh1is($x, -12, "bgcd() does not modify invocand");
499f11ffb7Safresh1
509f11ffb7Safresh1#############################################################################
519f11ffb7Safresh1# blcm() as function, class method and instance method.
529f11ffb7Safresh1
539f11ffb7Safresh1my $lcm0 = Math::BigFloat::blcm(-12, 18, 27);
549f11ffb7Safresh1isa_ok($lcm0, "Math::BigFloat", "blcm() as function");
559f11ffb7Safresh1is($lcm0, 108, "blcm() as function");
569f11ffb7Safresh1
579f11ffb7Safresh1my $lcm1 = Math::BigFloat->blcm(-12, 18, 27);
589f11ffb7Safresh1isa_ok($lcm1, "Math::BigFloat", "blcm() as class method");
599f11ffb7Safresh1is($lcm1, 108, "blcm() as class method");
609f11ffb7Safresh1
619f11ffb7Safresh1$x = Math::BigFloat -> new(-12);
629f11ffb7Safresh1my $lcm2 = $x -> blcm(18, 27);
639f11ffb7Safresh1isa_ok($lcm2, "Math::BigFloat", "blcm() as instance method");
649f11ffb7Safresh1is($lcm2, 108, "blcm() as instance method");
659f11ffb7Safresh1is($x, -12, "blcm() does not modify invocand");
669f11ffb7Safresh1
679f11ffb7Safresh1#############################################################################
689f11ffb7Safresh1
69b8851fccSafresh1SKIP: {
70b8851fccSafresh1    skip("skipping test which is not for this backend", 1)
71b46d8ef2Safresh1      unless $LIB eq 'Math::BigInt::Calc';
72b8851fccSafresh1    is(ref($e->{_e}->[0]), '', '$e->{_e}->[0] is a scalar');
73b8851fccSafresh1}
74b8851fccSafresh1
75b46d8ef2Safresh1require './t/bigfltpm.inc';     # all tests here for sharing
76