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 - language - eval.c (source / functions) Hit Total Coverage
Test: PARI/GP v2.18.1 lcov report (development 30702-bddb8d6928) Lines: 1251 1893 66.1 %
Date: 2026-02-23 02:23:56 Functions: 111 154 72.1 %
Legend: Lines: hit not hit

Function Name Sort by function name Hit count Sort by hit count
_bitprecision0 449
_prec 9637
_precision0 1061
bincopy_relink 0
bitprecision0 32
bitprecision00 481
break0 50300
change_compo 8304987
changelex 126320406
changevalue 24684559
check_array_index 87070003
checkprec 9566
checkvalue 96200726
checkvalueptr 19967658
closure_callgen0 6
closure_callgen0prec 156
closure_callgen1 7584978
closure_callgen1prec 57933
closure_callgen2 57463
closure_callgenall 0
closure_callgenvec 4229904
closure_callgenvecdef 261
closure_callgenvecdefprec 261
closure_callgenvecprec 0
closure_callvoid1 0
closure_castgen 75741093
closure_castlong 5034
closure_context 78
closure_disassemble 0
closure_err 10758
closure_eval 207798186
closure_evalbrk 150
closure_evalgen 27481019
closure_evalnobrk 55926640
closure_evalres 798432
closure_evalvoid 84623762
closure_func_err 11346
closure_relink 0
closure_return 39766615
closure_returnupto 11930695
closure_unlink 0
closure_varn 972600
copybin_unlink 0
copylex 8382021
copyupto 63027689
copyvalue 639647
disassemble_cast 0
err_var 0
evalstate_clone 0
evalstate_get_trace 982850
evalstate_reset 368
evalstate_restore 47481
evalstate_restore_err 36592
evalstate_save 1219986
evalstate_set_trace 18
freeep 29675
freelex 149460979
gen_relink 0
gen_unlink 0
get_and_reset_break 35661
get_arg_name 15
get_lex 41309931
get_localbitprec 17292445
get_localprec 17267444
get_next_label 206
getlocalbitprec 2926
getlocalprec 10
gp_call 91890
gp_call2 78
gp_callbool 737175
gp_callprec 20124
gp_callvoid 0
gp_eval 29228221
gp_evalbool 18714024
gp_evalprec 15204
gp_evalupto 1572223
gp_evalvoid 3102645
gp_evalvoid2 1278
hash_from_link 0
localbitprec 2858
localprec 6715
loop_break 78774646
lvar_make_safe 0
negcmp 0
new_ptr 47658835
new_val_cell 15924
next0 20490
opcode_need_relink 0
pareval 0
pareval_worker 0
parfor 167
parfor0 167
parfor_init 0
parfor_next 0
parfor_stop 0
parfor_worker 1238
parforeach 5
parforeach0 5
parforeach_init 0
parforeach_next 0
parforeach_stop 0
parforiter_init 0
parforiter_next 0
parforiter_stop 0
parforprime 5
parforprime0 5
parforprime_init 0
parforprime_next 0
parforprime_stop 0
parforprimestep 10
parforprimestep0 5
parforprimestep_init 0
parforstep 15
parforstep0 15
parforstep_init 0
parforstep_next 0
parforstep_stop 0
parforvec 15
parforvec0 15
parforvec_init 0
parforvec_next 0
parforvec_stop 0
pari_close_evaluator 1499
pari_init_evaluator 1499
pari_self 25
parsum 1749
parsum_slice_worker 3997
parvector 5
parvector_worker 55
pop_lex 4536818
pop_localprec 74467
pop_val 15548
pop_val_if_newer 359949
precision0 32
precision00 1093
ptr_proplock 8480619
push_lex 4674259
push_localbitprec 84057
push_localprec 74509
pushlex 48047957
pushvalue 30
reset_break 83510
restore_trace 4584299
restore_vars 207787868
return0 35001
safeel 0
safegcoeff 0
safegel 0
safelistel 0
set_lex 64969160
setreflex 432
st_alloc 2307043231
trace_push 212335222
zerovalue 10

Generated by: LCOV version 1.16