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