| 1 |
kreckel |
1.1 |
#include "test_I.h"
|
| 2 |
|
|
#define floor(a,b) ((a) / (b))
|
| 3 |
|
|
|
| 4 |
|
|
int test_sqrtp (void)
|
| 5 |
|
|
{
|
| 6 |
|
|
int error = 0;
|
| 7 |
|
|
// As our algorithm for sqrtp does pre-filtering mod (64*63*65*11),
|
| 8 |
|
|
// we check that no square is thrown away by this pre-filtering.
|
| 9 |
|
|
{
|
| 10 |
|
|
uintL a, b, c, d;
|
| 11 |
|
|
for (a = 0; a <= floor(64,2); a++)
|
| 12 |
|
|
for (b = 0; b <= floor(63,2); b++)
|
| 13 |
|
|
for (c = 0; c <= floor(65,2); c++)
|
| 14 |
|
|
for (d = 0; d <= floor(11,2); d++) {
|
| 15 |
|
|
// Produce a number x == a mod 64, x == b mod 63,
|
| 16 |
|
|
// x == c mod 65, x == d mod 11, and square it.
|
| 17 |
|
|
uintL x = 1306305*a + 1967680*b + 133056*c + 2358720*d;
|
| 18 |
|
|
x = x % 2882880; // not strictly necessary
|
| 19 |
|
|
cl_I w;
|
| 20 |
|
|
ASSERT4(sqrtp(expt_pos(x,2),&w) && w == x, a,b,c,d);
|
| 21 |
|
|
}
|
| 22 |
|
|
}
|
| 23 |
|
|
return error;
|
| 24 |
|
|
}
|