* GMP initial version.

git-svn-id: trunk@13667 -
This commit is contained in:
marco 2009-09-07 13:50:31 +00:00
parent 1f6b55290e
commit da9458587d
17 changed files with 17695 additions and 0 deletions

16
.gitattributes vendored
View File

@ -1814,6 +1814,22 @@ packages/ggi/fpmake.pp svneol=native#text/plain
packages/ggi/src/ggi.pp svneol=native#text/plain
packages/ggi/src/ggi2d.pp svneol=native#text/plain
packages/ggi/src/gii.pp svneol=native#text/plain
packages/gmp/Makefile svneol=native#text/plain
packages/gmp/Makefile.fpc svneol=native#text/plain
packages/gmp/examples/Makefile svneol=native#text/plain
packages/gmp/examples/Makefile.fpc svneol=native#text/plain
packages/gmp/examples/gmp_accept_test.pas svneol=native#text/plain
packages/gmp/examples/gmp_test_impl.inc svneol=native#text/plain
packages/gmp/examples/gmp_test_intf.inc svneol=native#text/plain
packages/gmp/examples/gmp_testcase.pas svneol=native#text/plain
packages/gmp/examples/pidigits_example.pas svneol=native#text/plain
packages/gmp/examples/pidigits_example2.pas svneol=native#text/plain
packages/gmp/examples/printf_example.pas svneol=native#text/plain
packages/gmp/examples/printf_example2.pas svneol=native#text/plain
packages/gmp/examples/scanf_example.pas svneol=native#text/plain
packages/gmp/examples/scanf_example2.pas svneol=native#text/plain
packages/gmp/readme svneol=native#text/plain
packages/gmp/src/gmp.pas svneol=native#text/plain
packages/gnome1/Makefile svneol=native#text/plain
packages/gnome1/Makefile.fpc svneol=native#text/plain
packages/gnome1/examples/gconfcallback1.pp svneol=native#text/plain

2803
packages/gmp/Makefile Normal file

File diff suppressed because it is too large Load Diff

32
packages/gmp/Makefile.fpc Normal file
View File

@ -0,0 +1,32 @@
#
# Makefile.fpc for Free Pascal ImLib 1.x Packages
#
[package]
name=gmp
version=2.5.1
[target]
units=gmp
exampledirs=examples
[require]
libc=y
[compiler]
includedir=src
sourcedir=src
[install]
fpcpackage=y
fpcsubdir=packages
[default]
fpcdir=../..
[shared]
build=n
[rules]
.NOTPARALLEL:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
#
# Makefile.fpc for Free Pascal GTK 2.x.y Examples
#
[target]
programs=gmp_accept_test gmp_testcase pidigits_example pidigits_example2 printf_example printf_example2 scanf_example scanf_example2
[require]
packages=gmp
[install]
fpcpackage=y
[default]
fpcdir=../../..
[rules]
.NOTPARALLEL:

View File

@ -0,0 +1,45 @@
program gmp_accept_test;
{$mode objfpc}{$H+}
uses
heaptrc, testutils, strutils, math, sysutils, gmp, classes;
type
TTestCase = class(TPersistent);
TTestCases = class of TTestCase;
{$include gmp_test_intf}
{$include gmp_test_impl}
procedure Run(Tests: array of TTestCases);
var
TestObj: TTestCase;
MethodList: TStringList;
TI, MI: integer;
Test: procedure of object;
begin
for TI := 0 to Length(Tests) - 1 do begin
TestObj := Tests[TI].Create;
MethodList := TStringList.Create;
try
TMethod(Test).Data := TestObj;
GetMethodList(TestObj, MethodList);
for MI := 0 to MethodList.Count - 1 do begin
TMethod(Test).Code := MethodList.Objects[MI];
Test;
end;
WriteLn(Format('%s: Tests executed: %d.', [TestObj.ClassName, MethodList.Count]));
finally
MethodList.Free;
TestObj.Free;
end;
end;
end;
begin
HaltOnNotReleased := True; // exit code wanted
Run([TTestGmpBinding, TTestGmpExtensions, TTestGmpOperators]);
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,674 @@
{ Note: This doesn't test GMP per se.
Not covered:
mp_printf
mp_scanf
mpz_array_init
errno
}
{$assertions on - keep this}
type
{ TTestGmpBinding }
TTestGmpBinding = class(TTestCase)
published
procedure mp_get_memory_functions_test;
procedure mp_set_memory_functions_test;
procedure mp_randinit_default_test;
procedure mp_randinit_mt_test;
procedure mp_randinit_lc_2exp_test;
procedure mp_randinit_lc_2exp_size_test;
procedure mp_randinit_set_test;
procedure mp_randclear_test;
procedure mp_randseed_test;
procedure mp_randseed_ui_test;
procedure mp_urandomb_ui_test;
procedure mp_urandomm_ui_test;
procedure mp_asprintf_test;
procedure mp_asprintf_test2;
procedure mp_snprintf_test;
procedure mp_snprintf_test2;
procedure mp_sprintf_test;
procedure mp_sprintf_test2;
procedure mp_sscanf_test;
procedure mp_sscanf_test2;
procedure mpz_init_test;
procedure mpz_clear_test;
procedure mpz_init2_test;
procedure mpz_init_set_si_test;
procedure mpz_init_set_ui_test;
procedure mpz_init_set_d_test;
procedure mpz_init_set_test;
procedure mpz_init_set_str_test;
procedure mpz_realloc_test;
procedure mpz_realloc2_test;
procedure mpz_getlimbn_test;
procedure mpz_export_test;
procedure mpz_import_test;
procedure mpz_swap_test;
procedure mpz_set_test;
procedure mpz_set_d_test;
procedure mpz_set_f_test;
procedure mpz_set_q_test;
procedure mpz_set_si_test;
procedure mpz_set_str_test;
procedure mpz_set_ui_test;
procedure mpz_get_d_test;
procedure mpz_get_d_2exp_test;
procedure mpz_get_si_test;
procedure mpz_get_str_test;
procedure mpz_get_ui_test;
procedure mpz_add_test;
procedure mpz_add_ui_test;
procedure mpz_sub_test;
procedure mpz_sub_ui_test;
procedure mpz_ui_sub_test;
procedure mpz_mul_test;
procedure mpz_mul_si_test;
procedure mpz_mul_ui_test;
procedure mpz_addmul_test;
procedure mpz_addmul_ui_test;
procedure mpz_submul_test;
procedure mpz_submul_ui_test;
procedure mpz_mul_2exp_test;
procedure mpz_neg_test;
procedure mpz_abs_test;
procedure mpz_cdiv_q_test;
procedure mpz_fdiv_q_test;
procedure mpz_tdiv_q_test;
procedure mpz_cdiv_q_2exp_test;
procedure mpz_fdiv_q_2exp_test;
procedure mpz_tdiv_q_2exp_test;
procedure mpz_cdiv_q_ui_test;
procedure mpz_fdiv_q_ui_test;
procedure mpz_tdiv_q_ui_test;
procedure mpz_cdiv_qr_test;
procedure mpz_fdiv_qr_test;
procedure mpz_tdiv_qr_test;
procedure mpz_cdiv_qr_ui_test;
procedure mpz_fdiv_qr_ui_test;
procedure mpz_tdiv_qr_ui_test;
procedure mpz_cdiv_r_test;
procedure mpz_fdiv_r_test;
procedure mpz_tdiv_r_test;
procedure mpz_cdiv_r_2exp_test;
procedure mpz_fdiv_r_2exp_test;
procedure mpz_tdiv_r_2exp_test;
procedure mpz_cdiv_r_ui_test;
procedure mpz_fdiv_r_ui_test;
procedure mpz_tdiv_r_ui_test;
procedure mpz_cdiv_ui_test;
procedure mpz_fdiv_ui_test;
procedure mpz_tdiv_ui_test;
procedure mpz_mod_test;
procedure mpz_divexact_test;
procedure mpz_divexact_ui_test;
procedure mpz_divisible_p_test;
procedure mpz_divisible_ui_p_test;
procedure mpz_divisible_2exp_p_test;
procedure mpz_congruent_p_test;
procedure mpz_congruent_2exp_p_test;
procedure mpz_congruent_ui_p_test;
procedure mpz_powm_test;
procedure mpz_powm_ui_test;
procedure mpz_pow_ui_test;
procedure mpz_ui_pow_ui_test;
procedure mpz_root_test;
procedure mpz_rootrem_test;
procedure mpz_sqrt_test;
procedure mpz_sqrtrem_test;
procedure mpz_perfect_power_p_test;
procedure mpz_perfect_square_p_test;
procedure mpz_probab_prime_p_test;
procedure mpz_nextprime_test;
procedure mpz_gcd_test;
procedure mpz_gcd_ui_test;
procedure mpz_gcdext_test;
procedure mpz_lcm_test;
procedure mpz_lcm_ui_test;
procedure mpz_invert_test;
procedure mpz_jacobi_test;
procedure mpz_kronecker_si_test;
procedure mpz_kronecker_ui_test;
procedure mpz_si_kronecker_test;
procedure mpz_ui_kronecker_test;
procedure mpz_remove_test;
procedure mpz_fac_ui_test;
procedure mpz_bin_ui_test;
procedure mpz_bin_uiui_test;
procedure mpz_fib_ui_test;
procedure mpz_fib2_ui_test;
procedure mpz_lucnum_ui_test;
procedure mpz_lucnum2_ui_test;
procedure mpz_cmp_test;
procedure mpz_cmp_d_test;
procedure mpz_cmp_si_test;
procedure mpz_cmp_ui_test;
procedure mpz_cmpabs_test;
procedure mpz_cmpabs_d_test;
procedure mpz_cmpabs_ui_test;
procedure mpz_and_test;
procedure mpz_ior_test;
procedure mpz_xor_test;
procedure mpz_com_test;
procedure mpz_popcount_test;
procedure mpz_hamdist_test;
procedure mpz_scan0_test;
procedure mpz_scan1_test;
procedure mpz_setbit_test;
procedure mpz_clrbit_test;
procedure mpz_combit_test;
procedure mpz_tstbit_test;
procedure mpz_urandomb_test;
procedure mpz_urandomm_test;
procedure mpz_rrandomb_test;
procedure mpz_fits_ushort_p_test;
procedure mpz_fits_sshort_p_test;
procedure mpz_fits_uint_p_test;
procedure mpz_fits_sint_p_test;
procedure mpz_fits_ulong_p_test;
procedure mpz_fits_slong_p_test;
procedure mpz_sizeinbase_test;
procedure mpz_size_test;
procedure mpq_init_test;
procedure mpq_clear_test;
procedure mpq_set_ui_test;
procedure mpq_set_si_test;
procedure mpq_canonicalize_test;
procedure mpq_set_test;
procedure mpq_setmpz_test;
procedure mpq_set_str_test;
procedure mpq_swap_test;
procedure mpq_get_d_test;
procedure mpq_set_d_test;
procedure mpq_set_f_test;
procedure mpq_get_str_test;
procedure mpq_add_test;
procedure mpq_sub_test;
procedure mpq_mul_test;
procedure mpq_mul_2exp_test;
procedure mpq_div_test;
procedure mpq_div_2exp_test;
procedure mpq_neg_test;
procedure mpq_abs_test;
procedure mpq_inv_test;
procedure mpq_cmp_test;
procedure mpq_cmp_si_test;
procedure mpq_cmp_ui_test;
procedure mpq_equal_test;
procedure mpq_get_num_test;
procedure mpq_get_den_test;
procedure mpq_set_num_test;
procedure mpq_set_den_test;
procedure mpf_get_default_prec_test;
procedure mpf_set_default_prec_test;
procedure mpf_init_test;
procedure mpf_init2_test;
procedure mpf_clear_test;
procedure mpf_get_prec_test;
procedure mpf_set_prec_test;
procedure mpf_set_prec_raw_test;
procedure mpf_set_q_test;
procedure mpf_set_ui_test;
procedure mpf_get_ui_test;
procedure mpf_set_si_test;
procedure mpf_get_si_test;
procedure mpf_set_test;
procedure mpf_set_str_test;
procedure mpf_swap_test;
procedure mpf_get_d_test;
procedure mpf_set_d_test;
procedure mpf_setmpz_test;
procedure mpf_get_d_2exp_test;
procedure mpf_get_str_test;
procedure mpf_add_test;
procedure mpf_add_ui_test;
procedure mpf_sub_test;
procedure mpf_sub_ui_test;
procedure mpf_ui_sub_test;
procedure mpf_mul_test;
procedure mpf_mul_ui_test;
procedure mpf_mul_2exp_test;
procedure mpf_div_test;
procedure mpf_div_ui_test;
procedure mpf_ui_div_test;
procedure mpf_div_2exp_test;
procedure mpf_sqrt_test;
procedure mpf_sqrt_ui_test;
procedure mpf_pow_ui_test;
procedure mpf_neg_test;
procedure mpf_abs_test;
procedure mpf_cmp_test;
procedure mpf_cmp_d_test;
procedure mpf_cmp_si_test;
procedure mpf_cmp_ui_test;
procedure mpf_eq_test;
procedure mpf_reldiff_test;
procedure mpf_ceil_test;
procedure mpf_floor_test;
procedure mpf_trunc_test;
procedure mpf_integer_p_test;
procedure mpf_fits_ushort_p_test;
procedure mpf_fits_sshort_p_test;
procedure mpf_fits_uint_p_test;
procedure mpf_fits_sint_p_test;
procedure mpf_fits_ulong_p_test;
procedure mpf_fits_slong_p_test;
procedure mpf_urandomb_test;
procedure mpf_random2_test;
procedure mpf_init_set_test;
procedure mpf_init_set_d_test;
procedure mpf_init_set_si_test;
procedure mpf_init_set_str_test;
procedure mpf_init_set_ui_test;
procedure mpn_add_n_test;
procedure mpn_add_1_test;
procedure mpn_add_test;
procedure mpn_sub_n_test;
procedure mpn_sub_1_test;
procedure mpn_sub_test;
procedure mpn_mul_n_test;
procedure mpn_mul_1_test;
procedure mpn_mul_test;
procedure mpn_addmul_1_test;
procedure mpn_submul_1_test;
procedure mpn_tdiv_qr_test;
procedure mpn_divrem_1_test;
procedure mpn_divexact_by3c_test;
procedure mpn_mod_1_test;
procedure mpn_lshift_test;
procedure mpn_rshift_test;
procedure mpn_cmp_test;
procedure mpn_gcd_test;
procedure mpn_gcd_1_test;
procedure mpn_gcdext_test;
procedure mpn_sqrtrem_test;
procedure mpn_get_str_test;
procedure mpn_set_str_test;
procedure mpn_scan0_test;
procedure mpn_scan1_test;
procedure mpn_popcount_test;
procedure mpn_hamdist_test;
procedure mpn_perfect_square_p_test;
procedure mpn_random_test;
procedure mpn_random2_test;
procedure bits_per_limb_test;
procedure version_test;
end;
{ TTestGmpExtensions }
TTestGmpExtensions = class(TTestCase)
published
procedure randinit_default_test;
procedure randinit_mt_test;
procedure randinit_lc_2exp_test;
procedure randinit_lc_2exp_size_test;
procedure randinit_set_test;
procedure randclear_test;
procedure randseed_test;
procedure randseed_ui_test;
procedure urandomb_ui_test;
procedure urandomm_ui_test;
procedure z_init_test;
procedure z_clear_test;
procedure z_init2_test;
procedure z_init_set_si_test;
procedure z_init_set_ui_test;
procedure z_init_set_d_test;
procedure z_init_set_test;
procedure z_init_set_str_test;
procedure z_realloc_test;
procedure z_realloc2_test;
procedure z_getlimbn_test;
procedure z_export_test;
procedure z_import_test;
procedure z_swap_test;
procedure z_set_test;
procedure z_set_d_test;
procedure z_set_f_test;
procedure z_set_q_test;
procedure z_set_si_test;
procedure z_set_str_test;
procedure z_set_ui_test;
procedure z_get_d_test;
procedure z_get_d_2exp_test;
procedure z_get_si_test;
procedure z_get_str_test;
procedure z_get_ui_test;
procedure z_add_test;
procedure z_add_ui_test;
procedure z_sub_test;
procedure z_sub_ui_test;
procedure z_ui_sub_test;
procedure z_mul_test;
procedure z_mul_si_test;
procedure z_mul_ui_test;
procedure z_addmul_test;
procedure z_addmul_ui_test;
procedure z_submul_test;
procedure z_submul_ui_test;
procedure z_mul_2exp_test;
procedure z_neg_test;
procedure z_abs_test;
procedure z_cdiv_q_test;
procedure z_fdiv_q_test;
procedure z_tdiv_q_test;
procedure z_cdiv_q_2exp_test;
procedure z_fdiv_q_2exp_test;
procedure z_tdiv_q_2exp_test;
procedure z_cdiv_q_ui_test;
procedure z_fdiv_q_ui_test;
procedure z_tdiv_q_ui_test;
procedure z_cdiv_qr_test;
procedure z_fdiv_qr_test;
procedure z_tdiv_qr_test;
procedure z_cdiv_qr_ui_test;
procedure z_fdiv_qr_ui_test;
procedure z_tdiv_qr_ui_test;
procedure z_cdiv_r_test;
procedure z_fdiv_r_test;
procedure z_tdiv_r_test;
procedure z_cdiv_r_2exp_test;
procedure z_fdiv_r_2exp_test;
procedure z_tdiv_r_2exp_test;
procedure z_cdiv_r_ui_test;
procedure z_fdiv_r_ui_test;
procedure z_tdiv_r_ui_test;
procedure z_cdiv_ui_test;
procedure z_fdiv_ui_test;
procedure z_tdiv_ui_test;
procedure z_mod_test;
procedure z_divexact_test;
procedure z_divexact_ui_test;
procedure z_divisible_p_test;
procedure z_divisible_ui_p_test;
procedure z_divisible_2exp_p_test;
procedure z_congruent_p_test;
procedure z_congruent_2exp_p_test;
procedure z_congruent_ui_p_test;
procedure z_powm_test;
procedure z_powm_ui_test;
procedure z_pow_ui_test;
procedure z_ui_pow_ui_test;
procedure z_root_test;
procedure z_rootrem_test;
procedure z_sqrt_test;
procedure z_sqrtrem_test;
procedure z_perfect_power_p_test;
procedure z_perfect_square_p_test;
procedure z_probab_prime_p_test;
procedure z_nextprime_test;
procedure z_gcd_test;
procedure z_gcd_ui_test;
procedure z_gcdext_test;
procedure z_lcm_test;
procedure z_lcm_ui_test;
procedure z_invert_test;
procedure z_jacobi_test;
procedure z_kronecker_si_test;
procedure z_kronecker_ui_test;
procedure z_si_kronecker_test;
procedure z_ui_kronecker_test;
procedure z_remove_test;
procedure z_fac_ui_test;
procedure z_bin_ui_test;
procedure z_bin_uiui_test;
procedure z_fib_ui_test;
procedure z_fib2_ui_test;
procedure z_lucnum_ui_test;
procedure z_lucnum2_ui_test;
procedure z_cmp_test;
procedure z_cmp_d_test;
procedure z_cmp_si_test;
procedure z_cmp_ui_test;
procedure z_cmpabs_test;
procedure z_cmpabs_d_test;
procedure z_cmpabs_ui_test;
procedure z_and_test;
procedure z_ior_test;
procedure z_xor_test;
procedure z_com_test;
procedure z_popcount_test;
procedure z_hamdist_test;
procedure z_scan0_test;
procedure z_scan1_test;
procedure z_setbit_test;
procedure z_clrbit_test;
procedure z_combit_test;
procedure z_tstbit_test;
procedure z_urandomb_test;
procedure z_urandomm_test;
procedure z_rrandomb_test;
procedure z_fits_ushort_p_test;
procedure z_fits_sshort_p_test;
procedure z_fits_uint_p_test;
procedure z_fits_sint_p_test;
procedure z_fits_ulong_p_test;
procedure z_fits_slong_p_test;
procedure z_sizeinbase_test;
procedure z_size_test;
procedure q_init_test;
procedure q_clear_test;
procedure q_set_ui_test;
procedure q_set_si_test;
procedure q_canonicalize_test;
procedure q_set_test;
procedure q_set_z_test;
procedure q_set_str_test;
procedure q_swap_test;
procedure q_get_d_test;
procedure q_set_d_test;
procedure q_set_f_test;
procedure q_get_str_test;
procedure q_add_test;
procedure q_sub_test;
procedure q_mul_test;
procedure q_mul_2exp_test;
procedure q_div_test;
procedure q_div_2exp_test;
procedure q_neg_test;
procedure q_abs_test;
procedure q_inv_test;
procedure q_cmp_test;
procedure q_cmp_si_test;
procedure q_cmp_ui_test;
procedure q_equal_test;
procedure q_get_num_test;
procedure q_get_den_test;
procedure q_set_num_test;
procedure q_set_den_test;
procedure f_get_default_prec_test;
procedure f_set_default_prec_test;
procedure f_init_test;
procedure f_init2_test;
procedure f_clear_test;
procedure f_get_prec_test;
procedure f_set_prec_test;
procedure f_set_prec_raw_test;
procedure f_set_q_test;
procedure f_set_ui_test;
procedure f_get_ui_test;
procedure f_set_si_test;
procedure f_get_si_test;
procedure f_set_test;
procedure f_set_str_test;
procedure f_swap_test;
procedure f_get_d_test;
procedure f_set_d_test;
procedure f_set_z_test;
procedure f_get_d_2exp_test;
procedure f_get_str_test;
procedure f_add_test;
procedure f_add_ui_test;
procedure f_sub_test;
procedure f_sub_ui_test;
procedure f_ui_sub_test;
procedure f_mul_test;
procedure f_mul_ui_test;
procedure f_mul_2exp_test;
procedure f_div_test;
procedure f_div_ui_test;
procedure f_ui_div_test;
procedure f_div_2exp_test;
procedure f_sqrt_test;
procedure f_sqrt_ui_test;
procedure f_pow_ui_test;
procedure f_neg_test;
procedure f_abs_test;
procedure f_cmp_test;
procedure f_cmp_d_test;
procedure f_cmp_si_test;
procedure f_cmp_ui_test;
procedure f_eq_test;
procedure f_reldiff_test;
procedure f_ceil_test;
procedure f_floor_test;
procedure f_trunc_test;
procedure f_integer_p_test;
procedure f_fits_ushort_p_test;
procedure f_fits_sshort_p_test;
procedure f_fits_uint_p_test;
procedure f_fits_sint_p_test;
procedure f_fits_ulong_p_test;
procedure f_fits_slong_p_test;
procedure f_urandomb_test;
procedure f_random2_test;
procedure f_init_set_test;
procedure f_init_set_d_test;
procedure f_init_set_si_test;
procedure f_init_set_str_test;
procedure f_init_set_ui_test;
end;
{ TTestGmpOperators }
TTestGmpOperators = class(TTestCase)
procedure star__MPFloat__MPFloat__MPFloat_;
procedure star__MPInteger__MPInteger__MPInteger_;
procedure star__MPRational__MPRational__MPRational_;
procedure pow__MPFloat_valuint_MPFloat_;
procedure pow__MPInteger_valuint_MPInteger_;
procedure plus__MPFloat__MPFloat__MPFloat_;
procedure plus__MPInteger__MPInteger__MPInteger_;
procedure plus__MPRational__MPRational__MPRational_;
procedure minus__MPFloat__MPFloat_;
procedure minus__MPInteger__MPInteger_;
procedure minus__MPRational__MPRational_;
procedure minus__MPFloat__MPFloat__MPFloat_;
procedure minus__MPInteger__MPInteger__MPInteger_;
procedure minus__MPRational__MPRational__MPRational_;
procedure slash__MPFloat__MPFloat__MPFloat_;
procedure slash__MPInteger__MPInteger__MPInteger_;
procedure slash__MPRational__MPRational__MPRational_;
procedure assign_double_MPFloat_;
procedure assign_double_MPInteger_;
procedure assign_double_MPRational_;
procedure assign__MPFloat_Cardinal;
procedure assign__MPFloat_double;
procedure assign__MPFloat_integer;
procedure assign__MPFloat_mpf_t;
procedure assign__MPFloat__MPInteger_;
procedure assign__MPFloat__MPRational_;
procedure assign__MPFloat_string;
procedure assign__MPFloat_valsint;
procedure assign__MPFloat_valuint;
procedure assign_mpf_t_MPFloat_;
procedure assign__MPInteger_cardinal;
procedure assign__MPInteger_double;
procedure assign__MPInteger_integer;
procedure assign__MPInteger__MPFloat_;
procedure assign__MPInteger__MPRational_;
procedure assign__MPInteger_mpz_t;
procedure assign__MPInteger_string;
procedure assign__MPInteger_valsint;
procedure assign__MPInteger_valuint;
procedure assign_mpq_t_MPRational_;
procedure assign__MPRandState_randstate_t;
procedure assign__MPRational_double;
procedure assign__MPRational__MPFloat_;
procedure assign__MPRational__MPInteger_;
procedure assign__MPRational_mpq_t;
procedure assign__MPRational_string;
procedure assign_mpz_t_MPInteger_;
procedure assign_randstate_t_MPRandState_;
procedure assign_string_MPFloat_;
procedure assign_string_MPInteger_;
procedure assign_string_MPRational_;
procedure assign_valsint_MPFloat_;
procedure assign_valsint_MPInteger_;
procedure assign_valsint_MPRational_;
procedure assign_valuint_MPFloat_;
procedure assign_valuint_MPInteger_;
procedure assign_valuint_MPRational_;
procedure lt__MPFloat__MPFloat_boolean;
procedure lt__MPInteger__MPInteger_boolean;
procedure lt__MPRational__MPRational_boolean;
procedure le__MPFloat__MPFloat_boolean;
procedure le__MPInteger__MPInteger_boolean;
procedure le__MPRational__MPRational_boolean;
procedure gt__MPFloat__MPFloat_boolean;
procedure gt__MPInteger__MPInteger_boolean;
procedure gt__MPRational__MPRational_boolean;
procedure ge__MPFloat__MPFloat_boolean;
procedure ge__MPInteger__MPInteger_boolean;
procedure ge__MPRational__MPRational_boolean;
end;

View File

@ -0,0 +1,23 @@
unit gmp_testcase;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpcunit, testregistry;
{$include gmp_test_intf}
implementation
uses
math, strutils, gmp;
{$include gmp_test_impl}
initialization
RegisterTests([TTestGmpBinding, TTestGmpExtensions, TTestGmpOperators]);
end.

View File

@ -0,0 +1,106 @@
{ The Computer Language Benchmarks Game
http://shootout.alioth.debian.org
contributed by Vincent Snijders
gmp headers by Karl-Michael Schindler
}
{$mode objfpc}
program pidigits_example;
uses
gmp;
procedure PrintPiDigits(NumDigits: integer);
var
q, r, s, t: mpz_t; // Transformation matrix components.
u, v, w: mpz_t; // Temporary variables
i, k, digit, c: integer;
line: string[10];
function Extract(x:cardinal): integer;
begin
mpz_mul_ui(u, q, x);
mpz_add(u, u, r);
mpz_mul_ui(v, s, x);
mpz_add(v, v, t);
mpz_tdiv_q(w, u, v);
result := mpz_get_ui(w);
end;
function IsSafe: boolean;
begin
result := digit = Extract(4);
end;
procedure Produce;
begin
mpz_mul_si(r, r, 10);
mpz_mul_si(v, t, -10 * digit);
mpz_add(r, r, v);
mpz_mul_si(q, q, 10);
end;
procedure Consume;
begin
inc(k);
mpz_mul_si(r, r, 2*k+1);
mpz_mul_si(u, q, 4*k+2);
mpz_add(r, r, u);
mpz_mul_si(t, t, 2*k+1);
mpz_mul_si(v, s, 4*k+2);
mpz_add(t, t, v);
mpz_mul_si(s, s, k);
mpz_mul_si(q, q, k);
end;
begin
k := 0;
i := 0;
c := 0;
setlength(line, 10);
mpz_init_set_ui(q, 1);
mpz_init_set_ui(r, 0);
mpz_init_set_ui(s, 0);
mpz_init_set_ui(t, 1);
mpz_init(u);
mpz_init(v);
mpz_init(w);
while (i < NumDigits) do begin
digit := Extract(3);
while not IsSafe do begin
Consume;
digit:= Extract(3);
end;
Produce;
inc(c);
line[c] := chr(ord('0') + digit);
inc(i);
if c = 10 then begin
writeln(line, #9':', i);
c := 0;
end;
end;
if c <> 0 then begin
SetLength(line, c);
writeln(line);
end;
mpz_clear(q);
mpz_clear(r);
mpz_clear(s);
mpz_clear(t);
mpz_clear(u);
mpz_clear(v);
mpz_clear(w);
end;
var
n: integer = 27;
begin
if (ParamCount = 1) then
val(ParamStr(1), n);
PrintPiDigits(n);
end.

View File

@ -0,0 +1,84 @@
{ The Computer Language Benchmarks Game
http://shootout.alioth.debian.org
contributed by Vincent Snijders
gmp headers by Karl-Michael Schindler
}
{$mode objfpc}
program pidigits_example2;
uses
gmp;
procedure PrintPiDigits(NumDigits: integer);
var
q, r, s, t: MPInteger; // Transformation matrix components.
i, k, digit, c: integer;
line: string[10];
function Extract(x: cardinal): integer;
begin
result := (q * x + r) / (s * x + t);
end;
function IsSafe: boolean;
begin
result := digit = Extract(4);
end;
procedure Produce;
begin
r := 10 * (r - t * digit);
q *= 10;
end;
procedure Consume;
begin
inc(k);
r := r * (2 * k + 1) + q * (4 * k + 2);
t := t * (2 * k + 1) + s * (4 * k + 2);
s *= k;
q *= k;
end;
begin
k := 0;
i := 0;
c := 0;
setlength(line, 10);
q := 1;
r := 0;
s := 0;
t := 1;
while (i < NumDigits) do begin
digit := Extract(3);
while not IsSafe do begin
Consume;
digit := Extract(3);
end;
Produce;
inc(c);
line[c] := chr(ord('0') + digit);
inc(i);
if c = 10 then begin
writeln(line, #9':', i);
c := 0;
end;
end;
if c <> 0 then begin
SetLength(line, c);
writeln(line);
end;
end;
var
n: integer = 27;
begin
if (ParamCount = 1) then
val(ParamStr(1), n);
PrintPiDigits(n);
end.

View File

@ -0,0 +1,27 @@
program printf_example;
{$mode objfpc}{$H+}
uses
math, gmp;
const
N = 2;
NBITS = 100;
var
f: mpf_t;
bits, digits: integer;
begin
mpf_init2(f, NBITS);
bits := mpf_get_prec(f);
digits := floor(bits * LOG_10_2);
mpf_sqrt_ui(f, N);
mp_printf('Sqrt(%d) to %d digits (%d bits) = %.*Fg'#10, N, digits, bits, digits, @f);
mpf_pow_ui(f, f, 2);
mp_printf('Squared back = %.*Fg'#10, digits, @f);
mpf_sub_ui(f, f, N);
mp_printf('Minus %d = %.*Fg'#10, N, digits, @f);
mpf_clear(f);
end.

View File

@ -0,0 +1,26 @@
program printf_example2;
{$mode objfpc}{$H+}
uses
sysutils, math, gmp;
const
N = 2;
NBITS = 100;
var
f: mpfloat;
bits, digits: integer;
begin
f_set_default_prec(NBITS);
bits := f_get_default_prec;
digits := floor(bits * LOG_10_2);
f := f_sqrt_ui(N);
writeln(format('Sqrt(%d) to %d digits (%d bits) = %s', [N, digits, bits, string(f)]));
f := f ** 2;
writeln(format('Squared back = %s', [string(f)]));
f -= N;
writeln(format('Minus %d = %s', [N, string(f)]));
end.

View File

@ -0,0 +1,22 @@
program scanf_example;
{$mode objfpc}{$H+}
uses
gmp;
var n, sqr: mpz_t;
begin
mpz_init(n);
mpz_init(sqr);
write('Please enter an integer of any length: ');
if mp_scanf('%Zd', @n) = 1 then begin
mpz_pow_ui(sqr, n, 2);
mp_printf('%Zd^2 = %Zd'#10, @n, @sqr);
end else
writeln('Failed to parse an integer from your input');
mpz_clear(sqr);
mpz_clear(n);
end.

View File

@ -0,0 +1,21 @@
program scanf_example2;
{$mode objfpc}{$H+}
uses
sysutils, gmp;
var
n, sqr: MPInteger;
s: string;
begin
write('Please enter an integer of any length: ');
readln(s);
z_init(n);
if mp_sscanf(pchar(s), '%Zd', n.ptr) = 1 then begin
sqr := n ** 2;
writeln(format('%s^2 = %s', [string(n), string(sqr)]));
end else
writeln('Failed to parse an integer from your input');
end.

83
packages/gmp/readme Normal file
View File

@ -0,0 +1,83 @@
Readme for libgmp.tar.bz2 2009-09-06
= What
Free Pascal interface for the GNU Multiple Precision Arithmetic Library.
= Why
Numeric computing outside the built in types range. AFAIK there is no complete
binding for Free Pascal available yet.
= Files
- gmp_accept_test.pas
"Go/no go" test of the gmp unit against the GMP library on your system.
- gmp.pas
The interface unit.
- gmp_testcase.pas
Put this unit in your uses clause of a fpcunit project.
- gmp_test_impl.inc
- gmp_test_intf.inc
Test classes declarations and implementations. Included by:
* gmp_accept_test.pas
* gmp_testcase
- pidigits_example.pas
Original source from:
shootout.alioth.debian.org/u64/benchmark.php?test=pidigits&lang=fpascal&id=2
Adapted for using the gmp unit.
- pidigits_example2.pas
Modified pidigits_example.pas to demonstrate usage of the gmp extensions.
- printf_example.pas
Demo using the GMP printf
- printf_example2.pas
Dtto with gmp extensions.
- scanf_example.pas
Demo using the GMP scanf.
- scanf_example2.pas
Dtto with gmp extensions.
= Status
- Tested on 64 and 32 bit Linux and on 32 bit Windows.
- Known issues
* There is a link error on Windows with the GMP global variables.
Probably could be solved with someone's better knowledge of the Windows
environment.
= Bindings
- Standard
* Almost full (see comments in gmp.pas) binding of the types and functions
exported from libgmp.
- Extensions
* Based on pseudo value types (in fact interface types) with an automatic
memory management in the spirit of Object Pascal strings - compiler takes
care of initialization/finalization. Copy on write semantics. Can intermix
the standard binding/types with the extended ones. The extended types have
access to a same set of numeric functions as in the standard binding.
- Operators
* Overloaded operators for the extensions value types. Can make programs
significantly more readable/maintainable. See and compare for yourself
in the pidigits examples. BTW, the overhead in this example with
the extended types and operators is less than 10%. Unusable for shootout,
but is probably acceptable in many other areas.
= Tips
- range checks
You should probably want to put asserts with *_fits before conversion to
FPC ordinal types - applies to the assignment operator too.
= License
- FPC developers, you can do anything you see appropriate with the sources.
Review, refactor and/or reject :-)

3819
packages/gmp/src/gmp.pas Normal file

File diff suppressed because it is too large Load Diff