Add script to debug fixed point numbers in lldb
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user