1import struct
2
3class Count(object):
4    def __init__(self):
5        self.count = 0
6
7    def next(self):
8        self.count += 1
9        return self.count
10counter = Count()
11
12
13def split32(long_int, n):
14    """Split long_int into n 32-bit words big-endian"""
15
16    assert(long_int >= 0)
17
18    result = []
19    for x in range(n):
20        result += [ "0x%08xUL" % (long_int & (2**32-1)) ]
21        long_int >>= 32
22    return result
23
24
25def split64(long_int):
26    """Split long_int into 64-bit words big-endian"""
27
28    assert(long_int >= 0)
29
30    if long_int == 0:
31        return [ "0" ]
32
33    result = []
34    while long_int:
35        result += [ "0x%xULL" % (long_int & (2**64-1)) ]
36        long_int >>= 64
37    return result
38
39def inverse(x, modulus):
40    if modulus == 0:
41        raise ZeroDivisionError("Modulus cannot be zero")
42    if modulus < 0:
43        raise ValueError("Modulus cannot be negative")
44    r_p, r_n = x, modulus
45    s_p, s_n = 1, 0
46    while r_n > 0:
47        q = r_p // r_n
48        r_p, r_n = r_n, r_p - q * r_n
49        s_p, s_n = s_n, s_p - q * s_n
50    if r_p != 1:
51        raise ValueError("No inverse value can be computed" + str(r_p))
52    while s_p < 0:
53        s_p += modulus
54    return s_p
55
56
57def bin2int(bs):
58    res = 0
59    while len(bs) > 0:
60        res = res*256 + struct.unpack("B", bs[:1])[0]
61        bs = bs[1:]
62    return res
63
64
65def make_main():
66    print "int main(void) {"
67    for i in xrange(1, counter.next()):
68        print "    test_%d();" % i
69    print "    return 0;"
70    print "}"
71
72
73