1 from tests import TestCase, add 2 from yasm import IntNum 3 4 class TIntNum(TestCase): 5 legal_values = [ 6 0, 1, -1, 2, -2, 17, -17, 7 2**31-1, -2**31, 2**31, 2**32-1, -2**32, 8 2**63-1, -2**63-1, 2**63, 2**64, -2**64, 9 2**127-1, -2**127 10 ] 11 overflow_values = [ 12 2**127, -2**127-1 13 ] 14 15 def test_to_from(self): 16 for i in self.legal_values: 17 self.assertEquals(i, int(IntNum(i))) 18 self.assertEquals(i, long(IntNum(i))) 19 20 def test_overflow(self): 21 for i in self.overflow_values: 22 self.assertRaises(OverflowError, IntNum, i) 23 24 str_values = [ 25 "0", "00000", "1234", "87654321", "010101010", "FADCBEEF" 26 ] 27 base_values = [2, 8, 10, 12, 16, None, "nasm", "foo"] 28 29 def test_from_str(self): 30 pass 31 32 def test_from_str_base(self): 33 pass 34 35 def test_exceptions(self): 36 self.assertRaises(ZeroDivisionError, IntNum(1).__div__, 0) 37 38 IntNum(1) / 1 # make sure the above error is cleared 39 40 try: IntNum(1) / 0 41 except ZeroDivisionError, err: 42 self.assertEquals('divide by zero', str(err)) 43 44 def test_xor(self): 45 a = IntNum(-234) 46 b = IntNum(432) 47 c = a ^ b 48 self.assertEquals(a, -234) 49 self.assertEquals(b, 432) 50 self.assertEquals(c, -234 ^ 432) 51 52 def test_ixor(self): 53 a = IntNum(-234) 54 b = IntNum(432) 55 a ^= b; b ^= a; a ^= b 56 self.assertEquals(a, 432) 57 self.assertEquals(b, -234) 58 59 def test_cmp(self): 60 a = IntNum(-1) 61 b = IntNum(0) 62 c = IntNum(1) 63 self.assert_(a < b < c) 64 self.assert_(a <= b <= c) 65 self.assert_(c >= b >= a) 66 self.assert_(c > b > a) 67 self.assert_(a != b != c) 68 69 def test_abs(self): 70 a = IntNum(-1) 71 b = IntNum(0) 72 c = IntNum(1) 73 74 self.assertEquals(abs(a), abs(c)) 75 self.assertEquals(abs(a) - abs(c), abs(b)) 76 77 add(TIntNum) 78