59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
import unittest
|
|
|
|
import lldb_fixed
|
|
|
|
|
|
class ParseFixedTypeTests(unittest.TestCase):
|
|
def test_direct_typenum_alias(self):
|
|
self.assertEqual(
|
|
lldb_fixed.parse_fixed_type("fixed::FixedI32<typenum::uint::U16>"),
|
|
(True, 32, 16),
|
|
)
|
|
|
|
def test_expanded_typenum(self):
|
|
type_name = (
|
|
"fixed::FixedI32<"
|
|
"typenum::uint::UInt<"
|
|
"typenum::uint::UInt<"
|
|
"typenum::uint::UInt<"
|
|
"typenum::uint::UInt<"
|
|
"typenum::uint::UInt<typenum::uint::UTerm, typenum::bit::B1>, "
|
|
"typenum::bit::B0>, typenum::bit::B0>, typenum::bit::B0>, "
|
|
"typenum::bit::B0>>"
|
|
)
|
|
self.assertEqual(lldb_fixed.parse_fixed_type(type_name), (True, 32, 16))
|
|
|
|
def test_unsigned_type(self):
|
|
self.assertEqual(
|
|
lldb_fixed.parse_fixed_type("fixed::FixedU64<typenum::uint::U24>"),
|
|
(False, 64, 24),
|
|
)
|
|
|
|
def test_unrelated_type(self):
|
|
self.assertIsNone(lldb_fixed.parse_fixed_type("core::primitive::i32"))
|
|
|
|
|
|
class FormatFixedTests(unittest.TestCase):
|
|
def test_q16_16(self):
|
|
self.assertEqual(lldb_fixed.format_fixed(3 << 15, 16), "1.5")
|
|
self.assertEqual(lldb_fixed.format_fixed(-(3 << 15), 16), "-1.5")
|
|
self.assertEqual(lldb_fixed.format_fixed(1, 16), "0.0000152587890625")
|
|
|
|
def test_integer_value_has_no_decimal_suffix(self):
|
|
self.assertEqual(lldb_fixed.format_fixed(12 << 16, 16), "12")
|
|
|
|
def test_q96_32(self):
|
|
raw = (1 << 100) + (1 << 31)
|
|
self.assertEqual(
|
|
lldb_fixed.format_fixed(raw, 32),
|
|
"295147905179352825856.5",
|
|
)
|
|
|
|
def test_twos_complement_normalization(self):
|
|
self.assertEqual(lldb_fixed.normalize_bits(0xFFFF8000, True, 32), -32768)
|
|
self.assertEqual(lldb_fixed.normalize_bits(0xFFFF8000, False, 32), 0xFFFF8000)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|