]> www.ginac.de Git - cln.git/blob - tests/test_I_xgcd.cc
Make GCC compiler flags default to -O
[cln.git] / tests / test_I_xgcd.cc
1 #include "test_I.h"
2
3 int test_I_xgcd (int iterations)
4 {
5         int error = 0;
6         int i;
7         // Check against gcd.
8         for (i = iterations; i > 0; i--) {
9                 cl_I a = testrandom_I();
10                 cl_I b = testrandom_I();
11                 cl_I u, v;
12                 cl_I g = xgcd(a,b,&u,&v);
13                 ASSERT3(g == gcd(a,b), a,b,g);
14                 ASSERT4(g == u*a+v*b, a,b,u,v);
15                 if (a != 0 && b != 0) {
16                         if (abs(a) == abs(b)) {
17                                 ASSERT4((u == signum(a) && v == 0) || (u == 0 && v == signum(b)), a,b,u,v);
18                         }
19                         else if (mod(abs(a),abs(b)) == 0) {
20                                 ASSERT4(u == 0 && v == signum(b), a,b,u,v);
21                         }
22                         else if (mod(abs(b),abs(a)) == 0) {
23                                 ASSERT4(u == signum(a) && v == 0, a,b,u,v);
24                         }
25                         else {
26                                 ASSERT4(abs(u) <= floor1(abs(b),2*g) && abs(v) <= floor1(abs(a),2*g), a,b,u,v);
27                         }
28                 }
29         }
30         return error;
31 }