Code coverage tests

This page documents the degree to which the PARI/GP source code is tested by our public test suite, distributed with the source distribution in directory src/test/. This is measured by the gcov utility; we then process gcov output using the lcov frond-end.

We test a few variants depending on Configure flags on the pari.math.u-bordeaux.fr machine (x86_64 architecture), and agregate them in the final report:

The target is to exceed 90% coverage for all mathematical modules (given that branches depending on DEBUGLEVEL or DEBUGMEM are not covered). This script is run to produce the results below.

LCOV - code coverage report
Current view: top level - basemath - RgX.c (source / functions) Hit Total Coverage
Test: PARI/GP v2.18.1 lcov report (development 30702-bddb8d6928) Lines: 1624 1787 90.9 %
Date: 2026-02-23 02:23:56 Functions: 204 223 91.5 %
Legend: Lines: hit not hit

Function Name Sort by function name Hit count Sort by hit count
Kronecker_to_mod 158190
QXQC_to_mod_shallow 12721
QXQM_to_mod_shallow 5756
QXQV_to_mod 19125
QXQXV_to_mod 10626
QXQX_homogenous_evalpow 1416
QXQX_to_mod 31139
QXQX_to_mod_shallow 173615
QXQ_powers 8061
QXQ_to_mod 141702
QXQ_to_mod_shallow 716802
QXV_QXQ_eval 2741
QXY_QXQ_evalx 252
QX_ZXQV_eval 6271
RgM_to_RgXV 254828
RgM_to_RgXV_reverse 6173
RgM_to_RgXX 20091
RgV_to_RgM 287605
RgV_to_RgX 1917620
RgV_to_RgX_reverse 160544
RgXQC_red 58424
RgXQM_mul 276
RgXQM_red 11302
RgXQV_RgXQ_mul 102
RgXQV_factorback 6101
RgXQV_red 1200
RgXQX_RgXQ_mul 30
RgXQX_RgXQ_translate 28657
RgXQX_divrem 127667
RgXQX_mul 0
RgXQX_powers 0
RgXQX_pseudodivrem 10291
RgXQX_pseudorem 110885
RgXQX_red 432049
RgXQX_sqr 0
RgXQ_matrix_pow 2485
RgXQ_norm 2094
RgXQ_pow 87243
RgXQ_powers 7338
RgXQ_powu 102811
RgXQ_trace 399
RgXV_RgV_eval 2526
RgXV_maxdegree 486
RgXV_prod 0
RgXV_rescale 2058
RgXV_to_RgM 67560
RgXV_unscale 5536
RgXX_to_RgM 276
RgXY_degreex 1615757
RgXY_derivx 3288
RgXY_swap 1758
RgXY_swapspec 27932
RgX_RgV_eval 142939
RgX_RgXQV_eval 0
RgX_RgXQ_eval 355597
RgX_RgXnV_eval 828
RgX_RgXn_eval 0
RgX_Rg_add 35692269
RgX_Rg_add_shallow 55451
RgX_Rg_div 25629641
RgX_Rg_divexact 4425677
RgX_Rg_eval_bk 0
RgX_Rg_mul 168857956
RgX_Rg_sub 1048917
RgX_Rg_translate 5174842
RgX_Rg_translate_FpX 0
RgX_Rg_translate_FpXQX 5
RgX_Rg_translate_basecase 4869676
RgX_Rg_translate_fast 5174842
RgX_Rg_translate_i 4869829
RgX_add 121730959
RgX_addmulXn 446028
RgX_addmulXn_shallow 8034014
RgX_addspec 189858
RgX_addspec_shallow 7481596
RgX_affine 25851
RgX_blocks 2320689
RgX_deflate 1011455
RgX_deriv 707314
RgX_digits 2772
RgX_div_by_X_x 223548
RgX_divrem 11801014
RgX_divrem_i 19673284
RgX_divs 2454
RgX_equal 21212367
RgX_even_odd 42284656
RgX_homogenize 15504
RgX_homogenize_deg 1080
RgX_homogenous_evalpow 335443
RgX_inflate 753865
RgX_integXn 48253
RgX_liftred 387128
RgX_mul 88063350
RgX_mul2n 55944
RgX_mulXn 2384045
RgX_mul_FpX 505681
RgX_mul_FpXQX 1659
RgX_mul_QXQX 145358
RgX_mul_fast 99565304
RgX_mul_i 32660593
RgX_mul_normalized 1431637
RgX_mulhigh_i 2219700
RgX_mulhigh_i2 1366413
RgX_muls 3378
RgX_mulspec 33906709
RgX_mulspec_basecase 28709374
RgX_mulspec_basecase_limb 93309852
RgX_neg 6201712
RgX_normalize 34038
RgX_pseudodivrem 10083
RgX_pseudorem 110885
RgX_recip 26307
RgX_recip_i 3153396
RgX_recip_shallow 50902
RgX_recipspec_shallow 2149227
RgX_rem 12495569
RgX_rem_FpX 57032
RgX_rem_FpXQX 56
RgX_rem_QXQX 42468
RgX_rem_fast 12495569
RgX_renormalize_lg 6640131
RgX_rescale 3692583
RgX_rotate_shallow 271626
RgX_shift 1167644
RgX_shift_shallow 147198306
RgX_splitting 37362
RgX_sqr 1108200
RgX_sqr_FpX 1200
RgX_sqr_FpXQX 160
RgX_sqr_QXQX 11476
RgX_sqr_fast 1118432
RgX_sqr_i 32195
RgX_sqrhigh_i 0
RgX_sqrhigh_i2 0
RgX_sqrspec 32251
RgX_sqrspec_basecase 32223
RgX_sqrspec_basecase_limb 82691
RgX_sub 61395429
RgX_to_RgC 12792597
RgX_unscale 44407
RgX_val 3145813
RgX_valrem 67505529
RgX_valrem_inexact 715304
RgXnV_red_shallow 414
RgXn_div 441637
RgXn_div_FpX 83
RgXn_div_FpXQX 0
RgXn_div_fast 1043246
RgXn_div_gen 1819901
RgXn_div_i 1043246
RgXn_eval 4773
RgXn_exp 0
RgXn_expint 45331
RgXn_inv 692087
RgXn_inv_FpX 72
RgXn_inv_FpXQX 0
RgXn_inv_fast 776810
RgXn_inv_i 776810
RgXn_mul 9282254
RgXn_mul2 8004558
RgXn_mul_basecase 5688682
RgXn_mulhigh 2171435
RgXn_powers 414
RgXn_powu 0
RgXn_powu_i 1956
RgXn_recip_shallow 545488
RgXn_red_shallow 6680630
RgXn_reverse 132
RgXn_sqr 10232
RgXn_sqr2 252
RgXn_sqr_basecase 0
RgXn_sqrhigh 12
RgXn_sqrt 6
RgXspec_kill0 68828335
Rg_RgX_sub 4215000
Rg_get_0 5849239
Rg_get_1 132157993
Rg_to_RgC 1161802
ZXQX_dvd 15129
ZXQ_powers 9896
ZXQ_powu 105660
ZX_unscale 577003
ZX_unscale2n 1633960
ZX_unscale_div 11109
ZX_unscale_divpow 1194
ZX_z_unscale 1002637
_RgX_divrem 10122
_RgX_mul 0
_ZXQmul 66977
_ZXQsqr 111705
_add 529807
_cmul 885185
_gen_add 16925931
_gen_cmul 439544
_gen_mul 1694928
_gen_nored 1845866
_gen_one 1882226
_gen_sqr 545092
_gen_sub 0
_gen_zero 20727
_mul 238923
_mulXn 3828
_one 867340
_oneXn 1656
_pow 75688
_red 615734
_sqr 63072
_sqrXn 10035
_sub 0
_zero 1052
_zeroXn 0
brent_kung_optpow 16647976
do_QXQ_eval 2993
gen_RgXQ_eval_powers 11712292
gen_bkeval 748506
gen_bkeval_powers 10187594
get_Rg_algebra 252881
rem 858871
rfrac_deflate 100
rfrac_deflate_max 100
rfrac_deflate_order 100
zero_FpXQX_mod 456
zero_FpX_mod 76743

Generated by: LCOV version 1.16