xref: /inferno-os/libmp/mtest.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include <u.h>
2*37da2899SCharles.Forsyth #include <libc.h>
3*37da2899SCharles.Forsyth #include <mp.h>
4*37da2899SCharles.Forsyth #include "port/dat.h"
5*37da2899SCharles.Forsyth 
6*37da2899SCharles.Forsyth int loops = 1;
7*37da2899SCharles.Forsyth 
8*37da2899SCharles.Forsyth long randomreg;
9*37da2899SCharles.Forsyth 
10*37da2899SCharles.Forsyth void
srand(long seed)11*37da2899SCharles.Forsyth srand(long seed)
12*37da2899SCharles.Forsyth {
13*37da2899SCharles.Forsyth 	randomreg = seed;
14*37da2899SCharles.Forsyth }
15*37da2899SCharles.Forsyth 
16*37da2899SCharles.Forsyth long
lrand(void)17*37da2899SCharles.Forsyth lrand(void)
18*37da2899SCharles.Forsyth {
19*37da2899SCharles.Forsyth 	randomreg = randomreg*104381 + 81761;
20*37da2899SCharles.Forsyth 	return randomreg;
21*37da2899SCharles.Forsyth }
22*37da2899SCharles.Forsyth 
23*37da2899SCharles.Forsyth void
prng(uchar * p,int n)24*37da2899SCharles.Forsyth prng(uchar *p, int n)
25*37da2899SCharles.Forsyth {
26*37da2899SCharles.Forsyth 	while(n-- > 0)
27*37da2899SCharles.Forsyth 		*p++ = lrand();
28*37da2899SCharles.Forsyth }
29*37da2899SCharles.Forsyth 
30*37da2899SCharles.Forsyth 
31*37da2899SCharles.Forsyth void
testshift(char * str)32*37da2899SCharles.Forsyth testshift(char *str)
33*37da2899SCharles.Forsyth {
34*37da2899SCharles.Forsyth 	mpint *b1, *b2;
35*37da2899SCharles.Forsyth 	int i;
36*37da2899SCharles.Forsyth 
37*37da2899SCharles.Forsyth 	b1 = strtomp(str, nil, 16, nil);
38*37da2899SCharles.Forsyth 	malloccheck();
39*37da2899SCharles.Forsyth fprint(2, "A");
40*37da2899SCharles.Forsyth 	b2 = mpnew(0);
41*37da2899SCharles.Forsyth fprint(2, "B");
42*37da2899SCharles.Forsyth 	malloccheck();
43*37da2899SCharles.Forsyth 	mpleft(b1, 20, b2);
44*37da2899SCharles.Forsyth fprint(2, "C");
45*37da2899SCharles.Forsyth 	malloccheck();
46*37da2899SCharles.Forsyth 	mpfree(b1);
47*37da2899SCharles.Forsyth fprint(2, "D");
48*37da2899SCharles.Forsyth 	malloccheck();
49*37da2899SCharles.Forsyth 	mpfree(b2);
50*37da2899SCharles.Forsyth }
51*37da2899SCharles.Forsyth 
52*37da2899SCharles.Forsyth void
main(int argc,char ** argv)53*37da2899SCharles.Forsyth main(int argc, char **argv)
54*37da2899SCharles.Forsyth {
55*37da2899SCharles.Forsyth 	mpint *x, *y;
56*37da2899SCharles.Forsyth 
57*37da2899SCharles.Forsyth 	ARGBEGIN{
58*37da2899SCharles.Forsyth 	case 'n':
59*37da2899SCharles.Forsyth 		loops = atoi(ARGF());
60*37da2899SCharles.Forsyth 		break;
61*37da2899SCharles.Forsyth 	}ARGEND;
62*37da2899SCharles.Forsyth 
63*37da2899SCharles.Forsyth 	fmtinstall('B', mpfmt);
64*37da2899SCharles.Forsyth 	fmtinstall('Q', mpfmt);
65*37da2899SCharles.Forsyth 	srand(0);
66*37da2899SCharles.Forsyth 	mpsetminbits(2*Dbits);
67*37da2899SCharles.Forsyth 	testshift("1111111111111111");
68*37da2899SCharles.Forsyth 	print("done\n");
69*37da2899SCharles.Forsyth 	exits(0);
70*37da2899SCharles.Forsyth }
71