mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 07:09:29 +02:00
* GMP initial version.
git-svn-id: trunk@13667 -
This commit is contained in:
parent
1f6b55290e
commit
da9458587d
16
.gitattributes
vendored
16
.gitattributes
vendored
@ -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
2803
packages/gmp/Makefile
Normal file
File diff suppressed because it is too large
Load Diff
32
packages/gmp/Makefile.fpc
Normal file
32
packages/gmp/Makefile.fpc
Normal 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:
|
2045
packages/gmp/examples/Makefile
Normal file
2045
packages/gmp/examples/Makefile
Normal file
File diff suppressed because it is too large
Load Diff
21
packages/gmp/examples/Makefile.fpc
Normal file
21
packages/gmp/examples/Makefile.fpc
Normal 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:
|
||||
|
||||
|
||||
|
45
packages/gmp/examples/gmp_accept_test.pas
Normal file
45
packages/gmp/examples/gmp_accept_test.pas
Normal 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.
|
||||
|
7848
packages/gmp/examples/gmp_test_impl.inc
Normal file
7848
packages/gmp/examples/gmp_test_impl.inc
Normal file
File diff suppressed because it is too large
Load Diff
674
packages/gmp/examples/gmp_test_intf.inc
Normal file
674
packages/gmp/examples/gmp_test_intf.inc
Normal 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;
|
||||
|
23
packages/gmp/examples/gmp_testcase.pas
Normal file
23
packages/gmp/examples/gmp_testcase.pas
Normal 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.
|
||||
|
106
packages/gmp/examples/pidigits_example.pas
Normal file
106
packages/gmp/examples/pidigits_example.pas
Normal 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.
|
||||
|
84
packages/gmp/examples/pidigits_example2.pas
Normal file
84
packages/gmp/examples/pidigits_example2.pas
Normal 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.
|
||||
|
27
packages/gmp/examples/printf_example.pas
Normal file
27
packages/gmp/examples/printf_example.pas
Normal 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.
|
||||
|
26
packages/gmp/examples/printf_example2.pas
Normal file
26
packages/gmp/examples/printf_example2.pas
Normal 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.
|
||||
|
22
packages/gmp/examples/scanf_example.pas
Normal file
22
packages/gmp/examples/scanf_example.pas
Normal 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.
|
||||
|
21
packages/gmp/examples/scanf_example2.pas
Normal file
21
packages/gmp/examples/scanf_example2.pas
Normal 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
83
packages/gmp/readme
Normal 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
3819
packages/gmp/src/gmp.pas
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user