GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#!/usr/bin/perl -w12# GMP perl module tests34# Copyright 2001, 2002, 2003 Free Software Foundation, Inc.5#6# This file is part of the GNU MP Library.7#8# The GNU MP Library is free software; you can redistribute it and/or modify9# it under the terms of the GNU Lesser General Public License as published10# by the Free Software Foundation; either version 2.1 of the License, or (at11# your option) any later version.12#13# The GNU MP Library is distributed in the hope that it will be useful, but14# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY15# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public16# License for more details.17#18# You should have received a copy of the GNU Lesser General Public License19# along with the GNU MP Library; see the file COPYING.LIB. If not, write to20# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,21# MA 02110-1301, USA.222324# These tests aim to exercise the many possible combinations of operands25# etc, and to run all functions at least once, which if nothing else will26# check everything intended is in the :all list.27#28# Use the following in .emacs to match test failure messages.29#30# ;; perl "Test" module error messages31# (eval-after-load "compile"32# '(add-to-list33# 'compilation-error-regexp-alist34# '("^.*Failed test [0-9]+ in \\([^ ]+\\) at line \\([0-9]+\\)" 1 2)))353637use strict;38use Test;3940BEGIN {41plan tests => 123,42onfail => sub { print "there were failures\n" },43}4445use GMP qw(:all);46use GMP::Mpz qw(:all);47use GMP::Mpq qw(:all);48use GMP::Mpf qw(:all);49use GMP::Rand qw(:all);5051use GMP::Mpz qw(:constants);52use GMP::Mpz qw(:noconstants);53use GMP::Mpq qw(:constants);54use GMP::Mpq qw(:noconstants);55use GMP::Mpf qw(:constants);56use GMP::Mpf qw(:noconstants);5758package Mytie;59use Exporter;60use vars qw($val $fetched $stored);61$val = 0;62$fetched = 0;63$stored = 0;64sub TIESCALAR {65my ($class, $newval) = @_;66my $var = 'mytie dummy refed var';67$val = $newval;68$fetched = 0;69$stored = 0;70return bless \$var, $class;71}72sub FETCH {73my ($self) = @_;74$fetched++;75return $val;76}77sub STORE {78my ($self, $newval) = @_;79$val = $newval;80$stored++;81}82package main;8384# check Mytie does what it should85{ tie my $t, 'Mytie', 123;86ok ($Mytie::val == 123);87$Mytie::val = 456;88ok ($t == 456);89$t = 789;90ok ($Mytie::val == 789);91}929394# Usage: str(x)95# Return x forced to a string, not a PVIV.96#97sub str {98my $s = "$_[0]" . "";99return $s;100}101102my $ivnv_2p128 = 65536.0 * 65536.0 * 65536.0 * 65536.0103* 65536.0 * 65536.0 * 65536.0 * 65536.0;104kill (0, $ivnv_2p128);105my $str_2p128 = '340282366920938463463374607431768211456';106107my $uv_max = ~ 0;108my $uv_max_str = ~ 0;109$uv_max_str = "$uv_max_str";110$uv_max_str = "" . "$uv_max_str";111112113#------------------------------------------------------------------------------114# GMP::version115116use GMP qw(version);117print '$GMP::VERSION ',$GMP::VERSION,' GMP::version() ',version(),"\n";118119120#------------------------------------------------------------------------------121# GMP::Mpz::new122123ok (mpz(0) == 0);124ok (mpz('0') == 0);125ok (mpz(substr('101',1,1)) == 0);126ok (mpz(0.0) == 0);127ok (mpz(mpz(0)) == 0);128ok (mpz(mpq(0)) == 0);129ok (mpz(mpf(0)) == 0);130131{ tie my $t, 'Mytie', 0;132ok (mpz($t) == 0);133ok ($Mytie::fetched > 0);134}135{ tie my $t, 'Mytie', '0';136ok (mpz($t) == 0);137ok ($Mytie::fetched > 0);138}139{ tie my $t, 'Mytie', substr('101',1,1); ok (mpz($t) == 0); }140{ tie my $t, 'Mytie', 0.0; ok (mpz($t) == 0); }141{ tie my $t, 'Mytie', mpz(0); ok (mpz($t) == 0); }142{ tie my $t, 'Mytie', mpq(0); ok (mpz($t) == 0); }143{ tie my $t, 'Mytie', mpf(0); ok (mpz($t) == 0); }144145ok (mpz(-123) == -123);146ok (mpz('-123') == -123);147ok (mpz(substr('1-1231',1,4)) == -123);148ok (mpz(-123.0) == -123);149ok (mpz(mpz(-123)) == -123);150ok (mpz(mpq(-123)) == -123);151ok (mpz(mpf(-123)) == -123);152153{ tie my $t, 'Mytie', -123; ok (mpz($t) == -123); }154{ tie my $t, 'Mytie', '-123'; ok (mpz($t) == -123); }155{ tie my $t, 'Mytie', substr('1-1231',1,4); ok (mpz($t) == -123); }156{ tie my $t, 'Mytie', -123.0; ok (mpz($t) == -123); }157{ tie my $t, 'Mytie', mpz(-123); ok (mpz($t) == -123); }158{ tie my $t, 'Mytie', mpq(-123); ok (mpz($t) == -123); }159{ tie my $t, 'Mytie', mpf(-123); ok (mpz($t) == -123); }160161ok (mpz($ivnv_2p128) == $str_2p128);162{ tie my $t, 'Mytie', $ivnv_2p128; ok (mpz($t) == $str_2p128); }163164ok (mpz($uv_max) > 0);165ok (mpz($uv_max) == mpz($uv_max_str));166{ tie my $t, 'Mytie', $uv_max; ok (mpz($t) > 0); }167{ tie my $t, 'Mytie', $uv_max; ok (mpz($t) == mpz($uv_max_str)); }168169{ my $s = '999999999999999999999999999999';170kill (0, $s);171ok (mpz($s) == '999999999999999999999999999999');172tie my $t, 'Mytie', $s;173ok (mpz($t) == '999999999999999999999999999999');174}175176#------------------------------------------------------------------------------177# GMP::Mpz::overload_abs178179ok (abs(mpz(0)) == 0);180ok (abs(mpz(123)) == 123);181ok (abs(mpz(-123)) == 123);182183{ my $x = mpz(-123); $x = abs($x); ok ($x == 123); }184{ my $x = mpz(0); $x = abs($x); ok ($x == 0); }185{ my $x = mpz(123); $x = abs($x); ok ($x == 123); }186187{ tie my $t, 'Mytie', mpz(0); ok (abs($t) == 0); }188{ tie my $t, 'Mytie', mpz(123); ok (abs($t) == 123); }189{ tie my $t, 'Mytie', mpz(-123); ok (abs($t) == 123); }190191#------------------------------------------------------------------------------192# GMP::Mpz::overload_add193194ok (mpz(0) + 1 == 1);195ok (mpz(-1) + 1 == 0);196ok (1 + mpz(0) == 1);197ok (1 + mpz(-1) == 0);198199#------------------------------------------------------------------------------200# GMP::Mpz::overload_addeq201202{ my $a = mpz(7); $a += 1; ok ($a == 8); }203{ my $a = mpz(7); my $b = $a; $a += 1; ok ($a == 8); ok ($b == 7); }204205#------------------------------------------------------------------------------206# GMP::Mpz::overload_and207208ok ((mpz(3) & 1) == 1);209ok ((mpz(3) & 4) == 0);210211{ my $a = mpz(3); $a &= 1; ok ($a == 1); }212{ my $a = mpz(3); $a &= 4; ok ($a == 0); }213214#------------------------------------------------------------------------------215# GMP::Mpz::overload_bool216217if (mpz(0)) { ok (0); } else { ok (1); }218if (mpz(123)) { ok (1); } else { ok (0); }219220#------------------------------------------------------------------------------221# GMP::Mpz::overload_com222223ok (~ mpz(0) == -1);224ok (~ mpz(1) == -2);225ok (~ mpz(-2) == 1);226ok (~ mpz(0xFF) == -0x100);227ok (~ mpz(-0x100) == 0xFF);228229#------------------------------------------------------------------------------230# GMP::Mpz::overload_dec231232{ my $a = mpz(0); ok ($a-- == 0); ok ($a == -1); }233{ my $a = mpz(0); ok (--$a == -1); }234235{ my $a = mpz(0); my $b = $a; $a--; ok ($a == -1); ok ($b == 0); }236237#------------------------------------------------------------------------------238# GMP::Mpz::overload_div239240ok (mpz(6) / 2 == 3);241ok (mpz(-6) / 2 == -3);242ok (mpz(6) / -2 == -3);243ok (mpz(-6) / -2 == 3);244245#------------------------------------------------------------------------------246# GMP::Mpz::overload_diveq247248{ my $a = mpz(21); $a /= 3; ok ($a == 7); }249{ my $a = mpz(21); my $b = $a; $a /= 3; ok ($a == 7); ok ($b == 21); }250251#------------------------------------------------------------------------------252# GMP::Mpz::overload_eq253254{ my $a = mpz(0);255my $b = $a;256$a = mpz(1);257ok ($a == 1);258ok ($b == 0); }259260#------------------------------------------------------------------------------261# GMP::Mpz::overload_inc262263{ my $a = mpz(0); ok ($a++ == 0); ok ($a == 1); }264{ my $a = mpz(0); ok (++$a == 1); }265266{ my $a = mpz(0); my $b = $a; $a++; ok ($a == 1); ok ($b == 0); }267268#------------------------------------------------------------------------------269# GMP::Mpz::overload_ior270271ok ((mpz(3) | 1) == 3);272ok ((mpz(3) | 4) == 7);273274{ my $a = mpz(3); $a |= 1; ok ($a == 3); }275{ my $a = mpz(3); $a |= 4; ok ($a == 7); }276277ok ((mpz("0xAA") | mpz("0x55")) == mpz("0xFF"));278279#------------------------------------------------------------------------------280# GMP::Mpz::overload_lshift281282{ my $a = mpz(7) << 1; ok ($a == 14); }283284#------------------------------------------------------------------------------285# GMP::Mpz::overload_lshifteq286287{ my $a = mpz(7); $a <<= 1; ok ($a == 14); }288{ my $a = mpz(7); my $b = $a; $a <<= 1; ok ($a == 14); ok ($b == 7); }289290#------------------------------------------------------------------------------291# GMP::Mpz::overload_mul292293ok (mpz(2) * 3 == 6);294295#------------------------------------------------------------------------------296# GMP::Mpz::overload_muleq297298{ my $a = mpz(7); $a *= 3; ok ($a == 21); }299{ my $a = mpz(7); my $b = $a; $a *= 3; ok ($a == 21); ok ($b == 7); }300301#------------------------------------------------------------------------------302# GMP::Mpz::overload_neg303304ok (- mpz(0) == 0);305ok (- mpz(123) == -123);306ok (- mpz(-123) == 123);307308#------------------------------------------------------------------------------309# GMP::Mpz::overload_not310311if (not mpz(0)) { ok (1); } else { ok (0); }312if (not mpz(123)) { ok (0); } else { ok (1); }313314ok ((! mpz(0)) == 1);315ok ((! mpz(123)) == 0);316317#------------------------------------------------------------------------------318# GMP::Mpz::overload_pow319320ok (mpz(0) ** 1 == 0);321ok (mpz(1) ** 1 == 1);322ok (mpz(2) ** 0 == 1);323ok (mpz(2) ** 1 == 2);324ok (mpz(2) ** 2 == 4);325ok (mpz(2) ** 3 == 8);326ok (mpz(2) ** 4 == 16);327328ok (mpz(0) ** mpz(1) == 0);329ok (mpz(1) ** mpz(1) == 1);330ok (mpz(2) ** mpz(0) == 1);331ok (mpz(2) ** mpz(1) == 2);332ok (mpz(2) ** mpz(2) == 4);333ok (mpz(2) ** mpz(3) == 8);334ok (mpz(2) ** mpz(4) == 16);335336#------------------------------------------------------------------------------337# GMP::Mpz::overload_poweq338339{ my $a = mpz(3); $a **= 4; ok ($a == 81); }340{ my $a = mpz(3); my $b = $a; $a **= 4; ok ($a == 81); ok ($b == 3); }341342#------------------------------------------------------------------------------343# GMP::Mpz::overload_rem344345ok (mpz(-8) % 3 == -2);346ok (mpz(-7) % 3 == -1);347ok (mpz(-6) % 3 == 0);348ok (mpz(6) % 3 == 0);349ok (mpz(7) % 3 == 1);350ok (mpz(8) % 3 == 2);351352{ my $a = mpz(24); $a %= 7; ok ($a == 3); }353354#------------------------------------------------------------------------------355# GMP::Mpz::overload_rshift356357{ my $a = mpz(32) >> 1; ok ($a == 16); }358359#------------------------------------------------------------------------------360# GMP::Mpz::overload_rshifteq361362{ my $a = mpz(32); $a >>= 1; ok ($a == 16); }363{ my $a = mpz(32); my $b = $a; $a >>= 1; ok ($a == 16); ok ($b == 32); }364365#------------------------------------------------------------------------------366# GMP::Mpz::overload_spaceship367368ok (mpz(0) < 1);369ok (mpz(0) > -1);370371ok (mpz(0) != 1);372ok (mpz(0) != -1);373ok (mpz(1) != 0);374ok (mpz(1) != -1);375ok (mpz(-1) != 0);376ok (mpz(-1) != 1);377378ok (mpz(0) < 1.0);379ok (mpz(0) < '1');380ok (mpz(0) < substr('-1',1,1));381ok (mpz(0) < mpz(1));382ok (mpz(0) < mpq(1));383ok (mpz(0) < mpf(1));384ok (mpz(0) < $uv_max);385386#------------------------------------------------------------------------------387# GMP::Mpz::overload_sqrt388389ok (sqrt(mpz(0)) == 0);390ok (sqrt(mpz(1)) == 1);391ok (sqrt(mpz(4)) == 2);392ok (sqrt(mpz(81)) == 9);393394#------------------------------------------------------------------------------395# GMP::Mpz::overload_string396397{ my $x = mpz(0); ok("$x" eq "0"); }398{ my $x = mpz(123); ok("$x" eq "123"); }399{ my $x = mpz(-123); ok("$x" eq "-123"); }400401#------------------------------------------------------------------------------402# GMP::Mpz::overload_sub403404ok (mpz(0) - 1 == -1);405ok (mpz(1) - 1 == 0);406ok (1 - mpz(0) == 1);407ok (1 - mpz(1) == 0);408409#------------------------------------------------------------------------------410# GMP::Mpz::overload_subeq411412{ my $a = mpz(7); $a -= 1; ok ($a == 6); }413{ my $a = mpz(7); my $b = $a; $a -= 1; ok ($a == 6); ok ($b == 7); }414415#------------------------------------------------------------------------------416# GMP::Mpz::overload_xor417418ok ((mpz(3) ^ 1) == 2);419ok ((mpz(3) ^ 4) == 7);420421{ my $a = mpz(3); $a ^= 1; ok ($a == 2); }422{ my $a = mpz(3); $a ^= 4; ok ($a == 7); }423424425#------------------------------------------------------------------------------426# GMP::Mpz::bin427428ok (bin(2,0) == 1);429ok (bin(2,1) == 2);430ok (bin(2,2) == 1);431432ok (bin(3,0) == 1);433ok (bin(3,1) == 3);434ok (bin(3,2) == 3);435ok (bin(3,3) == 1);436437438#------------------------------------------------------------------------------439# GMP::Mpz::cdiv440441{ my ($q, $r);442($q, $r) = cdiv (16, 3);443ok ($q == 6);444ok ($r == -2);445($q, $r) = cdiv (16, -3);446ok ($q == -5);447ok ($r == 1);448($q, $r) = cdiv (-16, 3);449ok ($q == -5);450ok ($r == -1);451($q, $r) = cdiv (-16, -3);452ok ($q == 6);453ok ($r == 2);454}455456457#------------------------------------------------------------------------------458# GMP::Mpz::cdiv_2exp459460{ my ($q, $r);461($q, $r) = cdiv_2exp (23, 2);462ok ($q == 6);463ok ($r == -1);464($q, $r) = cdiv_2exp (-23, 2);465ok ($q == -5);466ok ($r == -3);467}468469470#------------------------------------------------------------------------------471# GMP::Mpz::clrbit472473{ my $a = mpz(3); clrbit ($a, 1); ok ($a == 1);474ok (UNIVERSAL::isa($a,"GMP::Mpz")); }475{ my $a = mpz(3); clrbit ($a, 2); ok ($a == 3);476ok (UNIVERSAL::isa($a,"GMP::Mpz")); }477478{ my $a = 3; clrbit ($a, 1); ok ($a == 1);479ok (UNIVERSAL::isa($a,"GMP::Mpz")); }480{ my $a = 3; clrbit ($a, 2); ok ($a == 3);481ok (UNIVERSAL::isa($a,"GMP::Mpz")); }482483# mutate only given variable484{ my $a = mpz(3);485my $b = $a;486clrbit ($a, 0);487ok ($a == 2);488ok ($b == 3);489}490{ my $a = 3;491my $b = $a;492clrbit ($a, 0);493ok ($a == 2);494ok ($b == 3);495}496497{ tie my $a, 'Mytie', mpz(3);498clrbit ($a, 1);499ok ($Mytie::fetched > 0); # used fetch500ok ($Mytie::stored > 0); # used store501ok ($a == 1); # expected result502ok (UNIVERSAL::isa($a,"GMP::Mpz"));503ok (tied($a)); # still tied504}505{ tie my $a, 'Mytie', 3;506clrbit ($a, 1);507ok ($Mytie::fetched > 0); # used fetch508ok ($Mytie::stored > 0); # used store509ok ($a == 1); # expected result510ok (UNIVERSAL::isa($a,"GMP::Mpz"));511ok (tied($a)); # still tied512}513514{ my $b = mpz(3);515tie my $a, 'Mytie', $b;516clrbit ($a, 0);517ok ($a == 2);518ok ($b == 3);519ok (tied($a));520}521{ my $b = 3;522tie my $a, 'Mytie', $b;523clrbit ($a, 0);524ok ($a == 2);525ok ($b == 3);526ok (tied($a));527}528529#------------------------------------------------------------------------------530# GMP::Mpz::combit531532{ my $a = mpz(3); combit ($a, 1); ok ($a == 1);533ok (UNIVERSAL::isa($a,"GMP::Mpz")); }534{ my $a = mpz(3); combit ($a, 2); ok ($a == 7);535ok (UNIVERSAL::isa($a,"GMP::Mpz")); }536537{ my $a = 3; combit ($a, 1); ok ($a == 1);538ok (UNIVERSAL::isa($a,"GMP::Mpz")); }539{ my $a = 3; combit ($a, 2); ok ($a == 7);540ok (UNIVERSAL::isa($a,"GMP::Mpz")); }541542# mutate only given variable543{ my $a = mpz(3);544my $b = $a;545combit ($a, 0);546ok ($a == 2);547ok ($b == 3);548}549{ my $a = 3;550my $b = $a;551combit ($a, 0);552ok ($a == 2);553ok ($b == 3);554}555556{ tie my $a, 'Mytie', mpz(3);557combit ($a, 2);558ok ($Mytie::fetched > 0); # used fetch559ok ($Mytie::stored > 0); # used store560ok ($a == 7); # expected result561ok (UNIVERSAL::isa($a,"GMP::Mpz"));562ok (tied($a)); # still tied563}564{ tie my $a, 'Mytie', 3;565combit ($a, 2);566ok ($Mytie::fetched > 0); # used fetch567ok ($Mytie::stored > 0); # used store568ok ($a == 7); # expected result569ok (UNIVERSAL::isa($a,"GMP::Mpz"));570ok (tied($a)); # still tied571}572573{ my $b = mpz(3);574tie my $a, 'Mytie', $b;575combit ($a, 0);576ok ($a == 2);577ok ($b == 3);578ok (tied($a));579}580{ my $b = 3;581tie my $a, 'Mytie', $b;582combit ($a, 0);583ok ($a == 2);584ok ($b == 3);585ok (tied($a));586}587588#------------------------------------------------------------------------------589# GMP::Mpz::congruent_p590591ok ( congruent_p (21, 0, 7));592ok (! congruent_p (21, 1, 7));593ok ( congruent_p (21, 5, 8));594ok (! congruent_p (21, 6, 8));595596597#------------------------------------------------------------------------------598# GMP::Mpz::congruent_2exp_p599600ok ( congruent_2exp_p (20, 0, 2));601ok (! congruent_2exp_p (21, 0, 2));602ok (! congruent_2exp_p (20, 1, 2));603604#------------------------------------------------------------------------------605# GMP::Mpz::divexact606607ok (divexact(27,3) == 9);608ok (divexact(27,-3) == -9);609ok (divexact(-27,3) == -9);610ok (divexact(-27,-3) == 9);611612#------------------------------------------------------------------------------613# GMP::Mpz::divisible_p614615ok ( divisible_p (21, 7));616ok (! divisible_p (21, 8));617618#------------------------------------------------------------------------------619# GMP::Mpz::divisible_2exp_p620621ok ( divisible_2exp_p (20, 2));622ok (! divisible_2exp_p (21, 2));623624#------------------------------------------------------------------------------625# GMP::Mpz::even_p626627ok (! even_p(mpz(-3)));628ok ( even_p(mpz(-2)));629ok (! even_p(mpz(-1)));630ok ( even_p(mpz(0)));631ok (! even_p(mpz(1)));632ok ( even_p(mpz(2)));633ok (! even_p(mpz(3)));634635#------------------------------------------------------------------------------636# GMP::Mpz::export637638{ my $s = mpz_export (1, 2, 1, 0, "0x61626364");639ok ($s eq 'abcd'); }640{ my $s = mpz_export (-1, 2, 1, 0, "0x61626364");641ok ($s eq 'cdab'); }642{ my $s = mpz_export (1, 2, -1, 0, "0x61626364");643ok ($s eq 'badc'); }644{ my $s = mpz_export (-1, 2, -1, 0, "0x61626364");645ok ($s eq 'dcba'); }646647#------------------------------------------------------------------------------648# GMP::Mpz::fac649650ok (fac(0) == 1);651ok (fac(1) == 1);652ok (fac(2) == 2);653ok (fac(3) == 6);654ok (fac(4) == 24);655ok (fac(5) == 120);656657#------------------------------------------------------------------------------658# GMP::Mpz::fdiv659660{ my ($q, $r);661($q, $r) = fdiv (16, 3);662ok ($q == 5);663ok ($r == 1);664($q, $r) = fdiv (16, -3);665ok ($q == -6);666ok ($r == -2);667($q, $r) = fdiv (-16, 3);668ok ($q == -6);669ok ($r == 2);670($q, $r) = fdiv (-16, -3);671ok ($q == 5);672ok ($r == -1);673}674675#------------------------------------------------------------------------------676# GMP::Mpz::fdiv_2exp677678{ my ($q, $r);679($q, $r) = fdiv_2exp (23, 2);680ok ($q == 5);681ok ($r == 3);682($q, $r) = fdiv_2exp (-23, 2);683ok ($q == -6);684ok ($r == 1);685}686687#------------------------------------------------------------------------------688# GMP::Mpz::fib689690ok (fib(0) == 0);691ok (fib(1) == 1);692ok (fib(2) == 1);693ok (fib(3) == 2);694ok (fib(4) == 3);695ok (fib(5) == 5);696ok (fib(6) == 8);697698#------------------------------------------------------------------------------699# GMP::Mpz::fib2700701{ my ($a, $b) = fib2(0); ok($a==0); ok($b==1); }702{ my ($a, $b) = fib2(1); ok($a==1); ok($b==0); }703{ my ($a, $b) = fib2(2); ok($a==1); ok($b==1); }704{ my ($a, $b) = fib2(3); ok($a==2); ok($b==1); }705{ my ($a, $b) = fib2(4); ok($a==3); ok($b==2); }706{ my ($a, $b) = fib2(5); ok($a==5); ok($b==3); }707{ my ($a, $b) = fib2(6); ok($a==8); ok($b==5); }708709#------------------------------------------------------------------------------710# GMP::Mpz::gcd711712ok (gcd (21) == 21);713ok (gcd (21,15) == 3);714ok (gcd (21,15,30,57) == 3);715ok (gcd (21,-15) == 3);716ok (gcd (-21,15) == 3);717ok (gcd (-21,-15) == 3);718719#------------------------------------------------------------------------------720# GMP::Mpz::gcdext721722{723my ($g, $x, $y) = gcdext (3,5);724ok ($g == 1);725ok ($x == 2);726ok ($y == -1);727}728729#------------------------------------------------------------------------------730# GMP::Mpz::hamdist731732ok (hamdist(5,7) == 1);733734#------------------------------------------------------------------------------735# GMP::Mpz::import736737{ my $z = mpz_import (1, 2, 1, 0, 'abcd');738ok ($z == 0x61626364); }739{ my $z = mpz_import (-1, 2, 1, 0, 'abcd');740ok ($z == 0x63646162); }741{ my $z = mpz_import (1, 2, -1, 0, 'abcd');742ok ($z == 0x62616463); }743{ my $z = mpz_import (-1, 2, -1, 0, 'abcd');744ok ($z == 0x64636261); }745746#------------------------------------------------------------------------------747# GMP::Mpz::invert748749ok (invert(1,123) == 1);750ok (invert(6,7) == 6);751ok (! defined invert(2,8));752753#------------------------------------------------------------------------------754# GMP::Mpz::jacobi, GMP::Mpz::kronecker755756foreach my $i ([ 1, 19, 1 ],757[ 4, 19, 1 ],758[ 5, 19, 1 ],759[ 6, 19, 1 ],760[ 7, 19, 1 ],761[ 9, 19, 1 ],762[ 11, 19, 1 ],763[ 16, 19, 1 ],764[ 17, 19, 1 ],765[ 2, 19, -1 ],766[ 3, 19, -1 ],767[ 8, 19, -1 ],768[ 10, 19, -1 ],769[ 12, 19, -1 ],770[ 13, 19, -1 ],771[ 14, 19, -1 ],772[ 15, 19, -1 ],773[ 18, 19, -1 ]) {774foreach my $fun (\&jacobi, \&kronecker) {775ok (&$fun ($$i[0], $$i[1]) == $$i[2]);776777ok (&$fun ($$i[0], str($$i[1])) == $$i[2]);778ok (&$fun (str($$i[0]), $$i[1]) == $$i[2]);779ok (&$fun (str($$i[0]), str($$i[1])) == $$i[2]);780781ok (&$fun ($$i[0], mpz($$i[1])) == $$i[2]);782ok (&$fun (mpz($$i[0]), $$i[1]) == $$i[2]);783ok (&$fun (mpz($$i[0]), mpz($$i[1])) == $$i[2]);784}785}786787#------------------------------------------------------------------------------788# GMP::Mpz::lcm789790ok (lcm (2) == 2);791ok (lcm (0) == 0);792ok (lcm (0,0) == 0);793ok (lcm (0,0,0) == 0);794ok (lcm (0,0,0,0) == 0);795ok (lcm (2,0) == 0);796ok (lcm (-2,0) == 0);797ok (lcm (2,3) == 6);798ok (lcm (2,3,4) == 12);799ok (lcm (2,-3) == 6);800ok (lcm (-2,3) == 6);801ok (lcm (-2,-3) == 6);802ok (lcm (mpz(2)**512,1) == mpz(2)**512);803ok (lcm (mpz(2)**512,-1) == mpz(2)**512);804ok (lcm (-mpz(2)**512,1) == mpz(2)**512);805ok (lcm (-mpz(2)**512,-1) == mpz(2)**512);806ok (lcm (mpz(2)**512,mpz(2)**512) == mpz(2)**512);807ok (lcm (mpz(2)**512,-mpz(2)**512) == mpz(2)**512);808ok (lcm (-mpz(2)**512,mpz(2)**512) == mpz(2)**512);809ok (lcm (-mpz(2)**512,-mpz(2)**512) == mpz(2)**512);810811#------------------------------------------------------------------------------812# GMP::Mpz::lucnum813814ok (lucnum(0) == 2);815ok (lucnum(1) == 1);816ok (lucnum(2) == 3);817ok (lucnum(3) == 4);818ok (lucnum(4) == 7);819ok (lucnum(5) == 11);820ok (lucnum(6) == 18);821822#------------------------------------------------------------------------------823# GMP::Mpz::lucnum2824825{ my ($a, $b) = lucnum2(0); ok($a==2); ok($b==-1); }826{ my ($a, $b) = lucnum2(1); ok($a==1); ok($b==2); }827{ my ($a, $b) = lucnum2(2); ok($a==3); ok($b==1); }828{ my ($a, $b) = lucnum2(3); ok($a==4); ok($b==3); }829{ my ($a, $b) = lucnum2(4); ok($a==7); ok($b==4); }830{ my ($a, $b) = lucnum2(5); ok($a==11); ok($b==7); }831{ my ($a, $b) = lucnum2(6); ok($a==18); ok($b==11); }832833#------------------------------------------------------------------------------834# GMP::Mpz::nextprime835836ok (nextprime(2) == 3);837ok (nextprime(3) == 5);838ok (nextprime(5) == 7);839ok (nextprime(7) == 11);840ok (nextprime(11) == 13);841842#------------------------------------------------------------------------------843# GMP::Mpz::perfect_power_p844845# ok ( perfect_power_p(mpz(-27)));846# ok (! perfect_power_p(mpz(-9)));847# ok (! perfect_power_p(mpz(-1)));848ok ( perfect_power_p(mpz(0)));849ok ( perfect_power_p(mpz(1)));850ok (! perfect_power_p(mpz(2)));851ok (! perfect_power_p(mpz(3)));852ok ( perfect_power_p(mpz(4)));853ok ( perfect_power_p(mpz(9)));854ok ( perfect_power_p(mpz(27)));855ok ( perfect_power_p(mpz(81)));856857#------------------------------------------------------------------------------858# GMP::Mpz::perfect_square_p859860ok (! perfect_square_p(mpz(-9)));861ok (! perfect_square_p(mpz(-1)));862ok ( perfect_square_p(mpz(0)));863ok ( perfect_square_p(mpz(1)));864ok (! perfect_square_p(mpz(2)));865ok (! perfect_square_p(mpz(3)));866ok ( perfect_square_p(mpz(4)));867ok ( perfect_square_p(mpz(9)));868ok (! perfect_square_p(mpz(27)));869ok ( perfect_square_p(mpz(81)));870871#------------------------------------------------------------------------------872# GMP::Mpz::popcount873874ok (popcount(7) == 3);875876#------------------------------------------------------------------------------877# GMP::Mpz::powm878879ok (powm (3,2,8) == 1);880881#------------------------------------------------------------------------------882# GMP::Mpz::probab_prime_p883884ok ( probab_prime_p(89,1));885ok (! probab_prime_p(81,1));886887#------------------------------------------------------------------------------888# GMP::Mpz::realloc889890{ my $z = mpz(123);891realloc ($z, 512); }892893#------------------------------------------------------------------------------894# GMP::Mpz::remove895896{897my ($rem, $mult);898($rem, $mult) = remove(12,3);899ok ($rem == 4);900ok ($mult == 1);901($rem, $mult) = remove(12,2);902ok ($rem == 3);903ok ($mult == 2);904}905906#------------------------------------------------------------------------------907# GMP::Mpz::root908909ok (root(0,2) == 0);910ok (root(8,3) == 2);911ok (root(-8,3) == -2);912ok (root(81,4) == 3);913ok (root(243,5) == 3);914915#------------------------------------------------------------------------------916# GMP::Mpz::roote917918{ my ($r,$e);919($r, $e) = roote(0,2);920ok ($r == 0);921ok ($e);922($r, $e) = roote(81,4);923ok ($r == 3);924ok ($e);925($r, $e) = roote(85,4);926ok ($r == 3);927ok (! $e);928}929930#------------------------------------------------------------------------------931# GMP::Mpz::rootrem932933{ my ($root, $rem) = rootrem (mpz(0), 1);934ok ($root == 0); ok ($rem == 0); }935{ my ($root, $rem) = rootrem (mpz(0), 2);936ok ($root == 0); ok ($rem == 0); }937{ my ($root, $rem) = rootrem (mpz(64), 2);938ok ($root == 8); ok ($rem == 0); }939{ my ($root, $rem) = rootrem (mpz(64), 3);940ok ($root == 4); ok ($rem == 0); }941{ my ($root, $rem) = rootrem (mpz(65), 3);942ok ($root == 4); ok ($rem == 1); }943944#------------------------------------------------------------------------------945# GMP::Mpz::scan0946947ok (scan0 (0, 0) == 0);948ok (scan0 (1, 0) == 1);949ok (scan0 (3, 0) == 2);950ok (scan0 (-1, 0) == ~0);951ok (scan0 (-2, 1) == ~0);952953#------------------------------------------------------------------------------954# GMP::Mpz::scan1955956ok (scan1 (1, 0) == 0);957ok (scan1 (2, 0) == 1);958ok (scan1 (4, 0) == 2);959ok (scan1 (0, 0) == ~0);960ok (scan1 (3, 2) == ~0);961962#------------------------------------------------------------------------------963# GMP::Mpz::setbit964965{ my $a = mpz(3); setbit ($a, 1); ok ($a == 3); }966{ my $a = mpz(3); setbit ($a, 2); ok ($a == 7); }967968{ my $a = 3; setbit ($a, 1); ok ($a == 3); }969{ my $a = 3; setbit ($a, 2); ok ($a == 7); }970971# mutate only given variable972{ my $a = mpz(0);973my $b = $a;974setbit ($a, 0);975ok ($a == 1);976ok ($b == 0);977}978{ my $a = 0;979my $b = $a;980setbit ($a, 0);981ok ($a == 1);982ok ($b == 0);983}984985{ tie my $a, 'Mytie', mpz(3);986setbit ($a, 2);987ok ($Mytie::fetched > 0); # used fetch988ok ($Mytie::stored > 0); # used store989ok ($a == 7); # expected result990ok (UNIVERSAL::isa($a,"GMP::Mpz"));991ok (tied($a)); # still tied992}993{ tie my $a, 'Mytie', 3;994setbit ($a, 2);995ok ($Mytie::fetched > 0); # used fetch996ok ($Mytie::stored > 0); # used store997ok ($a == 7); # expected result998ok (UNIVERSAL::isa($a,"GMP::Mpz"));999ok (tied($a)); # still tied1000}10011002{ my $b = mpz(2);1003tie my $a, 'Mytie', $b;1004setbit ($a, 0);1005ok ($a == 3);1006ok ($b == 2);1007ok (tied($a));1008}1009{ my $b = 2;1010tie my $a, 'Mytie', $b;1011setbit ($a, 0);1012ok ($a == 3);1013ok ($b == 2);1014ok (tied($a));1015}10161017#------------------------------------------------------------------------------1018# GMP::Mpz::sizeinbase10191020ok (sizeinbase(1,10) == 1);1021ok (sizeinbase(100,10) == 3);1022ok (sizeinbase(9999,10) == 5);10231024#------------------------------------------------------------------------------1025# GMP::Mpz::sqrtrem10261027{1028my ($root, $rem) = sqrtrem(mpz(0));1029ok ($root == 0);1030ok ($rem == 0);1031}1032{1033my ($root, $rem) = sqrtrem(mpz(1));1034ok ($root == 1);1035ok ($rem == 0);1036}1037{1038my ($root, $rem) = sqrtrem(mpz(2));1039ok ($root == 1);1040ok ($rem == 1);1041}1042{1043my ($root, $rem) = sqrtrem(mpz(9));1044ok ($root == 3);1045ok ($rem == 0);1046}1047{1048my ($root, $rem) = sqrtrem(mpz(35));1049ok ($root == 5);1050ok ($rem == 10);1051}1052{1053my ($root, $rem) = sqrtrem(mpz(0));1054ok ($root == 0);1055ok ($rem == 0);1056}10571058#------------------------------------------------------------------------------1059# GMP::Mpz::tdiv10601061{ my ($q, $r);1062($q, $r) = tdiv (16, 3);1063ok ($q == 5);1064ok ($r == 1);1065($q, $r) = tdiv (16, -3);1066ok ($q == -5);1067ok ($r == 1);1068($q, $r) = tdiv (-16, 3);1069ok ($q == -5);1070ok ($r == -1);1071($q, $r) = tdiv (-16, -3);1072ok ($q == 5);1073ok ($r == -1);1074}10751076#------------------------------------------------------------------------------1077# GMP::Mpz::tdiv_2exp10781079{ my ($q, $r);1080($q, $r) = tdiv_2exp (23, 2);1081ok ($q == 5);1082ok ($r == 3);1083($q, $r) = tdiv_2exp (-23, 2);1084ok ($q == -5);1085ok ($r == -3);1086}10871088#------------------------------------------------------------------------------1089# GMP::Mpz::tstbit10901091ok (tstbit (6, 0) == 0);1092ok (tstbit (6, 1) == 1);1093ok (tstbit (6, 2) == 1);1094ok (tstbit (6, 3) == 0);10951096109710981099#------------------------------------------------------------------------------1100# GMP::Mpq11011102#------------------------------------------------------------------------------1103# GMP::Mpq::new11041105ok (mpq(0) == 0);1106ok (mpq('0') == 0);1107ok (mpq(substr('101',1,1)) == 0);1108ok (mpq(0.0) == 0);1109ok (mpq(mpz(0)) == 0);1110ok (mpq(mpq(0)) == 0);1111ok (mpq(mpf(0)) == 0);11121113{ tie my $t, 'Mytie', 0; ok (mpq($t) == 0); }1114{ tie my $t, 'Mytie', '0'; ok (mpq($t) == 0); }1115{ tie my $t, 'Mytie', substr('101',1,1); ok (mpq($t) == 0); }1116{ tie my $t, 'Mytie', 0.0; ok (mpq($t) == 0); }1117{ tie my $t, 'Mytie', mpz(0); ok (mpq($t) == 0); }1118{ tie my $t, 'Mytie', mpq(0); ok (mpq($t) == 0); }1119{ tie my $t, 'Mytie', mpf(0); ok (mpq($t) == 0); }11201121ok (mpq(-123) == -123);1122ok (mpq('-123') == -123);1123ok (mpq(substr('1-1231',1,4)) == -123);1124ok (mpq(-123.0) == -123);1125ok (mpq(mpz(-123)) == -123);1126ok (mpq(mpq(-123)) == -123);1127ok (mpq(mpf(-123)) == -123);11281129{ tie my $t, 'Mytie', -123; ok (mpq($t) == -123); }1130{ tie my $t, 'Mytie', '-123'; ok (mpq($t) == -123); }1131{ tie my $t, 'Mytie', substr('1-1231',1,4); ok (mpq($t) == -123); }1132{ tie my $t, 'Mytie', -123.0; ok (mpq($t) == -123); }1133{ tie my $t, 'Mytie', mpz(-123); ok (mpq($t) == -123); }1134{ tie my $t, 'Mytie', mpq(-123); ok (mpq($t) == -123); }1135{ tie my $t, 'Mytie', mpf(-123); ok (mpq($t) == -123); }11361137ok (mpq($ivnv_2p128) == $str_2p128);1138{ tie my $t, 'Mytie', $ivnv_2p128; ok (mpq($t) == $str_2p128); }11391140ok (mpq('3/2') == mpq(3,2));1141ok (mpq('3/1') == mpq(3,1));1142ok (mpq('-3/2') == mpq(-3,2));1143ok (mpq('-3/1') == mpq(-3,1));1144ok (mpq('0x3') == mpq(3,1));1145ok (mpq('0b111') == mpq(7,1));1146ok (mpq('0b0') == mpq(0,1));11471148ok (mpq($uv_max) > 0);1149ok (mpq($uv_max) == mpq($uv_max_str));1150{ tie my $t, 'Mytie', $uv_max; ok (mpq($t) > 0); }1151{ tie my $t, 'Mytie', $uv_max; ok (mpq($t) == mpq($uv_max_str)); }11521153{ my $x = 123.5;1154kill (0, $x);1155ok (mpq($x) == 123.5);1156tie my $t, 'Mytie', $x;1157ok (mpq($t) == 123.5);1158}11591160#------------------------------------------------------------------------------1161# GMP::Mpq::overload_abs11621163ok (abs(mpq(0)) == 0);1164ok (abs(mpq(123)) == 123);1165ok (abs(mpq(-123)) == 123);11661167{ my $x = mpq(-123); $x = abs($x); ok ($x == 123); }1168{ my $x = mpq(0); $x = abs($x); ok ($x == 0); }1169{ my $x = mpq(123); $x = abs($x); ok ($x == 123); }11701171{ tie my $t, 'Mytie', mpq(0); ok (abs($t) == 0); }1172{ tie my $t, 'Mytie', mpq(123); ok (abs($t) == 123); }1173{ tie my $t, 'Mytie', mpq(-123); ok (abs($t) == 123); }11741175#------------------------------------------------------------------------------1176# GMP::Mpq::overload_add11771178ok (mpq(0) + 1 == 1);1179ok (mpq(-1) + 1 == 0);1180ok (1 + mpq(0) == 1);1181ok (1 + mpq(-1) == 0);11821183ok (mpq(1,2)+mpq(1,3) == mpq(5,6));1184ok (mpq(1,2)+mpq(-1,3) == mpq(1,6));1185ok (mpq(-1,2)+mpq(1,3) == mpq(-1,6));1186ok (mpq(-1,2)+mpq(-1,3) == mpq(-5,6));11871188#------------------------------------------------------------------------------1189# GMP::Mpq::overload_addeq11901191{ my $a = mpq(7); $a += 1; ok ($a == 8); }1192{ my $a = mpq(7); my $b = $a; $a += 1; ok ($a == 8); ok ($b == 7); }11931194#------------------------------------------------------------------------------1195# GMP::Mpq::overload_bool11961197if (mpq(0)) { ok (0); } else { ok (1); }1198if (mpq(123)) { ok (1); } else { ok (0); }11991200#------------------------------------------------------------------------------1201# GMP::Mpq::overload_dec12021203{ my $a = mpq(0); ok ($a-- == 0); ok ($a == -1); }1204{ my $a = mpq(0); ok (--$a == -1); }12051206{ my $a = mpq(0); my $b = $a; $a--; ok ($a == -1); ok ($b == 0); }12071208#------------------------------------------------------------------------------1209# GMP::Mpq::overload_div12101211ok (mpq(6) / 2 == 3);1212ok (mpq(-6) / 2 == -3);1213ok (mpq(6) / -2 == -3);1214ok (mpq(-6) / -2 == 3);12151216#------------------------------------------------------------------------------1217# GMP::Mpq::overload_diveq12181219{ my $a = mpq(21); $a /= 3; ok ($a == 7); }1220{ my $a = mpq(21); my $b = $a; $a /= 3; ok ($a == 7); ok ($b == 21); }12211222#------------------------------------------------------------------------------1223# GMP::Mpq::overload_eq12241225{ my $a = mpq(0);1226my $b = $a;1227$a = mpq(1);1228ok ($a == 1);1229ok ($b == 0); }12301231#------------------------------------------------------------------------------1232# GMP::Mpq::overload_inc12331234{ my $a = mpq(0); ok ($a++ == 0); ok ($a == 1); }1235{ my $a = mpq(0); ok (++$a == 1); }12361237{ my $a = mpq(0); my $b = $a; $a++; ok ($a == 1); ok ($b == 0); }12381239#------------------------------------------------------------------------------1240# GMP::Mpq::overload_lshift12411242{ my $a = mpq(7) << 1; ok ($a == 14); }12431244#------------------------------------------------------------------------------1245# GMP::Mpq::overload_lshifteq12461247{ my $a = mpq(7); $a <<= 1; ok ($a == 14); }1248{ my $a = mpq(7); my $b = $a; $a <<= 1; ok ($a == 14); ok ($b == 7); }12491250#------------------------------------------------------------------------------1251# GMP::Mpq::overload_mul12521253ok (mpq(2) * 3 == 6);12541255#------------------------------------------------------------------------------1256# GMP::Mpq::overload_muleq12571258{ my $a = mpq(7); $a *= 3; ok ($a == 21); }1259{ my $a = mpq(7); my $b = $a; $a *= 3; ok ($a == 21); ok ($b == 7); }12601261#------------------------------------------------------------------------------1262# GMP::Mpq::overload_neg12631264ok (- mpq(0) == 0);1265ok (- mpq(123) == -123);1266ok (- mpq(-123) == 123);12671268#------------------------------------------------------------------------------1269# GMP::Mpq::overload_not12701271if (not mpq(0)) { ok (1); } else { ok (0); }1272if (not mpq(123)) { ok (0); } else { ok (1); }12731274ok ((! mpq(0)) == 1);1275ok ((! mpq(123)) == 0);12761277#------------------------------------------------------------------------------1278# GMP::Mpq::overload_pow12791280ok (mpq(0) ** 1 == 0);1281ok (mpq(1) ** 1 == 1);1282ok (mpq(2) ** 0 == 1);1283ok (mpq(2) ** 1 == 2);1284ok (mpq(2) ** 2 == 4);1285ok (mpq(2) ** 3 == 8);1286ok (mpq(2) ** 4 == 16);12871288ok (mpq(0) ** mpq(1) == 0);1289ok (mpq(1) ** mpq(1) == 1);1290ok (mpq(2) ** mpq(0) == 1);1291ok (mpq(2) ** mpq(1) == 2);1292ok (mpq(2) ** mpq(2) == 4);1293ok (mpq(2) ** mpq(3) == 8);1294ok (mpq(2) ** mpq(4) == 16);12951296#------------------------------------------------------------------------------1297# GMP::Mpq::overload_poweq12981299{ my $a = mpq(3); $a **= 4; ok ($a == 81); }1300{ my $a = mpq(3); my $b = $a; $a **= 4; ok ($a == 81); ok ($b == 3); }13011302#------------------------------------------------------------------------------1303# GMP::Mpq::overload_rshift13041305{ my $a = mpq(32) >> 1; ok ($a == 16); }13061307#------------------------------------------------------------------------------1308# GMP::Mpq::overload_rshifteq13091310{ my $a = mpq(32); $a >>= 1; ok ($a == 16); }1311{ my $a = mpq(32); my $b = $a; $a >>= 1; ok ($a == 16); ok ($b == 32); }13121313#------------------------------------------------------------------------------1314# GMP::Mpq::overload_spaceship13151316ok (mpq(0) < 1);1317ok (mpq(0) > -1);13181319ok (mpq(0) != 1);1320ok (mpq(0) != -1);1321ok (mpq(1) != 0);1322ok (mpq(1) != -1);1323ok (mpq(-1) != 0);1324ok (mpq(-1) != 1);13251326ok (mpq(3,2) > 1);1327ok (mpq(3,2) < 2);13281329ok (mpq(0) < 1.0);1330ok (mpq(0) < '1');1331ok (mpq(0) < substr('-1',1,1));1332ok (mpq(0) < mpz(1));1333ok (mpq(0) < mpq(1));1334ok (mpq(0) < mpf(1));1335ok (mpq(0) < $uv_max);13361337#------------------------------------------------------------------------------1338# GMP::Mpq::overload_string13391340{ my $x = mpq(0); ok("$x" eq "0"); }1341{ my $x = mpq(123); ok("$x" eq "123"); }1342{ my $x = mpq(-123); ok("$x" eq "-123"); }13431344{ my $q = mpq(5,7); ok("$q" eq "5/7"); }1345{ my $q = mpq(-5,7); ok("$q" eq "-5/7"); }13461347#------------------------------------------------------------------------------1348# GMP::Mpq::overload_sub13491350ok (mpq(0) - 1 == -1);1351ok (mpq(1) - 1 == 0);1352ok (1 - mpq(0) == 1);1353ok (1 - mpq(1) == 0);13541355ok (mpq(1,2)-mpq(1,3) == mpq(1,6));1356ok (mpq(1,2)-mpq(-1,3) == mpq(5,6));1357ok (mpq(-1,2)-mpq(1,3) == mpq(-5,6));1358ok (mpq(-1,2)-mpq(-1,3) == mpq(-1,6));13591360#------------------------------------------------------------------------------1361# GMP::Mpq::overload_subeq13621363{ my $a = mpq(7); $a -= 1; ok ($a == 6); }1364{ my $a = mpq(7); my $b = $a; $a -= 1; ok ($a == 6); ok ($b == 7); }13651366#------------------------------------------------------------------------------1367# GMP::Mpq::canonicalize13681369{ my $q = mpq(21,15); canonicalize($q);1370ok (num($q) == 7);1371ok (den($q) == 5);1372}13731374#------------------------------------------------------------------------------1375# GMP::Mpq::den13761377{ my $q = mpq(5,9); ok (den($q) == 9); }13781379#------------------------------------------------------------------------------1380# GMP::Mpq::num13811382{ my $q = mpq(5,9); ok (num($q) == 5); }13831384138513861387#------------------------------------------------------------------------------1388# GMP::Mpf13891390#------------------------------------------------------------------------------1391# GMP::Mpf::new13921393ok (mpf(0) == 0);1394ok (mpf('0') == 0);1395ok (mpf(substr('101',1,1)) == 0);1396ok (mpf(0.0) == 0);1397ok (mpf(mpz(0)) == 0);1398ok (mpf(mpq(0)) == 0);1399ok (mpf(mpf(0)) == 0);14001401{ tie my $t, 'Mytie', 0; ok (mpf($t) == 0); }1402{ tie my $t, 'Mytie', '0'; ok (mpf($t) == 0); }1403{ tie my $t, 'Mytie', substr('101',1,1); ok (mpf($t) == 0); }1404{ tie my $t, 'Mytie', 0.0; ok (mpf($t) == 0); }1405{ tie my $t, 'Mytie', mpz(0); ok (mpf($t) == 0); }1406{ tie my $t, 'Mytie', mpq(0); ok (mpf($t) == 0); }1407{ tie my $t, 'Mytie', mpf(0); ok (mpf($t) == 0); }14081409ok (mpf(-123) == -123);1410ok (mpf('-123') == -123);1411ok (mpf(substr('1-1231',1,4)) == -123);1412ok (mpf(-123.0) == -123);1413ok (mpf(mpz(-123)) == -123);1414ok (mpf(mpq(-123)) == -123);1415ok (mpf(mpf(-123)) == -123);14161417{ tie my $t, 'Mytie', -123; ok (mpf($t) == -123); }1418{ tie my $t, 'Mytie', '-123'; ok (mpf($t) == -123); }1419{ tie my $t, 'Mytie', substr('1-1231',1,4); ok (mpf($t) == -123); }1420{ tie my $t, 'Mytie', -123.0; ok (mpf($t) == -123); }1421{ tie my $t, 'Mytie', mpz(-123); ok (mpf($t) == -123); }1422{ tie my $t, 'Mytie', mpq(-123); ok (mpf($t) == -123); }1423{ tie my $t, 'Mytie', mpf(-123); ok (mpf($t) == -123); }14241425ok (mpf($ivnv_2p128) == $str_2p128);1426{ tie my $t, 'Mytie', $ivnv_2p128; ok (mpf($t) == $str_2p128); }14271428ok (mpf(-1.5) == -1.5);1429ok (mpf(-1.0) == -1.0);1430ok (mpf(-0.5) == -0.5);1431ok (mpf(0) == 0);1432ok (mpf(0.5) == 0.5);1433ok (mpf(1.0) == 1.0);1434ok (mpf(1.5) == 1.5);14351436ok (mpf("-1.5") == -1.5);1437ok (mpf("-1.0") == -1.0);1438ok (mpf("-0.5") == -0.5);1439ok (mpf("0") == 0);1440ok (mpf("0.5") == 0.5);1441ok (mpf("1.0") == 1.0);1442ok (mpf("1.5") == 1.5);14431444ok (mpf($uv_max) > 0);1445ok (mpf($uv_max) == mpf($uv_max_str));1446{ tie my $t, 'Mytie', $uv_max; ok (mpf($t) > 0); }1447{ tie my $t, 'Mytie', $uv_max; ok (mpf($t) == mpf($uv_max_str)); }14481449{ my $x = 123.5;1450kill (0, $x);1451ok (mpf($x) == 123.5);1452tie my $t, 'Mytie', $x;1453ok (mpf($t) == 123.5);1454}14551456#------------------------------------------------------------------------------1457# GMP::Mpf::overload_abs14581459ok (abs(mpf(0)) == 0);1460ok (abs(mpf(123)) == 123);1461ok (abs(mpf(-123)) == 123);14621463{ my $x = mpf(-123); $x = abs($x); ok ($x == 123); }1464{ my $x = mpf(0); $x = abs($x); ok ($x == 0); }1465{ my $x = mpf(123); $x = abs($x); ok ($x == 123); }14661467{ tie my $t, 'Mytie', mpf(0); ok (abs($t) == 0); }1468{ tie my $t, 'Mytie', mpf(123); ok (abs($t) == 123); }1469{ tie my $t, 'Mytie', mpf(-123); ok (abs($t) == 123); }14701471#------------------------------------------------------------------------------1472# GMP::Mpf::overload_add14731474ok (mpf(0) + 1 == 1);1475ok (mpf(-1) + 1 == 0);1476ok (1 + mpf(0) == 1);1477ok (1 + mpf(-1) == 0);14781479#------------------------------------------------------------------------------1480# GMP::Mpf::overload_addeq14811482{ my $a = mpf(7); $a += 1; ok ($a == 8); }1483{ my $a = mpf(7); my $b = $a; $a += 1; ok ($a == 8); ok ($b == 7); }14841485#------------------------------------------------------------------------------1486# GMP::Mpf::overload_bool14871488if (mpf(0)) { ok (0); } else { ok (1); }1489if (mpf(123)) { ok (1); } else { ok (0); }14901491#------------------------------------------------------------------------------1492# GMP::Mpf::overload_dec14931494{ my $a = mpf(0); ok ($a-- == 0); ok ($a == -1); }1495{ my $a = mpf(0); ok (--$a == -1); }14961497{ my $a = mpf(0); my $b = $a; $a--; ok ($a == -1); ok ($b == 0); }14981499#------------------------------------------------------------------------------1500# GMP::Mpf::overload_div15011502ok (mpf(6) / 2 == 3);1503ok (mpf(-6) / 2 == -3);1504ok (mpf(6) / -2 == -3);1505ok (mpf(-6) / -2 == 3);15061507#------------------------------------------------------------------------------1508# GMP::Mpf::overload_diveq15091510{ my $a = mpf(21); $a /= 3; ok ($a == 7); }1511{ my $a = mpf(21); my $b = $a; $a /= 3; ok ($a == 7); ok ($b == 21); }15121513#------------------------------------------------------------------------------1514# GMP::Mpf::overload_eq15151516{ my $a = mpf(0);1517my $b = $a;1518$a = mpf(1);1519ok ($a == 1);1520ok ($b == 0); }15211522#------------------------------------------------------------------------------1523# GMP::Mpf::overload_inc15241525{ my $a = mpf(0); ok ($a++ == 0); ok ($a == 1); }1526{ my $a = mpf(0); ok (++$a == 1); }15271528{ my $a = mpf(0); my $b = $a; $a++; ok ($a == 1); ok ($b == 0); }15291530#------------------------------------------------------------------------------1531# GMP::Mpf::overload_lshift15321533{ my $a = mpf(7) << 1; ok ($a == 14); }15341535#------------------------------------------------------------------------------1536# GMP::Mpf::overload_lshifteq15371538{ my $a = mpf(7); $a <<= 1; ok ($a == 14); }1539{ my $a = mpf(7); my $b = $a; $a <<= 1; ok ($a == 14); ok ($b == 7); }15401541#------------------------------------------------------------------------------1542# GMP::Mpf::overload_mul15431544ok (mpf(2) * 3 == 6);15451546#------------------------------------------------------------------------------1547# GMP::Mpf::overload_muleq15481549{ my $a = mpf(7); $a *= 3; ok ($a == 21); }1550{ my $a = mpf(7); my $b = $a; $a *= 3; ok ($a == 21); ok ($b == 7); }15511552#------------------------------------------------------------------------------1553# GMP::Mpf::overload_neg15541555ok (- mpf(0) == 0);1556ok (- mpf(123) == -123);1557ok (- mpf(-123) == 123);15581559#------------------------------------------------------------------------------1560# GMP::Mpf::overload_not15611562if (not mpf(0)) { ok (1); } else { ok (0); }1563if (not mpf(123)) { ok (0); } else { ok (1); }15641565ok ((! mpf(0)) == 1);1566ok ((! mpf(123)) == 0);15671568#------------------------------------------------------------------------------1569# GMP::Mpf::overload_pow15701571ok (mpf(0) ** 1 == 0);1572ok (mpf(1) ** 1 == 1);1573ok (mpf(2) ** 0 == 1);1574ok (mpf(2) ** 1 == 2);1575ok (mpf(2) ** 2 == 4);1576ok (mpf(2) ** 3 == 8);1577ok (mpf(2) ** 4 == 16);15781579ok (mpf(0) ** mpf(1) == 0);1580ok (mpf(1) ** mpf(1) == 1);1581ok (mpf(2) ** mpf(0) == 1);1582ok (mpf(2) ** mpf(1) == 2);1583ok (mpf(2) ** mpf(2) == 4);1584ok (mpf(2) ** mpf(3) == 8);1585ok (mpf(2) ** mpf(4) == 16);15861587#------------------------------------------------------------------------------1588# GMP::Mpf::overload_poweq15891590{ my $a = mpf(3); $a **= 4; ok ($a == 81); }1591{ my $a = mpf(3); my $b = $a; $a **= 4; ok ($a == 81); ok ($b == 3); }15921593#------------------------------------------------------------------------------1594# GMP::Mpf::overload_rshift15951596{ my $a = mpf(32) >> 1; ok ($a == 16); }15971598#------------------------------------------------------------------------------1599# GMP::Mpf::overload_rshifteq16001601{ my $a = mpf(32); $a >>= 1; ok ($a == 16); }1602{ my $a = mpf(32); my $b = $a; $a >>= 1; ok ($a == 16); ok ($b == 32); }16031604#------------------------------------------------------------------------------1605# GMP::Mpf::overload_sqrt16061607ok (sqrt(mpf(0)) == 0);1608ok (sqrt(mpf(1)) == 1);1609ok (sqrt(mpf(4)) == 2);1610ok (sqrt(mpf(81)) == 9);16111612ok (sqrt(mpf(0.25)) == 0.5);16131614#------------------------------------------------------------------------------1615# GMP::Mpf::overload_spaceship16161617ok (mpf(0) < 1);1618ok (mpf(0) > -1);16191620ok (mpf(0) != 1);1621ok (mpf(0) != -1);1622ok (mpf(1) != 0);1623ok (mpf(1) != -1);1624ok (mpf(-1) != 0);1625ok (mpf(-1) != 1);16261627ok (mpf(0) < 1.0);1628ok (mpf(0) < '1');1629ok (mpf(0) < substr('-1',1,1));1630ok (mpf(0) < mpz(1));1631ok (mpf(0) < mpq(1));1632ok (mpf(0) < mpf(1));1633ok (mpf(0) < $uv_max);16341635#------------------------------------------------------------------------------1636# GMP::Mpf::overload_string16371638{ my $x = mpf(0); ok ("$x" eq "0"); }1639{ my $x = mpf(123); ok ("$x" eq "123"); }1640{ my $x = mpf(-123); ok ("$x" eq "-123"); }16411642{ my $f = mpf(0.25); ok ("$f" eq "0.25"); }1643{ my $f = mpf(-0.25); ok ("$f" eq "-0.25"); }1644{ my $f = mpf(1.25); ok ("$f" eq "1.25"); }1645{ my $f = mpf(-1.25); ok ("$f" eq "-1.25"); }1646{ my $f = mpf(1000000); ok ("$f" eq "1000000"); }1647{ my $f = mpf(-1000000); ok ("$f" eq "-1000000"); }16481649#------------------------------------------------------------------------------1650# GMP::Mpf::overload_sub16511652ok (mpf(0) - 1 == -1);1653ok (mpf(1) - 1 == 0);1654ok (1 - mpf(0) == 1);1655ok (1 - mpf(1) == 0);16561657#------------------------------------------------------------------------------1658# GMP::Mpf::overload_subeq16591660{ my $a = mpf(7); $a -= 1; ok ($a == 6); }1661{ my $a = mpf(7); my $b = $a; $a -= 1; ok ($a == 6); ok ($b == 7); }166216631664#------------------------------------------------------------------------------1665# GMP::Mpf::ceil16661667ok (ceil (mpf(-7.5)) == -7.0);1668ok (ceil (mpf(7.5)) == 8.0);16691670#------------------------------------------------------------------------------1671# GMP::Mpf::floor16721673ok (floor(mpf(-7.5)) == -8.0);1674ok (floor(mpf(7.5)) == 7.0);16751676#------------------------------------------------------------------------------1677# GMP::Mpf::mpf_eq16781679{ my $old_prec = get_default_prec();1680set_default_prec(128);16811682ok ( mpf_eq (mpz("0x10000000000000001"), mpz("0x10000000000000002"), 1));1683ok (! mpf_eq (mpz("0x11"), mpz("0x12"), 128));16841685set_default_prec($old_prec);1686}16871688#------------------------------------------------------------------------------1689# GMP::Mpf::get_default_prec16901691get_default_prec();16921693#------------------------------------------------------------------------------1694# GMP::Mpf::get_prec16951696{ my $x = mpf(1.0, 512);1697ok (get_prec ($x) == 512);1698}16991700#------------------------------------------------------------------------------1701# GMP::Mpf::reldiff17021703ok (reldiff (2,4) == 1);1704ok (reldiff (4,2) == 0.5);17051706#------------------------------------------------------------------------------1707# GMP::Mpf::set_default_prec17081709{ my $old_prec = get_default_prec();17101711set_default_prec(512);1712ok (get_default_prec () == 512);17131714set_default_prec($old_prec);1715}17161717#------------------------------------------------------------------------------1718# GMP::Mpf::set_prec17191720{ my $x = mpf(1.0, 512);1721my $y = $x;1722set_prec ($x, 1024);1723ok (get_prec ($x) == 1024);1724ok (get_prec ($y) == 512);1725}17261727#------------------------------------------------------------------------------1728# GMP::Mpf::trunc17291730ok (trunc(mpf(-7.5)) == -7.0);1731ok (trunc(mpf(7.5)) == 7.0);1732173317341735#------------------------------------------------------------------------------1736# GMP::Rand17371738#------------------------------------------------------------------------------1739# GMP::Rand::new17401741{ my $r = randstate(); ok (defined $r); }1742{ my $r = randstate('lc_2exp', 1, 2, 3); ok (defined $r); }1743{ my $r = randstate('lc_2exp_size', 64); ok (defined $r); }1744{ my $r = randstate('lc_2exp_size', 999999999); ok (! defined $r); }1745{ my $r = randstate('mt'); ok (defined $r); }17461747{ # copying a randstate results in same sequence1748my $r1 = randstate('lc_2exp_size', 64);1749$r1->seed(123);1750my $r2 = randstate($r1);1751for (1 .. 20) {1752my $z1 = mpz_urandomb($r1, 20);1753my $z2 = mpz_urandomb($r2, 20);1754ok ($z1 == $z2);1755}1756}17571758#------------------------------------------------------------------------------1759# GMP::Rand::seed17601761{ my $r = randstate();1762$r->seed(123);1763$r->seed(time());1764}17651766#------------------------------------------------------------------------------1767# GMP::Rand::mpf_urandomb17681769{ my $r = randstate();1770my $f = mpf_urandomb($r,1024);1771ok (UNIVERSAL::isa($f,"GMP::Mpf")); }17721773#------------------------------------------------------------------------------1774# GMP::Rand::mpz_urandomb17751776{ my $r = randstate();1777my $z = mpz_urandomb($r, 1024);1778ok (UNIVERSAL::isa($z,"GMP::Mpz")); }17791780#------------------------------------------------------------------------------1781# GMP::Rand::mpz_rrandomb17821783{ my $r = randstate();1784my $z = mpz_rrandomb($r, 1024);1785ok (UNIVERSAL::isa($z,"GMP::Mpz")); }17861787#------------------------------------------------------------------------------1788# GMP::Rand::mpz_urandomm17891790{ my $r = randstate();1791my $z = mpz_urandomm($r, mpz(3)**100);1792ok (UNIVERSAL::isa($z,"GMP::Mpz")); }17931794#------------------------------------------------------------------------------1795# GMP::Rand::mpz_urandomb_ui17961797{ my $r = randstate();1798foreach (1 .. 20) {1799my $u = gmp_urandomb_ui($r,8);1800ok ($u >= 0);1801ok ($u < 256);1802}1803}18041805#------------------------------------------------------------------------------1806# GMP::Rand::mpz_urandomm_ui18071808{ my $r = randstate();1809foreach (1 .. 20) {1810my $u = gmp_urandomm_ui($r,8);1811ok ($u >= 0);1812ok ($u < 8);1813}1814}18151816181718181819#------------------------------------------------------------------------------1820# GMP module18211822#------------------------------------------------------------------------------1823# GMP::fits_slong_p18241825ok (GMP::fits_slong_p(0));18261827# in perl 5.005 uv_max is only 32-bits on a 64-bit system, so won't exceed a1828# long1829# ok (! GMP::fits_slong_p($uv_max));18301831ok (GMP::fits_slong_p(0.0));18321833ok (GMP::fits_slong_p('0'));18341835ok (GMP::fits_slong_p(substr('999999999999999999999999999999',1,1)));18361837ok (! mpz("-9999999999999999999999999999999999999999999")->fits_slong_p());1838ok ( mpz(-123)->fits_slong_p());1839ok ( mpz(0)->fits_slong_p());1840ok ( mpz(123)->fits_slong_p());1841ok (! mpz("9999999999999999999999999999999999999999999")->fits_slong_p());18421843ok (! mpq("-9999999999999999999999999999999999999999999")->fits_slong_p());1844ok ( mpq(-123)->fits_slong_p());1845ok ( mpq(0)->fits_slong_p());1846ok ( mpq(123)->fits_slong_p());1847ok (! mpq("9999999999999999999999999999999999999999999")->fits_slong_p());18481849ok (! mpf("-9999999999999999999999999999999999999999999")->fits_slong_p());1850ok ( mpf(-123)->fits_slong_p());1851ok ( mpf(0)->fits_slong_p());1852ok ( mpf(123)->fits_slong_p());1853ok (! mpf("9999999999999999999999999999999999999999999")->fits_slong_p());18541855#------------------------------------------------------------------------------1856# GMP::get_d18571858ok (GMP::get_d(123) == 123.0);18591860ok (GMP::get_d($uv_max) > 0);18611862ok (GMP::get_d(123.0) == 123.0);18631864ok (GMP::get_d('123') == 123.0);18651866ok (GMP::get_d(mpz(123)) == 123.0);18671868ok (GMP::get_d(mpq(123)) == 123.0);18691870ok (GMP::get_d(mpf(123)) == 123.0);18711872#------------------------------------------------------------------------------1873# GMP::get_d_2exp18741875{ my ($dbl, $exp) = get_d_2exp (0);1876ok ($dbl == 0); ok ($exp == 0); }1877{ my ($dbl, $exp) = get_d_2exp (1);1878ok ($dbl == 0.5); ok ($exp == 1); }18791880{ my ($dbl, $exp) = get_d_2exp ($uv_max);1881ok ($dbl > 0.0); ok ($exp > 0); }18821883{ my ($dbl, $exp) = get_d_2exp (0.5);1884ok ($dbl == 0.5); ok ($exp == 0); }1885{ my ($dbl, $exp) = get_d_2exp (0.25);1886ok ($dbl == 0.5); ok ($exp == -1); }18871888{ my ($dbl, $exp) = get_d_2exp ("1.0");1889ok ($dbl == 0.5); ok ($exp == 1); }18901891{ my ($dbl, $exp) = get_d_2exp (mpz ("256"));1892ok ($dbl == 0.5); ok ($exp == 9); }18931894{ my ($dbl, $exp) = get_d_2exp (mpq ("1/16"));1895ok ($dbl == 0.5); ok ($exp == -3); }18961897{ my ($dbl, $exp) = get_d_2exp (mpf ("1.5"));1898ok ($dbl == 0.75); ok ($exp == 1); }1899{ my ($dbl, $exp) = get_d_2exp (mpf ("3.0"));1900ok ($dbl == 0.75); ok ($exp == 2); }19011902#------------------------------------------------------------------------------1903# GMP::get_str19041905ok (get_str(-123) eq '-123');1906ok (get_str('-123') eq '-123');1907ok (get_str(substr('x-123x',1,4)) eq '-123');1908ok (get_str(mpz(-123)) eq '-123');1909ok (get_str(mpq(-123)) eq '-123');19101911ok (get_str(-123,10) eq '-123');1912ok (get_str('-123',10) eq '-123');1913ok (get_str(substr('x-123x',1,4),10) eq '-123');1914ok (get_str(mpz(-123),10) eq '-123');1915ok (get_str(mpq(-123),10) eq '-123');19161917ok (get_str(-123,16) eq '-7b');1918ok (get_str('-123',16) eq '-7b');1919ok (get_str(substr('x-123x',1,4),16) eq '-7b');1920ok (get_str(mpz(-123),16) eq '-7b');1921ok (get_str(mpq(-123),16) eq '-7b');19221923ok (get_str(-123,-16) eq '-7B');1924ok (get_str('-123',-16) eq '-7B');1925ok (get_str(substr('x-123x',1,4),-16) eq '-7B');1926ok (get_str(mpz(-123),-16) eq '-7B');1927ok (get_str(mpq(-123),-16) eq '-7B');19281929# is a float in past versions of perl without UV type1930{ my ($str, $exp) = get_str($uv_max);1931ok ($str eq $uv_max_str); }19321933ok (get_str(mpq(5/8)) eq "5/8");1934ok (get_str(mpq(-5/8)) eq "-5/8");1935ok (get_str(mpq(255/256),16) eq "ff/100");1936ok (get_str(mpq(255/256),-16) eq "FF/100");1937ok (get_str(mpq(-255/256),16) eq "-ff/100");1938ok (get_str(mpq(-255/256),-16) eq "-FF/100");19391940{ my ($s,$e) = get_str(1.5, 10); ok ($s eq '15'); ok ($e == 1); }1941{ my ($s,$e) = get_str(mpf(1.5), 10); ok ($s eq '15'); ok ($e == 1); }19421943{ my ($s,$e) = get_str(-1.5, 10); ok ($s eq '-15'); ok ($e == 1); }1944{ my ($s,$e) = get_str(mpf(-1.5), 10); ok ($s eq '-15'); ok ($e == 1); }19451946{ my ($s,$e) = get_str(1.5, 16); ok ($s eq '18'); ok ($e == 1); }1947{ my ($s,$e) = get_str(mpf(1.5), 16); ok ($s eq '18'); ok ($e == 1); }19481949{ my ($s,$e) = get_str(-1.5, 16); ok ($s eq '-18'); ok ($e == 1); }1950{ my ($s,$e) = get_str(mpf(-1.5), 16); ok ($s eq '-18'); ok ($e == 1); }19511952{ my ($s,$e) = get_str(65536.0, 16); ok ($s eq '1'); ok ($e == 5); }1953{ my ($s,$e) = get_str(mpf(65536.0), 16); ok ($s eq '1'); ok ($e == 5); }19541955{ my ($s,$e) = get_str(1.625, 16); ok ($s eq '1a'); ok ($e == 1); }1956{ my ($s,$e) = get_str(mpf(1.625), 16); ok ($s eq '1a'); ok ($e == 1); }19571958{ my ($s,$e) = get_str(1.625, -16); ok ($s eq '1A'); ok ($e == 1); }1959{ my ($s,$e) = get_str(mpf(1.625), -16); ok ($s eq '1A'); ok ($e == 1); }19601961{ my ($s, $e) = get_str(255.0,16,0); ok ($s eq "ff"); ok ($e == 2); }1962{ my ($s, $e) = get_str(mpf(255.0),16,0); ok ($s eq "ff"); ok ($e == 2); }19631964{ my ($s, $e) = get_str(255.0,-16,0); ok ($s eq "FF"); ok ($e == 2); }1965{ my ($s, $e) = get_str(mpf(255.0),-16,0); ok ($s eq "FF"); ok ($e == 2); }19661967#------------------------------------------------------------------------------1968# GMP::get_si19691970ok (GMP::get_si(123) == 123.0);19711972# better not assume anything about the relatives sizes of long and UV1973ok (GMP::get_si($uv_max) != 0);19741975ok (GMP::get_si(123.0) == 123.0);19761977ok (GMP::get_si('123') == 123.0);19781979ok (GMP::get_si(mpz(123)) == 123.0);19801981ok (GMP::get_si(mpq(123)) == 123.0);19821983ok (GMP::get_si(mpf(123)) == 123.0);19841985#------------------------------------------------------------------------------1986# GMP::integer_p19871988ok ( GMP::integer_p (0));1989ok ( GMP::integer_p (123));1990ok ( GMP::integer_p (-123));19911992ok ( GMP::integer_p ($uv_max));19931994ok ( GMP::integer_p (0.0));1995ok ( GMP::integer_p (123.0));1996ok ( GMP::integer_p (-123.0));1997ok (! GMP::integer_p (0.5));1998ok (! GMP::integer_p (123.5));1999ok (! GMP::integer_p (-123.5));20002001ok ( GMP::integer_p ('0'));2002ok ( GMP::integer_p ('123'));2003ok ( GMP::integer_p ('-123'));2004ok (! GMP::integer_p ('0.5'));2005ok (! GMP::integer_p ('123.5'));2006ok (! GMP::integer_p ('-123.5'));2007ok (! GMP::integer_p ('5/8'));20082009ok ( GMP::integer_p (mpz(1)));20102011ok ( GMP::integer_p (mpq(1)));2012ok (! GMP::integer_p (mpq(1,2)));20132014ok ( GMP::integer_p (mpf(1.0)));2015ok (! GMP::integer_p (mpf(1.5)));20162017#------------------------------------------------------------------------------2018# GMP::odd_p20192020ok (! odd_p(0));2021ok ( odd_p(1));2022ok (! odd_p(2));20232024ok ( odd_p($uv_max));20252026ok ( odd_p(mpz(-3)));2027ok (! odd_p(mpz(-2)));2028ok ( odd_p(mpz(-1)));2029ok (! odd_p(mpz(0)));2030ok ( odd_p(mpz(1)));2031ok (! odd_p(mpz(2)));2032ok ( odd_p(mpz(3)));20332034#------------------------------------------------------------------------------2035# GMP::printf20362037GMP::printf ("hello world\n");20382039sub via_printf {2040my $s;2041open TEMP, ">test.tmp" or die;2042GMP::printf TEMP @_;2043close TEMP or die;2044open TEMP, "<test.tmp" or die;2045read (TEMP, $s, 1024);2046close TEMP or die;2047unlink 'test.tmp';2048return $s;2049}20502051ok (sprintf ("%d", mpz(123)) eq '123');2052ok (sprintf ("%d %d %d", 456, mpz(123), 789) eq '456 123 789');2053ok (sprintf ("%d", mpq(15,16)) eq '15/16');2054ok (sprintf ("%f", mpf(1.5)) eq '1.500000');2055ok (sprintf ("%.2f", mpf(1.5)) eq '1.50');20562057ok (sprintf ("%*d", 6, 123) eq ' 123');2058ok (sprintf ("%*d", 6, mpz(123)) eq ' 123');2059ok (sprintf ("%*d", 6, mpq(15,16)) eq ' 15/16');20602061ok (sprintf ("%x", 123) eq '7b');2062ok (sprintf ("%x", mpz(123)) eq '7b');2063ok (sprintf ("%X", 123) eq '7B');2064ok (sprintf ("%X", mpz(123)) eq '7B');2065ok (sprintf ("%#x", 123) eq '0x7b');2066ok (sprintf ("%#x", mpz(123)) eq '0x7b');2067ok (sprintf ("%#X", 123) eq '0X7B');2068ok (sprintf ("%#X", mpz(123)) eq '0X7B');20692070ok (sprintf ("%x", mpq(15,16)) eq 'f/10');2071ok (sprintf ("%X", mpq(15,16)) eq 'F/10');2072ok (sprintf ("%#x", mpq(15,16)) eq '0xf/0x10');2073ok (sprintf ("%#X", mpq(15,16)) eq '0XF/0X10');20742075ok (sprintf ("%*.*f", 10, 3, 1.25) eq ' 1.250');2076ok (sprintf ("%*.*f", 10, 3, mpf(1.5)) eq ' 1.500');20772078ok (via_printf ("%d", mpz(123)) eq '123');2079ok (via_printf ("%d %d %d", 456, mpz(123), 789) eq '456 123 789');2080ok (via_printf ("%d", mpq(15,16)) eq '15/16');2081ok (via_printf ("%f", mpf(1.5)) eq '1.500000');2082ok (via_printf ("%.2f", mpf(1.5)) eq '1.50');20832084ok (via_printf ("%*d", 6, 123) eq ' 123');2085ok (via_printf ("%*d", 6, mpz(123)) eq ' 123');2086ok (via_printf ("%*d", 6, mpq(15,16)) eq ' 15/16');20872088ok (via_printf ("%x", 123) eq '7b');2089ok (via_printf ("%x", mpz(123)) eq '7b');2090ok (via_printf ("%X", 123) eq '7B');2091ok (via_printf ("%X", mpz(123)) eq '7B');2092ok (via_printf ("%#x", 123) eq '0x7b');2093ok (via_printf ("%#x", mpz(123)) eq '0x7b');2094ok (via_printf ("%#X", 123) eq '0X7B');2095ok (via_printf ("%#X", mpz(123)) eq '0X7B');20962097ok (via_printf ("%x", mpq(15,16)) eq 'f/10');2098ok (via_printf ("%X", mpq(15,16)) eq 'F/10');2099ok (via_printf ("%#x", mpq(15,16)) eq '0xf/0x10');2100ok (via_printf ("%#X", mpq(15,16)) eq '0XF/0X10');21012102ok (via_printf ("%*.*f", 10, 3, 1.25) eq ' 1.250');2103ok (via_printf ("%*.*f", 10, 3, mpf(1.5)) eq ' 1.500');21042105#------------------------------------------------------------------------------2106# GMP::sgn21072108ok (sgn(-123) == -1);2109ok (sgn(0) == 0);2110ok (sgn(123) == 1);21112112ok (sgn($uv_max) == 1);21132114ok (sgn(-123.0) == -1);2115ok (sgn(0.0) == 0);2116ok (sgn(123.0) == 1);21172118ok (sgn('-123') == -1);2119ok (sgn('0') == 0);2120ok (sgn('123') == 1);2121ok (sgn('-123.0') == -1);2122ok (sgn('0.0') == 0);2123ok (sgn('123.0') == 1);21242125ok (sgn(substr('x-123x',1,4)) == -1);2126ok (sgn(substr('x0x',1,1)) == 0);2127ok (sgn(substr('x123x',1,3)) == 1);21282129ok (mpz(-123)->sgn() == -1);2130ok (mpz(0) ->sgn() == 0);2131ok (mpz(123) ->sgn() == 1);21322133ok (mpq(-123)->sgn() == -1);2134ok (mpq(0) ->sgn() == 0);2135ok (mpq(123) ->sgn() == 1);21362137ok (mpf(-123)->sgn() == -1);2138ok (mpf(0) ->sgn() == 0);2139ok (mpf(123) ->sgn() == 1);2140214121422143#------------------------------------------------------------------------------2144# overloaded constants21452146if ($] > 5.00503) {2147if (! do 'test2.pl') {2148die "Cannot run test2.pl\n";2149}2150}21512152215321542155#------------------------------------------------------------------------------2156# $# stuff2157#2158# For some reason "local $#" doesn't leave $# back at its default undefined2159# state when exiting the block.21602161{ local $# = 'hi %.0f there';2162my $f = mpf(123);2163ok ("$f" eq 'hi 123 there'); }2164216521662167# Local variables:2168# perl-indent-level: 22169# End:217021712172