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:
- with GMP kernel
- with GMP kernel using --mt=pthread
- with native kernel, including micro-assembler code
- with native kernel, without micro-assembler
- with native kernel, without micro-assembler, disabling GCC extensions
(DISABLE_INLINE)
- with GMP kernel, emulating an
x86_32
architecture at
Configure time via setarch
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 |
|
|
|
|
Line data Source code
1 : #line 2 "../src/kernel/none/cmp.c"
2 : /* Copyright (C) 2002-2003 The PARI group.
3 :
4 : This file is part of the PARI/GP package.
5 :
6 : PARI/GP is free software; you can redistribute it and/or modify it under the
7 : terms of the GNU General Public License as published by the Free Software
8 : Foundation; either version 2 of the License, or (at your option) any later
9 : version. It is distributed in the hope that it will be useful, but WITHOUT
10 : ANY WARRANTY WHATSOEVER.
11 :
12 : Check the License for details. You should have received a copy of it, along
13 : with the package; see the file 'COPYING'. If not, write to the Free Software
14 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
15 :
16 :
17 : /********************************************************************/
18 : /** **/
19 : /** Comparison routines **/
20 : /** **/
21 : /********************************************************************/
22 :
23 : /*They depend on cmpiispec and equaliispec in mp.c*/
24 :
25 : int
26 457111009 : equalii(GEN x, GEN y)
27 : {
28 457111009 : if ((x[1] & (LGBITS|SIGNBITS)) != (y[1] & (LGBITS|SIGNBITS))) return 0;
29 418137941 : return equaliispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
30 : }
31 :
32 : int
33 597301553 : cmpii(GEN x, GEN y)
34 : {
35 597301553 : const long sx = signe(x), sy = signe(y);
36 597301553 : if (sx<sy) return -1;
37 580305145 : if (sx>sy) return 1;
38 565807756 : if (!sx) return 0;
39 555563044 : if (sx>0)
40 536248936 : return cmpiispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
41 : else
42 19314108 : return -cmpiispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
43 : }
44 :
45 : int
46 248427 : equalrr(GEN x, GEN y)
47 : {
48 : long lx, ly, i;
49 :
50 248427 : if (!signe(x)) {
51 168 : if (!signe(y)) return 1; /* all zeroes are equal */
52 28 : return expo(x) >= expo(y);
53 : }
54 248259 : if (!signe(y))
55 42 : return expo(y) >= expo(x);
56 :
57 248217 : if (x[1] != y[1]) return 0;
58 :
59 244609 : lx = lg(x);
60 244609 : ly = lg(y);
61 244609 : if (lx < ly)
62 : {
63 7 : i=2; while (i<lx && x[i]==y[i]) i++;
64 7 : if (i<lx) return 0;
65 0 : for (; i < ly; i++) if (y[i]) return 0;
66 : }
67 : else
68 : {
69 409793 : i=2; while (i<ly && x[i]==y[i]) i++;
70 244602 : if (i<ly) return 0;
71 19208 : for (; i < lx; i++) if (x[i]) return 0;
72 : }
73 19208 : return 1;
74 : }
75 :
76 : int
77 151714812 : cmprr(GEN x, GEN y)
78 : {
79 151714812 : const long sx = signe(x), sy = signe(y);
80 : long ex,ey,lx,ly,lz,i;
81 :
82 151714812 : if (!sx) {
83 2733755 : if (!sy || expo(x) >= expo(y)) return 0;
84 2624482 : return sy > 0? -1: 1;
85 : }
86 148981057 : if (!sy) {
87 631011 : if (expo(y) >= expo(x)) return 0;
88 630861 : return sx > 0? 1: -1;
89 : }
90 148350046 : if (sx<sy) return -1;
91 148089478 : if (sx>sy) return 1;
92 :
93 148055239 : ex=expo(x); ey=expo(y);
94 148055239 : if (ex>ey) return sx;
95 87015063 : if (ex<ey) return -sx;
96 :
97 45650537 : lx=lg(x); ly=lg(y); lz = (lx<ly)?lx:ly;
98 131214001 : i=2; while (i<lz && x[i]==y[i]) i++;
99 45650537 : if (i<lz) return ((ulong)x[i] > (ulong)y[i]) ? sx : -sx;
100 24328002 : if (lx>=ly)
101 : {
102 24338472 : while (i<lx && !x[i]) i++;
103 24338472 : return (i==lx) ? 0 : sx;
104 : }
105 27 : while (i<ly && !y[i]) i++;
106 12 : return (i==ly) ? 0 : -sx;
107 : }
108 :
109 : /* x and y are integers. Return 1 if |x| == |y|, 0 otherwise */
110 : int
111 57692527 : absequalii(GEN x, GEN y)
112 : {
113 57692527 : if (!signe(x)) return !signe(y);
114 57691057 : if (!signe(y)) return 0;
115 57690770 : return equaliispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
116 : }
117 :
118 : /* x and y are integers. Return sign(|x| - |y|) */
119 : int
120 2526394930 : abscmpii(GEN x, GEN y)
121 : {
122 2526394930 : if (!signe(x)) return signe(y)? -1: 0;
123 2115348335 : if (!signe(y)) return 1;
124 1765905646 : return cmpiispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
125 : }
126 :
127 : /* x and y are reals. Return sign(|x| - |y|) */
128 : int
129 333875778 : abscmprr(GEN x, GEN y)
130 : {
131 : long ex,ey,lx,ly,lz,i;
132 :
133 333875778 : if (!signe(x)) return signe(y)? -1: 0;
134 333203133 : if (!signe(y)) return 1;
135 :
136 332963322 : ex=expo(x); ey=expo(y);
137 332963322 : if (ex>ey) return 1;
138 215156586 : if (ex<ey) return -1;
139 :
140 136496480 : lx=lg(x); ly=lg(y); lz = (lx<ly)?lx:ly;
141 255334948 : i=2; while (i<lz && x[i]==y[i]) i++;
142 136496480 : if (i<lz) return ((ulong)x[i] > (ulong)y[i])? 1: -1;
143 33200259 : if (lx>=ly)
144 : {
145 33200359 : while (i<lx && !x[i]) i++;
146 33200359 : return (i==lx)? 0: 1;
147 : }
148 0 : while (i<ly && !y[i]) i++;
149 0 : return (i==ly)? 0: -1;
150 : }
151 :
|