added some binomial checks and test cases
[p2pool.git] / p2pool / test / util / test_math.py
1 import random
2 import unittest
3
4 from p2pool.util import math
5
6 def generate_alphabet():
7     if random.randrange(2):
8         return None
9     else:
10         a = map(chr, xrange(256))
11         random.shuffle(a)
12         return a[:random.randrange(2, len(a))]
13
14 class Test(unittest.TestCase):
15     def test_add_tuples(self):
16         assert math.add_tuples((1, 2, 3), (4, 5, 6)) == (5, 7, 9)
17     
18     def test_bases(self):
19         for i in xrange(10):
20             alphabet = generate_alphabet()
21             for i in xrange(100):
22                 n = random.randrange(100000000000000000000000000000)
23                 s = math.natural_to_string(n, alphabet)
24                 n2 = math.string_to_natural(s, alphabet)
25                 #print n, s.encode('hex'), n2
26                 self.assertEquals(n, n2)
27     
28     def test_binom(self):
29         for n in xrange(100):
30             for x in xrange(n + 1):
31                 left, right = math.binomial_conf_interval(x, n)
32                 assert left >= 0 and right <= 1