2 #define floor(a,b) ((a) / (b))
4 int test_I_sqrtp (int iterations)
8 // Check against isqrt.
9 for (i = iterations; i > 0; i--) {
10 cl_I a = testrandom_I();
13 cl_boolean squarep = sqrtp(a,&w);
15 cl_boolean correct_squarep = isqrt(a,&correct_w);
16 ASSERT1(squarep == correct_squarep, a);
18 ASSERT1(w == correct_w, a);
21 // Check certain special cases.
22 for (i = iterations; i > 0; i--) {
23 cl_I a = abs(testrandom_I());
25 // Check a^2 is a square.
26 ASSERT1(sqrtp(a*a,&w) && w == a, a);
27 // Check a^2+1 is not a square, except when a=0.
28 if (a > 0) ASSERT1(!isqrt(a*a+1,&w) && w == a, a);
29 // Check a^2+2*a is not a square, except when a=0.
30 ASSERT1(isqrt(a*(a+2),&w)==(a==0) && w == a, a);