]> www.ginac.de Git - cln.git/blob - tests/test_I_ilength.cc
- Fixed a logic error in the checks of gmp3.
[cln.git] / tests / test_I_ilength.cc
1 #include "test_I.h"
2
3 int test_I_integer_length (int iterations)
4 {
5         int error = 0;
6         int i;
7         // Check against ash.
8         for (i = iterations; i > 0; i--) {
9                 cl_I a = testrandom_I();
10                 uintL l = integer_length(a);
11                 if (a >= 0) {
12 #if !(defined(__GNUC__) && (__GNUC_MINOR__ < 8))
13                         ASSERT1(a < ash(1,l) && (a == 0 ? l == 0 : l > 0 && a >= ash(1,l-1)), a);
14 #else // work around g++ 2.7.0 bug
15                         int b = 0;
16                         if (a < ash(1,l)) {
17                                 if (a == 0)
18                                         b = (l == 0);
19                                 else
20                                         b = (l > 0 && a >= ash(1,l-1));
21                         }
22                         ASSERT1(b, a);
23 #endif
24                 } else {
25 #if !(defined(__GNUC__) && (__GNUC_MINOR__ < 8))
26                         ASSERT1(a >= ash(-1,l) && (a == -1 ? l == 0 : l > 0 && a < ash(-1,l-1)), a);
27 #else // work around g++ 2.7.0 bug
28                         int b = 0;
29                         if (a >= ash(-1,l)) {
30                                 if (a == -1)
31                                         b = (l == 0);
32                                 else
33                                         b = (l > 0 && a < ash(-1,l-1));
34                         }
35                         ASSERT1(b, a);
36 #endif
37                 }
38         }
39         return error;
40 }