da954a01703ab4da167c78561f692fc482a35e13
[power-instruction-analyzer.git] / tests / test_power_instruction_analyzer.py
1 # SPDX-License-Identifier: LGPL-2.1-or-later
2 # See Notices.txt for copyright information
3
4 import unittest
5 import power_instruction_analyzer as pia
6
7
8 class TestOverflowFlags(unittest.TestCase):
9 def test_text_signature(self):
10 self.assertEqual(pia.OverflowFlags.__text_signature__,
11 "(overflow, overflow32)")
12
13 def test_fields(self):
14 v = pia.OverflowFlags(overflow=False, overflow32=True)
15 self.assertEqual(v.overflow, False)
16 self.assertEqual(v.overflow32, True)
17 v.overflow = True
18 self.assertEqual(v.overflow, True)
19 v.overflow32 = False
20 self.assertEqual(v.overflow32, False)
21
22 def test_str_repr(self):
23 v = pia.OverflowFlags(overflow=False, overflow32=True)
24 self.assertEqual(str(v),
25 '{"overflow":false,"overflow32":true}')
26 self.assertEqual(repr(v),
27 "OverflowFlags(overflow=False, overflow32=True)")
28
29
30 class TestDivInput(unittest.TestCase):
31 def test_text_signature(self):
32 self.assertEqual(pia.DivInput.__text_signature__,
33 "(dividend, divisor, result_prev)")
34
35 def test_fields(self):
36 v = pia.DivInput(dividend=123, divisor=456, result_prev=789)
37 self.assertEqual(v.dividend, 123)
38 self.assertEqual(v.divisor, 456)
39 self.assertEqual(v.result_prev, 789)
40 v.dividend = 1234
41 self.assertEqual(v.dividend, 1234)
42 v.divisor = 4567
43 self.assertEqual(v.divisor, 4567)
44 v.result_prev = 7890
45 self.assertEqual(v.result_prev, 7890)
46
47 def test_str_repr(self):
48 v = pia.DivInput(dividend=123, divisor=456, result_prev=789)
49 self.assertEqual(str(v),
50 '{"dividend":"0x7B","divisor":"0x1C8","result_prev":"0x315"}')
51 self.assertEqual(repr(v),
52 "DivInput(dividend=123, divisor=456, result_prev=789)")
53
54
55 class TestDivResult(unittest.TestCase):
56 def test_text_signature(self):
57 self.assertEqual(pia.DivResult.__text_signature__,
58 "(result, overflow)")
59
60 def test_fields(self):
61 v = pia.DivResult(result=1234,
62 overflow=pia.OverflowFlags(overflow=False, overflow32=True))
63 self.assertEqual(v.result, 1234)
64 self.assertIsNotNone(v.overflow)
65 self.assertEqual(v.overflow.overflow, False)
66 self.assertEqual(v.overflow.overflow32, True)
67 v.result = 123
68 self.assertEqual(v.result, 123)
69 v.overflow = None
70 self.assertIsNone(v.overflow)
71
72 def test_str_repr(self):
73 v = pia.DivResult(result=1234,
74 overflow=pia.OverflowFlags(overflow=False, overflow32=True))
75 self.assertEqual(str(v),
76 '{"result":"0x4D2","overflow":false,"overflow32":true}')
77 self.assertEqual(repr(v),
78 "DivResult(result=1234, overflow=OverflowFlags(overflow=False, overflow32=True))")
79
80
81 class TestDivInstrs(unittest.TestCase):
82 cases = [
83 ("divdeo", '{"result":"0x0","overflow":true,"overflow32":true}'),
84 ("divdeuo", '{"result":"0x0","overflow":true,"overflow32":true}'),
85 ("divdo", '{"result":"0x36","overflow":false,"overflow32":false}'),
86 ("divduo", '{"result":"0x36","overflow":false,"overflow32":false}'),
87 ("divweo", '{"result":"0x0","overflow":true,"overflow32":true}'),
88 ("divweuo", '{"result":"0x0","overflow":true,"overflow32":true}'),
89 ("divwo", '{"result":"0x36","overflow":false,"overflow32":false}'),
90 ("divwuo", '{"result":"0x36","overflow":false,"overflow32":false}'),
91 ("modsd", '{"result":"0x10"}'),
92 ("modud", '{"result":"0x10"}'),
93 ("modsw", '{"result":"0x10"}'),
94 ("moduw", '{"result":"0x10"}'),
95 ]
96
97 def test(self):
98 v = pia.DivInput(dividend=0x1234, divisor=0x56, result_prev=0x789)
99 for fn_name, expected in self.cases:
100 with self.subTest(fn_name=fn_name):
101 fn = getattr(pia, fn_name)
102 results = fn(v)
103 self.assertEqual(str(results), expected)
104
105
106 if __name__ == "__main__":
107 unittest.main()