1 # SPDX-License-Identifier: LGPL-2.1-or-later
2 # See Notices.txt for copyright information
5 import power_instruction_analyzer
as pia
8 class TestOverflowFlags(unittest
.TestCase
):
9 def test_text_signature(self
):
10 self
.assertEqual(pia
.OverflowFlags
.__text
_signature
__,
11 "(overflow, overflow32)")
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)
18 self
.assertEqual(v
.overflow
, True)
20 self
.assertEqual(v
.overflow32
, False)
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)")
30 class TestDivInput(unittest
.TestCase
):
31 def test_text_signature(self
):
32 self
.assertEqual(pia
.DivInput
.__text
_signature
__,
33 "(dividend, divisor, result_prev)")
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)
41 self
.assertEqual(v
.dividend
, 1234)
43 self
.assertEqual(v
.divisor
, 4567)
45 self
.assertEqual(v
.result_prev
, 7890)
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)")
55 class TestDivResult(unittest
.TestCase
):
56 def test_text_signature(self
):
57 self
.assertEqual(pia
.DivResult
.__text
_signature
__,
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)
68 self
.assertEqual(v
.result
, 123)
70 self
.assertIsNone(v
.overflow
)
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))")
81 class TestDivInstrs(unittest
.TestCase
):
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"}'),
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
)
103 self
.assertEqual(str(results
), expected
)
106 if __name__
== "__main__":