import unittest import lldb_fixed class ParseFixedTypeTests(unittest.TestCase): def test_direct_typenum_alias(self): self.assertEqual( lldb_fixed.parse_fixed_type("fixed::FixedI32"), (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::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"), (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()