summaryrefslogtreecommitdiff
path: root/tools/python-yasm/tests/test_intnum.py
blob: a2220180c5bf9a0cf2abaa4ca3a47c609679422c (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from tests import TestCase, add
from yasm import IntNum

class TIntNum(TestCase):
    legal_values = [
        0, 1, -1, 2, -2, 17, -17,
        2**31-1, -2**31, 2**31, 2**32-1, -2**32,
        2**63-1, -2**63-1, 2**63, 2**64, -2**64,
        2**127-1, -2**127
    ]
    overflow_values = [
        2**127, -2**127-1
    ]

    def test_to_from(self):
        for i in self.legal_values:
            self.assertEquals(i, int(IntNum(i)))
            self.assertEquals(i, long(IntNum(i)))

    def test_overflow(self):
        for i in self.overflow_values:
            self.assertRaises(OverflowError, IntNum, i)

    str_values = [
        "0", "00000", "1234", "87654321", "010101010", "FADCBEEF"
    ]
    base_values = [2, 8, 10, 12, 16, None, "nasm", "foo"]

    def test_from_str(self):
        pass

    def test_from_str_base(self):
        pass

    def test_exceptions(self):
        self.assertRaises(ZeroDivisionError, IntNum(1).__div__, 0)

        IntNum(1) / 1 # make sure the above error is cleared

        try: IntNum(1) / 0
        except ZeroDivisionError, err:
            self.assertEquals('divide by zero', str(err))

    def test_xor(self):
        a = IntNum(-234)
        b = IntNum(432)
        c = a ^ b
        self.assertEquals(a, -234)
        self.assertEquals(b, 432)
        self.assertEquals(c, -234 ^ 432)

    def test_ixor(self):
        a = IntNum(-234)
        b = IntNum(432)
        a ^= b; b ^= a; a ^= b
        self.assertEquals(a, 432)
        self.assertEquals(b, -234)

    def test_cmp(self):
        a = IntNum(-1)
        b = IntNum(0)
        c = IntNum(1)
        self.assert_(a < b < c)
        self.assert_(a <= b <= c)
        self.assert_(c >= b >= a)
        self.assert_(c > b > a)
        self.assert_(a != b != c)

    def test_abs(self):
        a = IntNum(-1)
        b = IntNum(0)
        c = IntNum(1)

        self.assertEquals(abs(a), abs(c))
        self.assertEquals(abs(a) - abs(c), abs(b))

add(TIntNum)