aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-06-24 02:23:02 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-06-24 02:23:02 +0200
commit88394eae61a017d2b56c91e4658d0bcd9a65eb2e (patch)
tree0116137f75d44c168461020d91081972e281e769
parent0384a21f7b796299f5eba3c86a4354ee0fa46a5e (diff)
Begin adding infrastructure for testing
-rw-r--r--.gitignore282
-rw-r--r--make.c91
-rw-r--r--src/alloc.h8
-rw-r--r--src/arena.c8
-rw-r--r--test/arena.c135
-rw-r--r--test/test-internal.h20
6 files changed, 390 insertions, 154 deletions
diff --git a/.gitignore b/.gitignore
index 2372b5b..d0d83ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,14 +8,18 @@ oryx
*.gen.c
*.o
+# Test files. Autogenerated with the following:
+#
+# ./make; find test -type f -executable
+#
+test/arena
+
# Compilation artifacts of GNU MP. Autogenerated with the following:
#
# git status --porcelain \
# | sed -n '/^?? vendor/s/?? //p' \
# >vendor/gmp-6.3.0/.gitignore
#
-vendor/gmp-6.3.0/.libs/
-vendor/gmp-6.3.0/Makefile
vendor/gmp-6.3.0/assert.lo
vendor/gmp-6.3.0/compat.lo
vendor/gmp-6.3.0/config.h
@@ -23,10 +27,10 @@ vendor/gmp-6.3.0/config.log
vendor/gmp-6.3.0/config.m4
vendor/gmp-6.3.0/config.status
vendor/gmp-6.3.0/cxx/Makefile
-vendor/gmp-6.3.0/demos/Makefile
-vendor/gmp-6.3.0/demos/calc/Makefile
vendor/gmp-6.3.0/demos/calc/calc-config.h
+vendor/gmp-6.3.0/demos/calc/Makefile
vendor/gmp-6.3.0/demos/expr/Makefile
+vendor/gmp-6.3.0/demos/Makefile
vendor/gmp-6.3.0/demos/pexpr-config.h
vendor/gmp-6.3.0/doc/Makefile
vendor/gmp-6.3.0/errno.lo
@@ -40,36 +44,33 @@ vendor/gmp-6.3.0/gen-jacobitab
vendor/gmp-6.3.0/gen-psqr
vendor/gmp-6.3.0/gen-sieve
vendor/gmp-6.3.0/gen-trialdivtab
-vendor/gmp-6.3.0/gmp-mparam.h
vendor/gmp-6.3.0/gmp.h
+vendor/gmp-6.3.0/gmp-mparam.h
vendor/gmp-6.3.0/gmp.pc
vendor/gmp-6.3.0/gmpxx.pc
vendor/gmp-6.3.0/invalid.lo
vendor/gmp-6.3.0/libgmp.la
+vendor/gmp-6.3.0/.libs/
vendor/gmp-6.3.0/libtool
+vendor/gmp-6.3.0/Makefile
vendor/gmp-6.3.0/memory.lo
vendor/gmp-6.3.0/mp_bases.h
vendor/gmp-6.3.0/mp_bpl.lo
vendor/gmp-6.3.0/mp_clz_tab.lo
vendor/gmp-6.3.0/mp_dv_tab.lo
-vendor/gmp-6.3.0/mp_get_fns.lo
-vendor/gmp-6.3.0/mp_minv_tab.lo
-vendor/gmp-6.3.0/mp_set_fns.lo
-vendor/gmp-6.3.0/mpf/.libs/
-vendor/gmp-6.3.0/mpf/Makefile
vendor/gmp-6.3.0/mpf/abs.lo
vendor/gmp-6.3.0/mpf/add.lo
vendor/gmp-6.3.0/mpf/add_ui.lo
vendor/gmp-6.3.0/mpf/ceilfloor.lo
vendor/gmp-6.3.0/mpf/clear.lo
vendor/gmp-6.3.0/mpf/clears.lo
-vendor/gmp-6.3.0/mpf/cmp.lo
vendor/gmp-6.3.0/mpf/cmp_d.lo
+vendor/gmp-6.3.0/mpf/cmp.lo
vendor/gmp-6.3.0/mpf/cmp_si.lo
vendor/gmp-6.3.0/mpf/cmp_ui.lo
vendor/gmp-6.3.0/mpf/cmp_z.lo
-vendor/gmp-6.3.0/mpf/div.lo
vendor/gmp-6.3.0/mpf/div_2exp.lo
+vendor/gmp-6.3.0/mpf/div.lo
vendor/gmp-6.3.0/mpf/div_ui.lo
vendor/gmp-6.3.0/mpf/dump.lo
vendor/gmp-6.3.0/mpf/eq.lo
@@ -79,35 +80,37 @@ vendor/gmp-6.3.0/mpf/fits_sshort.lo
vendor/gmp-6.3.0/mpf/fits_uint.lo
vendor/gmp-6.3.0/mpf/fits_ulong.lo
vendor/gmp-6.3.0/mpf/fits_ushort.lo
-vendor/gmp-6.3.0/mpf/get_d.lo
vendor/gmp-6.3.0/mpf/get_d_2exp.lo
vendor/gmp-6.3.0/mpf/get_dfl_prec.lo
+vendor/gmp-6.3.0/mpf/get_d.lo
vendor/gmp-6.3.0/mpf/get_prc.lo
vendor/gmp-6.3.0/mpf/get_si.lo
vendor/gmp-6.3.0/mpf/get_str.lo
vendor/gmp-6.3.0/mpf/get_ui.lo
-vendor/gmp-6.3.0/mpf/init.lo
vendor/gmp-6.3.0/mpf/init2.lo
+vendor/gmp-6.3.0/mpf/init.lo
vendor/gmp-6.3.0/mpf/inits.lo
vendor/gmp-6.3.0/mpf/inp_str.lo
vendor/gmp-6.3.0/mpf/int_p.lo
-vendor/gmp-6.3.0/mpf/iset.lo
vendor/gmp-6.3.0/mpf/iset_d.lo
+vendor/gmp-6.3.0/mpf/iset.lo
vendor/gmp-6.3.0/mpf/iset_si.lo
vendor/gmp-6.3.0/mpf/iset_str.lo
vendor/gmp-6.3.0/mpf/iset_ui.lo
vendor/gmp-6.3.0/mpf/libmpf.la
-vendor/gmp-6.3.0/mpf/mul.lo
+vendor/gmp-6.3.0/mpf/.libs/
+vendor/gmp-6.3.0/mpf/Makefile
vendor/gmp-6.3.0/mpf/mul_2exp.lo
+vendor/gmp-6.3.0/mpf/mul.lo
vendor/gmp-6.3.0/mpf/mul_ui.lo
vendor/gmp-6.3.0/mpf/neg.lo
vendor/gmp-6.3.0/mpf/out_str.lo
vendor/gmp-6.3.0/mpf/pow_ui.lo
vendor/gmp-6.3.0/mpf/random2.lo
vendor/gmp-6.3.0/mpf/reldiff.lo
-vendor/gmp-6.3.0/mpf/set.lo
-vendor/gmp-6.3.0/mpf/set_d.lo
vendor/gmp-6.3.0/mpf/set_dfl_prec.lo
+vendor/gmp-6.3.0/mpf/set_d.lo
+vendor/gmp-6.3.0/mpf/set.lo
vendor/gmp-6.3.0/mpf/set_prc.lo
vendor/gmp-6.3.0/mpf/set_prc_raw.lo
vendor/gmp-6.3.0/mpf/set_q.lo
@@ -125,22 +128,18 @@ vendor/gmp-6.3.0/mpf/trunc.lo
vendor/gmp-6.3.0/mpf/ui_div.lo
vendor/gmp-6.3.0/mpf/ui_sub.lo
vendor/gmp-6.3.0/mpf/urandomb.lo
-vendor/gmp-6.3.0/mpn/.libs/
-vendor/gmp-6.3.0/mpn/Makefile
-vendor/gmp-6.3.0/mpn/add.c
-vendor/gmp-6.3.0/mpn/add.lo
+vendor/gmp-6.3.0/mp_get_fns.lo
+vendor/gmp-6.3.0/mp_minv_tab.lo
vendor/gmp-6.3.0/mpn/add_1.c
vendor/gmp-6.3.0/mpn/add_1.lo
+vendor/gmp-6.3.0/mpn/add.c
vendor/gmp-6.3.0/mpn/add_err1_n.asm
vendor/gmp-6.3.0/mpn/add_err1_n.lo
vendor/gmp-6.3.0/mpn/add_err2_n.asm
vendor/gmp-6.3.0/mpn/add_err2_n.lo
vendor/gmp-6.3.0/mpn/add_err3_n.asm
vendor/gmp-6.3.0/mpn/add_err3_n.lo
-vendor/gmp-6.3.0/mpn/add_n.asm
-vendor/gmp-6.3.0/mpn/add_n.lo
-vendor/gmp-6.3.0/mpn/add_n_sub_n.c
-vendor/gmp-6.3.0/mpn/add_n_sub_n.lo
+vendor/gmp-6.3.0/mpn/add.lo
vendor/gmp-6.3.0/mpn/addlsh1_n.asm
vendor/gmp-6.3.0/mpn/addlsh1_n.lo
vendor/gmp-6.3.0/mpn/addlsh2_n.asm
@@ -151,28 +150,32 @@ vendor/gmp-6.3.0/mpn/addmul_1.asm
vendor/gmp-6.3.0/mpn/addmul_1.lo
vendor/gmp-6.3.0/mpn/addmul_2.asm
vendor/gmp-6.3.0/mpn/addmul_2.lo
+vendor/gmp-6.3.0/mpn/add_n.asm
+vendor/gmp-6.3.0/mpn/add_n.lo
+vendor/gmp-6.3.0/mpn/add_n_sub_n.c
+vendor/gmp-6.3.0/mpn/add_n_sub_n.lo
vendor/gmp-6.3.0/mpn/and_n.asm
vendor/gmp-6.3.0/mpn/and_n.lo
vendor/gmp-6.3.0/mpn/andn_n.asm
vendor/gmp-6.3.0/mpn/andn_n.lo
vendor/gmp-6.3.0/mpn/bdiv_dbm1c.asm
vendor/gmp-6.3.0/mpn/bdiv_dbm1c.lo
-vendor/gmp-6.3.0/mpn/bdiv_q.c
-vendor/gmp-6.3.0/mpn/bdiv_q.lo
vendor/gmp-6.3.0/mpn/bdiv_q_1.asm
vendor/gmp-6.3.0/mpn/bdiv_q_1.lo
+vendor/gmp-6.3.0/mpn/bdiv_q.c
+vendor/gmp-6.3.0/mpn/bdiv_q.lo
vendor/gmp-6.3.0/mpn/bdiv_qr.c
vendor/gmp-6.3.0/mpn/bdiv_qr.lo
vendor/gmp-6.3.0/mpn/binvert.c
vendor/gmp-6.3.0/mpn/binvert.lo
vendor/gmp-6.3.0/mpn/broot.c
-vendor/gmp-6.3.0/mpn/broot.lo
vendor/gmp-6.3.0/mpn/brootinv.c
vendor/gmp-6.3.0/mpn/brootinv.lo
+vendor/gmp-6.3.0/mpn/broot.lo
vendor/gmp-6.3.0/mpn/bsqrt.c
-vendor/gmp-6.3.0/mpn/bsqrt.lo
vendor/gmp-6.3.0/mpn/bsqrtinv.c
vendor/gmp-6.3.0/mpn/bsqrtinv.lo
+vendor/gmp-6.3.0/mpn/bsqrt.lo
vendor/gmp-6.3.0/mpn/cmp.c
vendor/gmp-6.3.0/mpn/cmp.lo
vendor/gmp-6.3.0/mpn/cnd_add_n.asm
@@ -182,9 +185,9 @@ vendor/gmp-6.3.0/mpn/cnd_sub_n.lo
vendor/gmp-6.3.0/mpn/cnd_swap.c
vendor/gmp-6.3.0/mpn/cnd_swap.lo
vendor/gmp-6.3.0/mpn/com.asm
-vendor/gmp-6.3.0/mpn/com.lo
vendor/gmp-6.3.0/mpn/comb_tables.c
vendor/gmp-6.3.0/mpn/comb_tables.lo
+vendor/gmp-6.3.0/mpn/com.lo
vendor/gmp-6.3.0/mpn/compute_powtab.c
vendor/gmp-6.3.0/mpn/compute_powtab.lo
vendor/gmp-6.3.0/mpn/copyd.asm
@@ -195,12 +198,20 @@ vendor/gmp-6.3.0/mpn/dcpi1_bdiv_q.c
vendor/gmp-6.3.0/mpn/dcpi1_bdiv_q.lo
vendor/gmp-6.3.0/mpn/dcpi1_bdiv_qr.c
vendor/gmp-6.3.0/mpn/dcpi1_bdiv_qr.lo
+vendor/gmp-6.3.0/mpn/dcpi1_divappr_q.c
+vendor/gmp-6.3.0/mpn/dcpi1_divappr_q.lo
vendor/gmp-6.3.0/mpn/dcpi1_div_q.c
vendor/gmp-6.3.0/mpn/dcpi1_div_q.lo
vendor/gmp-6.3.0/mpn/dcpi1_div_qr.c
vendor/gmp-6.3.0/mpn/dcpi1_div_qr.lo
-vendor/gmp-6.3.0/mpn/dcpi1_divappr_q.c
-vendor/gmp-6.3.0/mpn/dcpi1_divappr_q.lo
+vendor/gmp-6.3.0/mpn/dive_1.asm
+vendor/gmp-6.3.0/mpn/dive_1.lo
+vendor/gmp-6.3.0/mpn/diveby3.c
+vendor/gmp-6.3.0/mpn/diveby3.lo
+vendor/gmp-6.3.0/mpn/divexact.c
+vendor/gmp-6.3.0/mpn/divexact.lo
+vendor/gmp-6.3.0/mpn/divis.c
+vendor/gmp-6.3.0/mpn/divis.lo
vendor/gmp-6.3.0/mpn/div_q.c
vendor/gmp-6.3.0/mpn/div_q.lo
vendor/gmp-6.3.0/mpn/div_qr_1.c
@@ -213,96 +224,88 @@ vendor/gmp-6.3.0/mpn/div_qr_2n_pi1.asm
vendor/gmp-6.3.0/mpn/div_qr_2n_pi1.lo
vendor/gmp-6.3.0/mpn/div_qr_2u_pi1.asm
vendor/gmp-6.3.0/mpn/div_qr_2u_pi1.lo
-vendor/gmp-6.3.0/mpn/dive_1.asm
-vendor/gmp-6.3.0/mpn/dive_1.lo
-vendor/gmp-6.3.0/mpn/diveby3.c
-vendor/gmp-6.3.0/mpn/diveby3.lo
-vendor/gmp-6.3.0/mpn/divexact.c
-vendor/gmp-6.3.0/mpn/divexact.lo
-vendor/gmp-6.3.0/mpn/divis.c
-vendor/gmp-6.3.0/mpn/divis.lo
-vendor/gmp-6.3.0/mpn/divrem.c
-vendor/gmp-6.3.0/mpn/divrem.lo
vendor/gmp-6.3.0/mpn/divrem_1.asm
vendor/gmp-6.3.0/mpn/divrem_1.lo
vendor/gmp-6.3.0/mpn/divrem_2.asm
vendor/gmp-6.3.0/mpn/divrem_2.lo
+vendor/gmp-6.3.0/mpn/divrem.c
+vendor/gmp-6.3.0/mpn/divrem.lo
vendor/gmp-6.3.0/mpn/dump.c
vendor/gmp-6.3.0/mpn/dump.lo
-vendor/gmp-6.3.0/mpn/fib2_ui.c
-vendor/gmp-6.3.0/mpn/fib2_ui.lo
vendor/gmp-6.3.0/mpn/fib2m.c
vendor/gmp-6.3.0/mpn/fib2m.lo
+vendor/gmp-6.3.0/mpn/fib2_ui.c
+vendor/gmp-6.3.0/mpn/fib2_ui.lo
vendor/gmp-6.3.0/mpn/fib_table.c
vendor/gmp-6.3.0/mpn/fib_table.lo
-vendor/gmp-6.3.0/mpn/gcd.c
-vendor/gmp-6.3.0/mpn/gcd.lo
-vendor/gmp-6.3.0/mpn/gcd_1.c
-vendor/gmp-6.3.0/mpn/gcd_1.lo
vendor/gmp-6.3.0/mpn/gcd_11.asm
vendor/gmp-6.3.0/mpn/gcd_11.lo
+vendor/gmp-6.3.0/mpn/gcd_1.c
+vendor/gmp-6.3.0/mpn/gcd_1.lo
vendor/gmp-6.3.0/mpn/gcd_22.asm
vendor/gmp-6.3.0/mpn/gcd_22.lo
-vendor/gmp-6.3.0/mpn/gcd_subdiv_step.c
-vendor/gmp-6.3.0/mpn/gcd_subdiv_step.lo
-vendor/gmp-6.3.0/mpn/gcdext.c
-vendor/gmp-6.3.0/mpn/gcdext.lo
+vendor/gmp-6.3.0/mpn/gcd.c
vendor/gmp-6.3.0/mpn/gcdext_1.c
vendor/gmp-6.3.0/mpn/gcdext_1.lo
+vendor/gmp-6.3.0/mpn/gcdext.c
vendor/gmp-6.3.0/mpn/gcdext_lehmer.c
vendor/gmp-6.3.0/mpn/gcdext_lehmer.lo
+vendor/gmp-6.3.0/mpn/gcdext.lo
+vendor/gmp-6.3.0/mpn/gcd.lo
+vendor/gmp-6.3.0/mpn/gcd_subdiv_step.c
+vendor/gmp-6.3.0/mpn/gcd_subdiv_step.lo
vendor/gmp-6.3.0/mpn/get_d.c
vendor/gmp-6.3.0/mpn/get_d.lo
vendor/gmp-6.3.0/mpn/get_str.c
vendor/gmp-6.3.0/mpn/get_str.lo
vendor/gmp-6.3.0/mpn/hamdist.asm
vendor/gmp-6.3.0/mpn/hamdist.lo
-vendor/gmp-6.3.0/mpn/hgcd.c
-vendor/gmp-6.3.0/mpn/hgcd.lo
vendor/gmp-6.3.0/mpn/hgcd2.c
-vendor/gmp-6.3.0/mpn/hgcd2.lo
vendor/gmp-6.3.0/mpn/hgcd2_jacobi.c
vendor/gmp-6.3.0/mpn/hgcd2_jacobi.lo
+vendor/gmp-6.3.0/mpn/hgcd2.lo
vendor/gmp-6.3.0/mpn/hgcd_appr.c
vendor/gmp-6.3.0/mpn/hgcd_appr.lo
+vendor/gmp-6.3.0/mpn/hgcd.c
vendor/gmp-6.3.0/mpn/hgcd_jacobi.c
vendor/gmp-6.3.0/mpn/hgcd_jacobi.lo
+vendor/gmp-6.3.0/mpn/hgcd.lo
vendor/gmp-6.3.0/mpn/hgcd_matrix.c
vendor/gmp-6.3.0/mpn/hgcd_matrix.lo
vendor/gmp-6.3.0/mpn/hgcd_reduce.c
vendor/gmp-6.3.0/mpn/hgcd_reduce.lo
vendor/gmp-6.3.0/mpn/hgcd_step.c
vendor/gmp-6.3.0/mpn/hgcd_step.lo
+vendor/gmp-6.3.0/mpn/invertappr.c
+vendor/gmp-6.3.0/mpn/invertappr.lo
vendor/gmp-6.3.0/mpn/invert.c
-vendor/gmp-6.3.0/mpn/invert.lo
vendor/gmp-6.3.0/mpn/invert_limb.asm
vendor/gmp-6.3.0/mpn/invert_limb.lo
vendor/gmp-6.3.0/mpn/invert_limb_table.asm
vendor/gmp-6.3.0/mpn/invert_limb_table.lo
-vendor/gmp-6.3.0/mpn/invertappr.c
-vendor/gmp-6.3.0/mpn/invertappr.lo
+vendor/gmp-6.3.0/mpn/invert.lo
vendor/gmp-6.3.0/mpn/ior_n.asm
vendor/gmp-6.3.0/mpn/ior_n.lo
vendor/gmp-6.3.0/mpn/iorn_n.asm
vendor/gmp-6.3.0/mpn/iorn_n.lo
vendor/gmp-6.3.0/mpn/jacbase.c
vendor/gmp-6.3.0/mpn/jacbase.lo
-vendor/gmp-6.3.0/mpn/jacobi.c
-vendor/gmp-6.3.0/mpn/jacobi.lo
vendor/gmp-6.3.0/mpn/jacobi_2.c
vendor/gmp-6.3.0/mpn/jacobi_2.lo
+vendor/gmp-6.3.0/mpn/jacobi.c
+vendor/gmp-6.3.0/mpn/jacobi.lo
vendor/gmp-6.3.0/mpn/jacobitab.h
vendor/gmp-6.3.0/mpn/libmpn.la
+vendor/gmp-6.3.0/mpn/.libs/
vendor/gmp-6.3.0/mpn/lshift.asm
-vendor/gmp-6.3.0/mpn/lshift.lo
vendor/gmp-6.3.0/mpn/lshiftc.asm
vendor/gmp-6.3.0/mpn/lshiftc.lo
-vendor/gmp-6.3.0/mpn/matrix22_mul.c
-vendor/gmp-6.3.0/mpn/matrix22_mul.lo
+vendor/gmp-6.3.0/mpn/lshift.lo
+vendor/gmp-6.3.0/mpn/Makefile
vendor/gmp-6.3.0/mpn/matrix22_mul1_inverse_vector.c
vendor/gmp-6.3.0/mpn/matrix22_mul1_inverse_vector.lo
-vendor/gmp-6.3.0/mpn/mod_1.c
-vendor/gmp-6.3.0/mpn/mod_1.lo
+vendor/gmp-6.3.0/mpn/matrix22_mul.c
+vendor/gmp-6.3.0/mpn/matrix22_mul.lo
vendor/gmp-6.3.0/mpn/mod_1_1.asm
vendor/gmp-6.3.0/mpn/mod_1_1.lo
vendor/gmp-6.3.0/mpn/mod_1_2.asm
@@ -311,6 +314,8 @@ vendor/gmp-6.3.0/mpn/mod_1_3.c
vendor/gmp-6.3.0/mpn/mod_1_3.lo
vendor/gmp-6.3.0/mpn/mod_1_4.asm
vendor/gmp-6.3.0/mpn/mod_1_4.lo
+vendor/gmp-6.3.0/mpn/mod_1.c
+vendor/gmp-6.3.0/mpn/mod_1.lo
vendor/gmp-6.3.0/mpn/mod_34lsub1.asm
vendor/gmp-6.3.0/mpn/mod_34lsub1.lo
vendor/gmp-6.3.0/mpn/mode1o.asm
@@ -321,38 +326,38 @@ vendor/gmp-6.3.0/mpn/mu_bdiv_q.c
vendor/gmp-6.3.0/mpn/mu_bdiv_q.lo
vendor/gmp-6.3.0/mpn/mu_bdiv_qr.c
vendor/gmp-6.3.0/mpn/mu_bdiv_qr.lo
+vendor/gmp-6.3.0/mpn/mu_divappr_q.c
+vendor/gmp-6.3.0/mpn/mu_divappr_q.lo
vendor/gmp-6.3.0/mpn/mu_div_q.c
vendor/gmp-6.3.0/mpn/mu_div_q.lo
vendor/gmp-6.3.0/mpn/mu_div_qr.c
vendor/gmp-6.3.0/mpn/mu_div_qr.lo
-vendor/gmp-6.3.0/mpn/mu_divappr_q.c
-vendor/gmp-6.3.0/mpn/mu_divappr_q.lo
-vendor/gmp-6.3.0/mpn/mul.c
-vendor/gmp-6.3.0/mpn/mul.lo
vendor/gmp-6.3.0/mpn/mul_1.asm
vendor/gmp-6.3.0/mpn/mul_1.lo
vendor/gmp-6.3.0/mpn/mul_2.asm
vendor/gmp-6.3.0/mpn/mul_2.lo
vendor/gmp-6.3.0/mpn/mul_basecase.asm
vendor/gmp-6.3.0/mpn/mul_basecase.lo
+vendor/gmp-6.3.0/mpn/mul.c
vendor/gmp-6.3.0/mpn/mul_fft.c
vendor/gmp-6.3.0/mpn/mul_fft.lo
-vendor/gmp-6.3.0/mpn/mul_n.c
-vendor/gmp-6.3.0/mpn/mul_n.lo
+vendor/gmp-6.3.0/mpn/mul.lo
vendor/gmp-6.3.0/mpn/mullo_basecase.asm
vendor/gmp-6.3.0/mpn/mullo_basecase.lo
vendor/gmp-6.3.0/mpn/mullo_n.c
vendor/gmp-6.3.0/mpn/mullo_n.lo
-vendor/gmp-6.3.0/mpn/mulmid.c
-vendor/gmp-6.3.0/mpn/mulmid.lo
vendor/gmp-6.3.0/mpn/mulmid_basecase.c
vendor/gmp-6.3.0/mpn/mulmid_basecase.lo
+vendor/gmp-6.3.0/mpn/mulmid.c
+vendor/gmp-6.3.0/mpn/mulmid.lo
vendor/gmp-6.3.0/mpn/mulmid_n.c
vendor/gmp-6.3.0/mpn/mulmid_n.lo
vendor/gmp-6.3.0/mpn/mulmod_bknp1.c
vendor/gmp-6.3.0/mpn/mulmod_bknp1.lo
vendor/gmp-6.3.0/mpn/mulmod_bnm1.c
vendor/gmp-6.3.0/mpn/mulmod_bnm1.lo
+vendor/gmp-6.3.0/mpn/mul_n.c
+vendor/gmp-6.3.0/mpn/mul_n.lo
vendor/gmp-6.3.0/mpn/nand_n.asm
vendor/gmp-6.3.0/mpn/nand_n.lo
vendor/gmp-6.3.0/mpn/neg.c
@@ -376,10 +381,10 @@ vendor/gmp-6.3.0/mpn/powm.c
vendor/gmp-6.3.0/mpn/powm.lo
vendor/gmp-6.3.0/mpn/pre_mod_1.c
vendor/gmp-6.3.0/mpn/pre_mod_1.lo
-vendor/gmp-6.3.0/mpn/random.c
-vendor/gmp-6.3.0/mpn/random.lo
vendor/gmp-6.3.0/mpn/random2.c
vendor/gmp-6.3.0/mpn/random2.lo
+vendor/gmp-6.3.0/mpn/random.c
+vendor/gmp-6.3.0/mpn/random.lo
vendor/gmp-6.3.0/mpn/redc_1.asm
vendor/gmp-6.3.0/mpn/redc_1.lo
vendor/gmp-6.3.0/mpn/redc_2.c
@@ -408,12 +413,12 @@ vendor/gmp-6.3.0/mpn/sbpi1_bdiv_qr.c
vendor/gmp-6.3.0/mpn/sbpi1_bdiv_qr.lo
vendor/gmp-6.3.0/mpn/sbpi1_bdiv_r.asm
vendor/gmp-6.3.0/mpn/sbpi1_bdiv_r.lo
+vendor/gmp-6.3.0/mpn/sbpi1_divappr_q.c
+vendor/gmp-6.3.0/mpn/sbpi1_divappr_q.lo
vendor/gmp-6.3.0/mpn/sbpi1_div_q.c
vendor/gmp-6.3.0/mpn/sbpi1_div_q.lo
vendor/gmp-6.3.0/mpn/sbpi1_div_qr.c
vendor/gmp-6.3.0/mpn/sbpi1_div_qr.lo
-vendor/gmp-6.3.0/mpn/sbpi1_divappr_q.c
-vendor/gmp-6.3.0/mpn/sbpi1_divappr_q.lo
vendor/gmp-6.3.0/mpn/scan0.c
vendor/gmp-6.3.0/mpn/scan0.lo
vendor/gmp-6.3.0/mpn/scan1.c
@@ -444,40 +449,40 @@ vendor/gmp-6.3.0/mpn/set_str.c
vendor/gmp-6.3.0/mpn/set_str.lo
vendor/gmp-6.3.0/mpn/sizeinbase.c
vendor/gmp-6.3.0/mpn/sizeinbase.lo
-vendor/gmp-6.3.0/mpn/sqr.c
-vendor/gmp-6.3.0/mpn/sqr.lo
vendor/gmp-6.3.0/mpn/sqr_basecase.asm
vendor/gmp-6.3.0/mpn/sqr_basecase.lo
+vendor/gmp-6.3.0/mpn/sqr.c
vendor/gmp-6.3.0/mpn/sqr_diag_addlsh1.asm
vendor/gmp-6.3.0/mpn/sqr_diag_addlsh1.lo
-vendor/gmp-6.3.0/mpn/sqrlo.c
-vendor/gmp-6.3.0/mpn/sqrlo.lo
+vendor/gmp-6.3.0/mpn/sqr.lo
vendor/gmp-6.3.0/mpn/sqrlo_basecase.c
vendor/gmp-6.3.0/mpn/sqrlo_basecase.lo
+vendor/gmp-6.3.0/mpn/sqrlo.c
+vendor/gmp-6.3.0/mpn/sqrlo.lo
vendor/gmp-6.3.0/mpn/sqrmod_bnm1.c
vendor/gmp-6.3.0/mpn/sqrmod_bnm1.lo
vendor/gmp-6.3.0/mpn/sqrtrem.c
vendor/gmp-6.3.0/mpn/sqrtrem.lo
vendor/gmp-6.3.0/mpn/strongfibo.c
vendor/gmp-6.3.0/mpn/strongfibo.lo
-vendor/gmp-6.3.0/mpn/sub.c
-vendor/gmp-6.3.0/mpn/sub.lo
vendor/gmp-6.3.0/mpn/sub_1.c
vendor/gmp-6.3.0/mpn/sub_1.lo
+vendor/gmp-6.3.0/mpn/sub.c
vendor/gmp-6.3.0/mpn/sub_err1_n.asm
vendor/gmp-6.3.0/mpn/sub_err1_n.lo
vendor/gmp-6.3.0/mpn/sub_err2_n.asm
vendor/gmp-6.3.0/mpn/sub_err2_n.lo
vendor/gmp-6.3.0/mpn/sub_err3_n.asm
vendor/gmp-6.3.0/mpn/sub_err3_n.lo
-vendor/gmp-6.3.0/mpn/sub_n.asm
-vendor/gmp-6.3.0/mpn/sub_n.lo
+vendor/gmp-6.3.0/mpn/sub.lo
vendor/gmp-6.3.0/mpn/sublsh1_n.asm
vendor/gmp-6.3.0/mpn/sublsh1_n.lo
vendor/gmp-6.3.0/mpn/sublsh2_n.asm
vendor/gmp-6.3.0/mpn/sublsh2_n.lo
vendor/gmp-6.3.0/mpn/submul_1.asm
vendor/gmp-6.3.0/mpn/submul_1.lo
+vendor/gmp-6.3.0/mpn/sub_n.asm
+vendor/gmp-6.3.0/mpn/sub_n.lo
vendor/gmp-6.3.0/mpn/tdiv_qr.c
vendor/gmp-6.3.0/mpn/tdiv_qr.lo
vendor/gmp-6.3.0/mpn/toom22_mul.c
@@ -510,14 +515,14 @@ vendor/gmp-6.3.0/mpn/toom62_mul.c
vendor/gmp-6.3.0/mpn/toom62_mul.lo
vendor/gmp-6.3.0/mpn/toom63_mul.c
vendor/gmp-6.3.0/mpn/toom63_mul.lo
-vendor/gmp-6.3.0/mpn/toom6_sqr.c
-vendor/gmp-6.3.0/mpn/toom6_sqr.lo
vendor/gmp-6.3.0/mpn/toom6h_mul.c
vendor/gmp-6.3.0/mpn/toom6h_mul.lo
-vendor/gmp-6.3.0/mpn/toom8_sqr.c
-vendor/gmp-6.3.0/mpn/toom8_sqr.lo
+vendor/gmp-6.3.0/mpn/toom6_sqr.c
+vendor/gmp-6.3.0/mpn/toom6_sqr.lo
vendor/gmp-6.3.0/mpn/toom8h_mul.c
vendor/gmp-6.3.0/mpn/toom8h_mul.lo
+vendor/gmp-6.3.0/mpn/toom8_sqr.c
+vendor/gmp-6.3.0/mpn/toom8_sqr.lo
vendor/gmp-6.3.0/mpn/toom_couple_handling.c
vendor/gmp-6.3.0/mpn/toom_couple_handling.lo
vendor/gmp-6.3.0/mpn/toom_eval_dgr3_pm1.c
@@ -527,9 +532,9 @@ vendor/gmp-6.3.0/mpn/toom_eval_dgr3_pm2.lo
vendor/gmp-6.3.0/mpn/toom_eval_pm1.c
vendor/gmp-6.3.0/mpn/toom_eval_pm1.lo
vendor/gmp-6.3.0/mpn/toom_eval_pm2.c
-vendor/gmp-6.3.0/mpn/toom_eval_pm2.lo
vendor/gmp-6.3.0/mpn/toom_eval_pm2exp.c
vendor/gmp-6.3.0/mpn/toom_eval_pm2exp.lo
+vendor/gmp-6.3.0/mpn/toom_eval_pm2.lo
vendor/gmp-6.3.0/mpn/toom_eval_pm2rexp.c
vendor/gmp-6.3.0/mpn/toom_eval_pm2rexp.lo
vendor/gmp-6.3.0/mpn/toom_interpolate_12pts.c
@@ -554,8 +559,6 @@ vendor/gmp-6.3.0/mpn/zero.c
vendor/gmp-6.3.0/mpn/zero.lo
vendor/gmp-6.3.0/mpn/zero_p.c
vendor/gmp-6.3.0/mpn/zero_p.lo
-vendor/gmp-6.3.0/mpq/.libs/
-vendor/gmp-6.3.0/mpq/Makefile
vendor/gmp-6.3.0/mpq/abs.lo
vendor/gmp-6.3.0/mpq/aors.lo
vendor/gmp-6.3.0/mpq/canonicalize.lo
@@ -566,8 +569,8 @@ vendor/gmp-6.3.0/mpq/cmp_si.lo
vendor/gmp-6.3.0/mpq/cmp_ui.lo
vendor/gmp-6.3.0/mpq/div.lo
vendor/gmp-6.3.0/mpq/equal.lo
-vendor/gmp-6.3.0/mpq/get_d.lo
vendor/gmp-6.3.0/mpq/get_den.lo
+vendor/gmp-6.3.0/mpq/get_d.lo
vendor/gmp-6.3.0/mpq/get_num.lo
vendor/gmp-6.3.0/mpq/get_str.lo
vendor/gmp-6.3.0/mpq/init.lo
@@ -575,36 +578,37 @@ vendor/gmp-6.3.0/mpq/inits.lo
vendor/gmp-6.3.0/mpq/inp_str.lo
vendor/gmp-6.3.0/mpq/inv.lo
vendor/gmp-6.3.0/mpq/libmpq.la
+vendor/gmp-6.3.0/mpq/.libs/
+vendor/gmp-6.3.0/mpq/Makefile
vendor/gmp-6.3.0/mpq/md_2exp.lo
vendor/gmp-6.3.0/mpq/mul.lo
vendor/gmp-6.3.0/mpq/neg.lo
vendor/gmp-6.3.0/mpq/out_str.lo
-vendor/gmp-6.3.0/mpq/set.lo
-vendor/gmp-6.3.0/mpq/set_d.lo
vendor/gmp-6.3.0/mpq/set_den.lo
+vendor/gmp-6.3.0/mpq/set_d.lo
vendor/gmp-6.3.0/mpq/set_f.lo
+vendor/gmp-6.3.0/mpq/set.lo
vendor/gmp-6.3.0/mpq/set_num.lo
vendor/gmp-6.3.0/mpq/set_si.lo
vendor/gmp-6.3.0/mpq/set_str.lo
vendor/gmp-6.3.0/mpq/set_ui.lo
vendor/gmp-6.3.0/mpq/set_z.lo
vendor/gmp-6.3.0/mpq/swap.lo
-vendor/gmp-6.3.0/mpz/.libs/
+vendor/gmp-6.3.0/mp_set_fns.lo
vendor/gmp-6.3.0/mpz/2fac_ui.lo
-vendor/gmp-6.3.0/mpz/Makefile
vendor/gmp-6.3.0/mpz/abs.lo
vendor/gmp-6.3.0/mpz/add.lo
vendor/gmp-6.3.0/mpz/add_ui.lo
vendor/gmp-6.3.0/mpz/and.lo
-vendor/gmp-6.3.0/mpz/aorsmul.lo
vendor/gmp-6.3.0/mpz/aorsmul_i.lo
+vendor/gmp-6.3.0/mpz/aorsmul.lo
vendor/gmp-6.3.0/mpz/array_init.lo
vendor/gmp-6.3.0/mpz/bin_ui.lo
vendor/gmp-6.3.0/mpz/bin_uiui.lo
vendor/gmp-6.3.0/mpz/cdiv_q.lo
-vendor/gmp-6.3.0/mpz/cdiv_q_ui.lo
vendor/gmp-6.3.0/mpz/cdiv_qr.lo
vendor/gmp-6.3.0/mpz/cdiv_qr_ui.lo
+vendor/gmp-6.3.0/mpz/cdiv_q_ui.lo
vendor/gmp-6.3.0/mpz/cdiv_r.lo
vendor/gmp-6.3.0/mpz/cdiv_r_ui.lo
vendor/gmp-6.3.0/mpz/cdiv_ui.lo
@@ -613,31 +617,31 @@ vendor/gmp-6.3.0/mpz/cfdiv_r_2exp.lo
vendor/gmp-6.3.0/mpz/clear.lo
vendor/gmp-6.3.0/mpz/clears.lo
vendor/gmp-6.3.0/mpz/clrbit.lo
-vendor/gmp-6.3.0/mpz/cmp.lo
+vendor/gmp-6.3.0/mpz/cmpabs_d.lo
+vendor/gmp-6.3.0/mpz/cmpabs.lo
+vendor/gmp-6.3.0/mpz/cmpabs_ui.lo
vendor/gmp-6.3.0/mpz/cmp_d.lo
+vendor/gmp-6.3.0/mpz/cmp.lo
vendor/gmp-6.3.0/mpz/cmp_si.lo
vendor/gmp-6.3.0/mpz/cmp_ui.lo
-vendor/gmp-6.3.0/mpz/cmpabs.lo
-vendor/gmp-6.3.0/mpz/cmpabs_d.lo
-vendor/gmp-6.3.0/mpz/cmpabs_ui.lo
-vendor/gmp-6.3.0/mpz/com.lo
vendor/gmp-6.3.0/mpz/combit.lo
-vendor/gmp-6.3.0/mpz/cong.lo
+vendor/gmp-6.3.0/mpz/com.lo
vendor/gmp-6.3.0/mpz/cong_2exp.lo
+vendor/gmp-6.3.0/mpz/cong.lo
vendor/gmp-6.3.0/mpz/cong_ui.lo
-vendor/gmp-6.3.0/mpz/dive_ui.lo
vendor/gmp-6.3.0/mpz/divegcd.lo
+vendor/gmp-6.3.0/mpz/dive_ui.lo
vendor/gmp-6.3.0/mpz/divexact.lo
-vendor/gmp-6.3.0/mpz/divis.lo
vendor/gmp-6.3.0/mpz/divis_2exp.lo
+vendor/gmp-6.3.0/mpz/divis.lo
vendor/gmp-6.3.0/mpz/divis_ui.lo
vendor/gmp-6.3.0/mpz/dump.lo
vendor/gmp-6.3.0/mpz/export.lo
vendor/gmp-6.3.0/mpz/fac_ui.lo
vendor/gmp-6.3.0/mpz/fdiv_q.lo
-vendor/gmp-6.3.0/mpz/fdiv_q_ui.lo
vendor/gmp-6.3.0/mpz/fdiv_qr.lo
vendor/gmp-6.3.0/mpz/fdiv_qr_ui.lo
+vendor/gmp-6.3.0/mpz/fdiv_q_ui.lo
vendor/gmp-6.3.0/mpz/fdiv_r.lo
vendor/gmp-6.3.0/mpz/fdiv_r_ui.lo
vendor/gmp-6.3.0/mpz/fdiv_ui.lo
@@ -649,26 +653,26 @@ vendor/gmp-6.3.0/mpz/fits_sshort.lo
vendor/gmp-6.3.0/mpz/fits_uint.lo
vendor/gmp-6.3.0/mpz/fits_ulong.lo
vendor/gmp-6.3.0/mpz/fits_ushort.lo
+vendor/gmp-6.3.0/mpz/gcdext.lo
vendor/gmp-6.3.0/mpz/gcd.lo
vendor/gmp-6.3.0/mpz/gcd_ui.lo
-vendor/gmp-6.3.0/mpz/gcdext.lo
-vendor/gmp-6.3.0/mpz/get_d.lo
vendor/gmp-6.3.0/mpz/get_d_2exp.lo
+vendor/gmp-6.3.0/mpz/get_d.lo
+vendor/gmp-6.3.0/mpz/getlimbn.lo
vendor/gmp-6.3.0/mpz/get_si.lo
vendor/gmp-6.3.0/mpz/get_str.lo
vendor/gmp-6.3.0/mpz/get_ui.lo
-vendor/gmp-6.3.0/mpz/getlimbn.lo
vendor/gmp-6.3.0/mpz/hamdist.lo
vendor/gmp-6.3.0/mpz/import.lo
-vendor/gmp-6.3.0/mpz/init.lo
vendor/gmp-6.3.0/mpz/init2.lo
+vendor/gmp-6.3.0/mpz/init.lo
vendor/gmp-6.3.0/mpz/inits.lo
vendor/gmp-6.3.0/mpz/inp_raw.lo
vendor/gmp-6.3.0/mpz/inp_str.lo
vendor/gmp-6.3.0/mpz/invert.lo
vendor/gmp-6.3.0/mpz/ior.lo
-vendor/gmp-6.3.0/mpz/iset.lo
vendor/gmp-6.3.0/mpz/iset_d.lo
+vendor/gmp-6.3.0/mpz/iset.lo
vendor/gmp-6.3.0/mpz/iset_si.lo
vendor/gmp-6.3.0/mpz/iset_str.lo
vendor/gmp-6.3.0/mpz/iset_ui.lo
@@ -680,6 +684,7 @@ vendor/gmp-6.3.0/mpz/kronzu.lo
vendor/gmp-6.3.0/mpz/lcm.lo
vendor/gmp-6.3.0/mpz/lcm_ui.lo
vendor/gmp-6.3.0/mpz/libmpz.la
+vendor/gmp-6.3.0/mpz/.libs/
vendor/gmp-6.3.0/mpz/limbs_finish.lo
vendor/gmp-6.3.0/mpz/limbs_modify.lo
vendor/gmp-6.3.0/mpz/limbs_read.lo
@@ -687,33 +692,34 @@ vendor/gmp-6.3.0/mpz/limbs_write.lo
vendor/gmp-6.3.0/mpz/lucmod.lo
vendor/gmp-6.3.0/mpz/lucnum2_ui.lo
vendor/gmp-6.3.0/mpz/lucnum_ui.lo
+vendor/gmp-6.3.0/mpz/Makefile
vendor/gmp-6.3.0/mpz/mfac_uiui.lo
vendor/gmp-6.3.0/mpz/millerrabin.lo
vendor/gmp-6.3.0/mpz/mod.lo
-vendor/gmp-6.3.0/mpz/mul.lo
vendor/gmp-6.3.0/mpz/mul_2exp.lo
+vendor/gmp-6.3.0/mpz/mul.lo
vendor/gmp-6.3.0/mpz/mul_si.lo
vendor/gmp-6.3.0/mpz/mul_ui.lo
-vendor/gmp-6.3.0/mpz/n_pow_ui.lo
vendor/gmp-6.3.0/mpz/neg.lo
vendor/gmp-6.3.0/mpz/nextprime.lo
+vendor/gmp-6.3.0/mpz/n_pow_ui.lo
vendor/gmp-6.3.0/mpz/oddfac_1.lo
vendor/gmp-6.3.0/mpz/out_raw.lo
vendor/gmp-6.3.0/mpz/out_str.lo
vendor/gmp-6.3.0/mpz/perfpow.lo
vendor/gmp-6.3.0/mpz/perfsqr.lo
vendor/gmp-6.3.0/mpz/popcount.lo
-vendor/gmp-6.3.0/mpz/pow_ui.lo
vendor/gmp-6.3.0/mpz/powm.lo
vendor/gmp-6.3.0/mpz/powm_sec.lo
vendor/gmp-6.3.0/mpz/powm_ui.lo
+vendor/gmp-6.3.0/mpz/pow_ui.lo
vendor/gmp-6.3.0/mpz/pprime_p.lo
vendor/gmp-6.3.0/mpz/primorial_ui.lo
vendor/gmp-6.3.0/mpz/prodlimbs.lo
-vendor/gmp-6.3.0/mpz/random.lo
vendor/gmp-6.3.0/mpz/random2.lo
-vendor/gmp-6.3.0/mpz/realloc.lo
+vendor/gmp-6.3.0/mpz/random.lo
vendor/gmp-6.3.0/mpz/realloc2.lo
+vendor/gmp-6.3.0/mpz/realloc.lo
vendor/gmp-6.3.0/mpz/remove.lo
vendor/gmp-6.3.0/mpz/roinit_n.lo
vendor/gmp-6.3.0/mpz/root.lo
@@ -721,29 +727,29 @@ vendor/gmp-6.3.0/mpz/rootrem.lo
vendor/gmp-6.3.0/mpz/rrandomb.lo
vendor/gmp-6.3.0/mpz/scan0.lo
vendor/gmp-6.3.0/mpz/scan1.lo
-vendor/gmp-6.3.0/mpz/set.lo
+vendor/gmp-6.3.0/mpz/setbit.lo
vendor/gmp-6.3.0/mpz/set_d.lo
vendor/gmp-6.3.0/mpz/set_f.lo
+vendor/gmp-6.3.0/mpz/set.lo
vendor/gmp-6.3.0/mpz/set_q.lo
vendor/gmp-6.3.0/mpz/set_si.lo
vendor/gmp-6.3.0/mpz/set_str.lo
vendor/gmp-6.3.0/mpz/set_ui.lo
-vendor/gmp-6.3.0/mpz/setbit.lo
-vendor/gmp-6.3.0/mpz/size.lo
vendor/gmp-6.3.0/mpz/sizeinbase.lo
+vendor/gmp-6.3.0/mpz/size.lo
vendor/gmp-6.3.0/mpz/sqrt.lo
vendor/gmp-6.3.0/mpz/sqrtrem.lo
vendor/gmp-6.3.0/mpz/stronglucas.lo
vendor/gmp-6.3.0/mpz/sub.lo
vendor/gmp-6.3.0/mpz/sub_ui.lo
vendor/gmp-6.3.0/mpz/swap.lo
-vendor/gmp-6.3.0/mpz/tdiv_q.lo
vendor/gmp-6.3.0/mpz/tdiv_q_2exp.lo
-vendor/gmp-6.3.0/mpz/tdiv_q_ui.lo
+vendor/gmp-6.3.0/mpz/tdiv_q.lo
vendor/gmp-6.3.0/mpz/tdiv_qr.lo
vendor/gmp-6.3.0/mpz/tdiv_qr_ui.lo
-vendor/gmp-6.3.0/mpz/tdiv_r.lo
+vendor/gmp-6.3.0/mpz/tdiv_q_ui.lo
vendor/gmp-6.3.0/mpz/tdiv_r_2exp.lo
+vendor/gmp-6.3.0/mpz/tdiv_r.lo
vendor/gmp-6.3.0/mpz/tdiv_r_ui.lo
vendor/gmp-6.3.0/mpz/tdiv_ui.lo
vendor/gmp-6.3.0/mpz/tstbit.lo
@@ -754,64 +760,64 @@ vendor/gmp-6.3.0/mpz/urandomm.lo
vendor/gmp-6.3.0/mpz/xor.lo
vendor/gmp-6.3.0/nextprime.lo
vendor/gmp-6.3.0/primesieve.lo
-vendor/gmp-6.3.0/printf/.libs/
-vendor/gmp-6.3.0/printf/Makefile
vendor/gmp-6.3.0/printf/asprintf.lo
vendor/gmp-6.3.0/printf/asprntffuns.lo
-vendor/gmp-6.3.0/printf/doprnt.lo
vendor/gmp-6.3.0/printf/doprntf.lo
vendor/gmp-6.3.0/printf/doprnti.lo
+vendor/gmp-6.3.0/printf/doprnt.lo
vendor/gmp-6.3.0/printf/fprintf.lo
vendor/gmp-6.3.0/printf/libprintf.la
+vendor/gmp-6.3.0/printf/.libs/
+vendor/gmp-6.3.0/printf/Makefile
vendor/gmp-6.3.0/printf/obprintf.lo
vendor/gmp-6.3.0/printf/obprntffuns.lo
vendor/gmp-6.3.0/printf/obvprintf.lo
-vendor/gmp-6.3.0/printf/printf.lo
vendor/gmp-6.3.0/printf/printffuns.lo
+vendor/gmp-6.3.0/printf/printf.lo
vendor/gmp-6.3.0/printf/repl-vsnprintf.lo
vendor/gmp-6.3.0/printf/snprintf.lo
vendor/gmp-6.3.0/printf/snprntffuns.lo
-vendor/gmp-6.3.0/printf/sprintf.lo
vendor/gmp-6.3.0/printf/sprintffuns.lo
+vendor/gmp-6.3.0/printf/sprintf.lo
vendor/gmp-6.3.0/printf/vasprintf.lo
vendor/gmp-6.3.0/printf/vfprintf.lo
vendor/gmp-6.3.0/printf/vprintf.lo
vendor/gmp-6.3.0/printf/vsnprintf.lo
vendor/gmp-6.3.0/printf/vsprintf.lo
+vendor/gmp-6.3.0/rand/librandom.la
vendor/gmp-6.3.0/rand/.libs/
vendor/gmp-6.3.0/rand/Makefile
-vendor/gmp-6.3.0/rand/librandom.la
-vendor/gmp-6.3.0/rand/rand.lo
vendor/gmp-6.3.0/rand/randbui.lo
vendor/gmp-6.3.0/rand/randclr.lo
vendor/gmp-6.3.0/rand/randdef.lo
vendor/gmp-6.3.0/rand/randiset.lo
vendor/gmp-6.3.0/rand/randlc2s.lo
vendor/gmp-6.3.0/rand/randlc2x.lo
+vendor/gmp-6.3.0/rand/rand.lo
vendor/gmp-6.3.0/rand/randmt.lo
vendor/gmp-6.3.0/rand/randmts.lo
vendor/gmp-6.3.0/rand/randmui.lo
-vendor/gmp-6.3.0/rand/rands.lo
vendor/gmp-6.3.0/rand/randsd.lo
vendor/gmp-6.3.0/rand/randsdui.lo
-vendor/gmp-6.3.0/scanf/.libs/
-vendor/gmp-6.3.0/scanf/Makefile
+vendor/gmp-6.3.0/rand/rands.lo
vendor/gmp-6.3.0/scanf/doscan.lo
-vendor/gmp-6.3.0/scanf/fscanf.lo
vendor/gmp-6.3.0/scanf/fscanffuns.lo
+vendor/gmp-6.3.0/scanf/fscanf.lo
+vendor/gmp-6.3.0/scanf/.libs/
vendor/gmp-6.3.0/scanf/libscanf.la
+vendor/gmp-6.3.0/scanf/Makefile
vendor/gmp-6.3.0/scanf/scanf.lo
-vendor/gmp-6.3.0/scanf/sscanf.lo
vendor/gmp-6.3.0/scanf/sscanffuns.lo
+vendor/gmp-6.3.0/scanf/sscanf.lo
vendor/gmp-6.3.0/scanf/vfscanf.lo
vendor/gmp-6.3.0/scanf/vscanf.lo
vendor/gmp-6.3.0/scanf/vsscanf.lo
vendor/gmp-6.3.0/sieve_table.h
vendor/gmp-6.3.0/stamp-h1
vendor/gmp-6.3.0/tal-reent.lo
-vendor/gmp-6.3.0/tests/Makefile
vendor/gmp-6.3.0/tests/cxx/Makefile
vendor/gmp-6.3.0/tests/devel/Makefile
+vendor/gmp-6.3.0/tests/Makefile
vendor/gmp-6.3.0/tests/misc/Makefile
vendor/gmp-6.3.0/tests/mpf/Makefile
vendor/gmp-6.3.0/tests/mpn/Makefile
diff --git a/make.c b/make.c
index caeff2a..c57362d 100644
--- a/make.c
+++ b/make.c
@@ -54,20 +54,19 @@ static char *argv0;
static bool fflag, Fflag, rflag, Sflag;
static int simd_flags;
-static void cc(void *);
-static void gperf(void *);
static void ld(void);
static void mkgmp(int);
static bool tagvalid(const char *);
static void chk_cpu_flags(void);
static int globerr(const char *, int);
+static tjob cc, cc_test, gperf;
static void
usage(void)
{
fprintf(stderr,
"Usage: %s [-frS]\n"
- " %s clean\n",
+ " %s clean | distclean | test\n",
argv0, argv0);
exit(EXIT_FAILURE);
}
@@ -107,13 +106,25 @@ main(int argc, char **argv)
if (argc > 0) {
if (strcmp("clean", *argv) == 0) {
- strspushl(&cmd, "find", ".", "(", "-name", TARGET, "-or", "-name",
- "*.o", "-or", "-name", "*.gen.c", ")", "-delete");
+ strspushl(&cmd, "find", ".",
+ "(",
+ "-name", TARGET,
+ "-or", "-name", "*.o",
+ "-or", "-name", "*.gen.c",
+ "-or", "-path", "./test/*", "-and", "-executable",
+ ")", "-delete"
+ );
cmdput(cmd);
return cmdexec(cmd);
} else if (strcmp("distclean", *argv) == 0) {
- strspushl(&cmd, "find", ".", "(", "-name", TARGET, "-or", "-name",
- "*.o", "-or", "-name", "*.gen.c", ")", "-delete");
+ strspushl(&cmd, "find", ".",
+ "(",
+ "-name", TARGET,
+ "-or", "-name", "*.o",
+ "-or", "-name", "*.gen.c",
+ "-or", "-path", "./test/*", "-and", "-executable",
+ ")", "-delete"
+ );
cmdput(cmd);
cmdexec(cmd);
assert(chdir(GMPDIR) != -1);
@@ -121,6 +132,11 @@ main(int argc, char **argv)
strspushl(&cmd, "make", "distclean");
cmdput(cmd);
return cmdexec(cmd);
+ } else if (strcmp("test", *argv) == 0) {
+ strspushl(&cmd, "find", "test", "-type", "f", "-executable",
+ "-exec", "{}", ";");
+ cmdput(cmd);
+ return cmdexec(cmd);
} else {
fprintf(stderr, "%s: invalid subcommand — ‘%s’\n", argv0, *argv);
usage();
@@ -139,18 +155,27 @@ main(int argc, char **argv)
tpinit(&tp, procs);
glob_t g;
- assert(glob("src/*.gperf", 0, globerr, &g) == 0);
+ /* GNU Perf files */
+ assert(glob("src/*.gperf", 0, globerr, &g) == 0);
for (size_t i = 0; i < g.gl_pathc; i++)
tpenq(&tp, gperf, g.gl_pathv[i], NULL);
tpwait(&tp);
+ /* C files */
globfree(&g);
assert(glob("src/*.c", 0, globerr, &g) == 0);
-
for (size_t i = 0; i < g.gl_pathc; i++)
tpenq(&tp, cc, g.gl_pathv[i], NULL);
tpwait(&tp);
+
+ /* Tests */
+ globfree(&g);
+ assert(glob("test/*.c", 0, globerr, &g) == 0);
+ for (size_t i = 0; i < g.gl_pathc; i++)
+ tpenq(&tp, cc_test, g.gl_pathv[i], NULL);
+ tpwait(&tp);
+
tpfree(&tp);
ld();
@@ -194,6 +219,54 @@ out:
}
void
+cc_test(void *arg)
+{
+ struct strs cmd = {0};
+ char *dst, *src = arg;
+
+ assert((dst = strdup(src)) != NULL);
+ *strchr(dst, '.') = 0;
+
+ struct deps {
+ char *tst;
+ char **objs;
+ size_t len;
+ } deps[] = {
+ {"test/arena", (char *[]){"src/arena.o"}, 1},
+ };
+
+ struct deps d;
+ for (size_t i = 0; i < lengthof(deps); i++) {
+ if (strcmp(deps[i].tst, dst) == 0) {
+ d = deps[i];
+ break;
+ }
+ }
+
+ if (!fflag && !foutdated(dst, d.objs, d.len) && !foutdatedl(dst, src))
+ goto out;
+
+ strspushenvl(&cmd, "CC", "cc");
+ strspush(&cmd, cflags_all, lengthof(cflags_all));
+ if (rflag)
+ strspushenv(&cmd, "CFLAGS", cflags_rls, lengthof(cflags_rls));
+ else
+ strspushenv(&cmd, "CFLAGS", cflags_dbg, lengthof(cflags_dbg));
+ if (!rflag && !Sflag)
+ strspushl(&cmd, "-fsanitize=address,undefined");
+ if (simd_flags != 0)
+ strspushl(&cmd, "-DORYX_SIMD=1");
+ strspushl(&cmd, "-Isrc", "-o", dst, src);
+ strspush(&cmd, d.objs, d.len);
+
+ cmdput(cmd);
+ cmdexec(cmd);
+ strsfree(&cmd);
+out:
+ free(dst);
+}
+
+void
gperf(void *arg)
{
struct strs cmd = {0};
diff --git a/src/alloc.h b/src/alloc.h
index bc4bd69..8ac1f1f 100644
--- a/src/alloc.h
+++ b/src/alloc.h
@@ -6,6 +6,14 @@
#include "common.h"
+/* Callers should not modify _ARENA_DFLT_CAP. This is included here so
+ that it can be accessed from the automated tests. */
+#if DEBUG
+# define _ARENA_DFLT_CAP (8)
+#else
+# define _ARENA_DFLT_CAP (2 * 1024)
+#endif
+
typedef struct _arena *arena_t;
typedef struct {
void *p;
diff --git a/src/arena.c b/src/arena.c
index 525acfe..20083b5 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -16,12 +16,6 @@
# error "System not supported (missing MAP_ANON)"
#endif
-#if DEBUG
-# define ARENA_DFLT_CAP (8)
-#else
-# define ARENA_DFLT_CAP (2048)
-#endif
-
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define IS_POW_2(n) ((n) != 0 && ((n) & ((n)-1)) == 0)
@@ -68,7 +62,7 @@ arena_alloc(struct _arena **a, size_t nmemb, size_t size, size_t align)
}
/* No page exists with enough space */
- struct _arena *p = mkblk(MAX(size, ARENA_DFLT_CAP));
+ struct _arena *p = mkblk(MAX(size, _ARENA_DFLT_CAP));
p->next = *a;
*a = p;
p->free = (char *)p->data + size;
diff --git a/test/arena.c b/test/arena.c
new file mode 100644
index 0000000..58b3076
--- /dev/null
+++ b/test/arena.c
@@ -0,0 +1,135 @@
+#include <sys/mman.h>
+
+#include <errno.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "alloc.h"
+#include "test-internal.h"
+
+#define lengthof(xs) (sizeof(xs) / sizeof(*(xs)))
+
+static void make_and_free(void),
+ make_and_resize(void),
+ free_empty_arena(void),
+ make_snapshot(void);
+
+int
+main(void)
+{
+ make_and_free();
+ make_and_resize();
+ free_empty_arena();
+ make_snapshot();
+ return rv;
+}
+
+void
+make_and_free(void)
+{
+ arena_t a = NULL;
+ int *xs = arena_new(&a, int, 69);
+
+ for (size_t i = 0; i < 69; i++)
+ xs[i] = i;
+
+ arena_free(&a);
+}
+
+void
+make_and_resize(void)
+{
+ arena_t a = NULL;
+ size_t *xs = arena_new(&a, size_t, 100);
+ for (size_t i = 0; i < 100; i++)
+ xs[i] = i;
+
+ static size_t ranges[][2] = {
+ { 100, 1000},
+ { 1000, 10000},
+ {10000, 100000},
+ };
+
+ for (size_t i = 0; i < lengthof(ranges); i++) {
+ size_t lo = ranges[i][0];
+ size_t hi = ranges[i][1];
+
+ xs = arena_grow(&a, xs, size_t, lo, hi);
+ for (size_t j = lo; j < hi; j++)
+ xs[j] = j;
+ }
+
+ for (size_t i = 0; i < ranges[lengthof(ranges) - 1][1]; i++)
+ oryx_assert(xs[i] == i);
+
+cleanup:
+ arena_free(&a);
+}
+
+void
+free_empty_arena(void)
+{
+ arena_free(&(arena_t){0});
+}
+
+void
+make_snapshot(void)
+{
+ arena_t a = NULL;
+
+ char *p1, *p2, *p3;
+ snapshot_t s1, s2, s3;
+
+ /* The arena by default is backed my mmap(), and makes pages of size
+ _ARENA_DFLT_CAP or larger. This means we can test to see if the
+ arena snapshotting is properly implemented by:
+
+ 1. Creating allocations of the blocksize. This ensures each
+ allocation is on its own page as allocated by mmap(2).
+ 2. Creating a snapshot before each allocation.
+ 3. Restoring snapshots and checking to see which pages are still
+ valid via mincore() which errors with ENOMEM if the page isn’t
+ mapped.
+
+ Technically mincore() is non-standard… but it exists on all major
+ BSDs as well as Linux and Darwin. */
+
+ s1 = arena_snapshot_create(a); p1 = arena_new(&a, char, _ARENA_DFLT_CAP);
+ s2 = arena_snapshot_create(a); p2 = arena_new(&a, char, _ARENA_DFLT_CAP);
+ s3 = arena_snapshot_create(a); p3 = arena_new(&a, char, _ARENA_DFLT_CAP);
+
+ unsigned char *vec = NULL;
+ size_t pagesz = (size_t)sysconf(_SC_PAGESIZE);
+ oryx_assert(pagesz != (size_t)-1);
+
+ /* Vector size documented in mincore(2) */
+ vec = malloc((_ARENA_DFLT_CAP + pagesz - 1) / pagesz);
+ oryx_assert(vec != NULL);
+
+ errno = 0; mincore(p1, _ARENA_DFLT_CAP, vec); oryx_assert(errno == 0);
+ errno = 0; mincore(p2, _ARENA_DFLT_CAP, vec); oryx_assert(errno == 0);
+ errno = 0; mincore(p3, _ARENA_DFLT_CAP, vec); oryx_assert(errno == 0);
+
+ arena_snapshot_restore(&a, s3);
+ errno = 0; mincore(p1, _ARENA_DFLT_CAP, vec); oryx_assert(errno == 0);
+ errno = 0; mincore(p2, _ARENA_DFLT_CAP, vec); oryx_assert(errno == 0);
+ errno = 0; mincore(p3, _ARENA_DFLT_CAP, vec); oryx_assert(errno == ENOMEM);
+ oryx_assert(a != NULL);
+
+ arena_snapshot_restore(&a, s2);
+ errno = 0; mincore(p1, _ARENA_DFLT_CAP, vec); oryx_assert(errno == 0);
+ errno = 0; mincore(p2, _ARENA_DFLT_CAP, vec); oryx_assert(errno == ENOMEM);
+ errno = 0; mincore(p3, _ARENA_DFLT_CAP, vec); oryx_assert(errno == ENOMEM);
+ oryx_assert(a != NULL);
+
+ arena_snapshot_restore(&a, s1);
+ errno = 0; mincore(p1, _ARENA_DFLT_CAP, vec); oryx_assert(errno == ENOMEM);
+ errno = 0; mincore(p2, _ARENA_DFLT_CAP, vec); oryx_assert(errno == ENOMEM);
+ errno = 0; mincore(p3, _ARENA_DFLT_CAP, vec); oryx_assert(errno == ENOMEM);
+ oryx_assert(a == NULL);
+
+cleanup:
+ free(vec);
+ arena_free(&a);
+}
diff --git a/test/test-internal.h b/test/test-internal.h
new file mode 100644
index 0000000..78f5e7b
--- /dev/null
+++ b/test/test-internal.h
@@ -0,0 +1,20 @@
+#ifndef ORYX_TEST_INTERNAL_H
+#define ORYX_TEST_INTERNAL_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static int rv;
+
+#define oryx_assert(expr) \
+ do { \
+ if (!(expr)) { \
+ fprintf(stderr, "%s:%d: Test ‘%s’ failed\n", __FILE__, __LINE__, \
+ __func__); \
+ fprintf(stderr, "\tFailing expression: ‘%s’\n", #expr); \
+ rv = EXIT_FAILURE; \
+ goto cleanup; \
+ } \
+ } while (0)
+
+#endif /* !ORYX_TEST_INTERNAL_H */