aboutsummaryrefslogtreecommitdiff
path: root/biginttest.py
blob: 71c541717efb122fa55e6b2d58fd376ea4de5c86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python3
import sys, random, subprocess

ntimes=10000
maxn=1e100

def check(desc,x,y):
	if x==y: return
	print("{}: {} != {}".format(desc,x,y))
	assert False

def gendata():
	for _ in range(ntimes):
		yield random.randint(-maxn,maxn), random.randint(-maxn,maxn)

def proctest():
	proc=subprocess.Popen(["./main"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=sys.stderr)

	for (a,b) in gendata():
		proc.stdin.write("div {} {}\n".format(a,b).encode("ascii"))
		proc.stdin.write("mod {} {}\n".format(a,b).encode("ascii"))
		proc.stdin.flush()

		q=int(proc.stdout.readline())
		r=int(proc.stdout.readline())
		if r<0 or r>=abs(b) or a!=q*b+r:
			print("Error: {} divmod {}".format(a,b))
			print("Diff: {}".format(a-q*b-r))
			sys.exit(1)

	proc.kill()

def justprint():
	for (a,b) in gendata():
		print("div {} {}".format(a,b))
		print("mod {} {}".format(a,b))

#justprint()
proctest()