Revision 24d2dc18e53205337a4bb9bc2dd1f9faa17798e3 authored by Lionel Muller on 07 October 2011, 09:58:47 UTC, committed by Lionel Muller on 07 October 2011, 09:58:47 UTC
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/cado-nfs/trunk@957 3eaf19af-ecc0-40f6-b43f-672aa0c71c71
1 parent 171f670
test-rootfinder.c
#include "rootfinder.h"
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
int cmp(mpz_t * a, mpz_t * b)
{
return mpz_cmp(*a, *b);
}
int main(int argc, char *argv[])
{
mpz_t p;
int i;
int d;
mpz_t *f;
mpz_t *r;
d = argc - 3;
if (d < 1) {
fprintf(stderr, "Usage: test-rootfinder p a_d [...] a_1 a_0\n");
exit(1);
}
mpz_init_set_str(p, argv[1], 0);
f = (mpz_t *) malloc((d + 1) * sizeof(mpz_t));
r = (mpz_t *) malloc((d + 1) * sizeof(mpz_t));
for (i = 0; i <= d; i++) {
mpz_init_set_str(f[i], argv[2 + d - i], 0);
mpz_init(r[i]);
}
int n = poly_roots(r, f, d, p);
qsort(r, n, sizeof(mpz_t), (int(*)(const void *, const void*)) cmp);
if (n > 0) {
gmp_printf("%Zu", r[0]);
for (i = 1; i < n; i++)
gmp_printf(" %Zu", r[i]);
printf("\n");
}
for (i = 0; i <= d; i++) {
mpz_clear(f[i]);
mpz_clear(r[i]);
}
mpz_clear(p);
return 0;
}
#if 0
// magma code for producing test cases.
s:=1.2;
p:=10;
while p lt 2^200 do
for i in [1..100] do
p:=NextPrime(p);
d:=Random([2..7]);
coeffs:=[Random(GF(p)):i in [0..d]];
F:=PolynomialRing(GF(p))!coeffs;
printf "in %o", p;
for c in Reverse(coeffs) do printf " %o", c; end for;
printf "\n";
r:=Sort([x[1]: x in Roots(F) ]);
printf "out";
for c in r do printf " %o", c; end for;
printf "\n";
end for;
p := Ceiling(p*s);
end while;
#endif
Computing file changes ...