xref: /plan9/sys/src/cmd/unix/drawterm/libmp/crttest.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include "os.h"
2*8ccd4a63SDavid du Colombier #include <mp.h>
3*8ccd4a63SDavid du Colombier #include <libsec.h>
4*8ccd4a63SDavid du Colombier 
5*8ccd4a63SDavid du Colombier void
testcrt(mpint ** p)6*8ccd4a63SDavid du Colombier testcrt(mpint **p)
7*8ccd4a63SDavid du Colombier {
8*8ccd4a63SDavid du Colombier 	CRTpre *crt;
9*8ccd4a63SDavid du Colombier 	CRTres *res;
10*8ccd4a63SDavid du Colombier 	mpint *m, *x, *y;
11*8ccd4a63SDavid du Colombier 	int i;
12*8ccd4a63SDavid du Colombier 
13*8ccd4a63SDavid du Colombier 	fmtinstall('B', mpconv);
14*8ccd4a63SDavid du Colombier 
15*8ccd4a63SDavid du Colombier 	// get a modulus and a test number
16*8ccd4a63SDavid du Colombier 	m = mpnew(1024+160);
17*8ccd4a63SDavid du Colombier 	mpmul(p[0], p[1], m);
18*8ccd4a63SDavid du Colombier 	x = mpnew(1024+160);
19*8ccd4a63SDavid du Colombier 	mpadd(m, mpone, x);
20*8ccd4a63SDavid du Colombier 
21*8ccd4a63SDavid du Colombier 	// do the precomputation for crt conversion
22*8ccd4a63SDavid du Colombier 	crt = crtpre(2, p);
23*8ccd4a63SDavid du Colombier 
24*8ccd4a63SDavid du Colombier 	// convert x to residues
25*8ccd4a63SDavid du Colombier 	res = crtin(crt, x);
26*8ccd4a63SDavid du Colombier 
27*8ccd4a63SDavid du Colombier 	// convert back
28*8ccd4a63SDavid du Colombier 	y = mpnew(1024+160);
29*8ccd4a63SDavid du Colombier 	crtout(crt, res, y);
30*8ccd4a63SDavid du Colombier 	print("x %B\ny %B\n", x, y);
31*8ccd4a63SDavid du Colombier 	mpfree(m);
32*8ccd4a63SDavid du Colombier 	mpfree(x);
33*8ccd4a63SDavid du Colombier 	mpfree(y);
34*8ccd4a63SDavid du Colombier }
35*8ccd4a63SDavid du Colombier 
36*8ccd4a63SDavid du Colombier void
main(void)37*8ccd4a63SDavid du Colombier main(void)
38*8ccd4a63SDavid du Colombier {
39*8ccd4a63SDavid du Colombier 	int i;
40*8ccd4a63SDavid du Colombier 	mpint *p[2];
41*8ccd4a63SDavid du Colombier 	long start;
42*8ccd4a63SDavid du Colombier 
43*8ccd4a63SDavid du Colombier 	start = time(0);
44*8ccd4a63SDavid du Colombier 	for(i = 0; i < 10; i++){
45*8ccd4a63SDavid du Colombier 		p[0] = mpnew(1024);
46*8ccd4a63SDavid du Colombier 		p[1] = mpnew(1024);
47*8ccd4a63SDavid du Colombier 		DSAprimes(p[0], p[1], nil);
48*8ccd4a63SDavid du Colombier 		testcrt(p);
49*8ccd4a63SDavid du Colombier 		mpfree(p[0]);
50*8ccd4a63SDavid du Colombier 		mpfree(p[1]);
51*8ccd4a63SDavid du Colombier 	}
52*8ccd4a63SDavid du Colombier 	print("%d secs with more\n", time(0)-start);
53*8ccd4a63SDavid du Colombier 	exits(0);
54*8ccd4a63SDavid du Colombier }
55