xref: /llvm-project/lldb/test/API/lang/c/complex_int/TestComplexInt.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1"""
2Tests GCC's complex integer types.
3"""
4
5import lldb
6from lldbsuite.test.decorators import *
7from lldbsuite.test.lldbtest import *
8from lldbsuite.test import lldbutil
9
10
11class TestCase(TestBase):
12    @no_debug_info_test
13    @skipIfWindows
14    def test(self):
15        self.build()
16        lldbutil.run_to_source_breakpoint(
17            self, "// break here", lldb.SBFileSpec("main.c")
18        )
19
20        long_size_eq_int = self.frame().EvaluateExpression(
21            "sizeof(long) == sizeof(int)"
22        )
23
24        # FIXME: LLDB treats all complex ints as unsigned, so the value is wrong.
25        self.expect_expr(
26            "complex_int",
27            result_type="_Complex int",
28            result_value="4294967295 + 4294967294i",
29        )
30        self.expect_expr(
31            "complex_unsigned", result_type="_Complex int", result_value="1 + 2i"
32        )
33
34        # FIXME: We get the type wrong if long has the same size as int.
35        if long_size_eq_int.GetValue() == "true":
36            self.expect_expr("complex_long", result_type="_Complex int")
37            self.expect_expr(
38                "complex_unsigned_long",
39                result_type="_Complex int",
40                result_value="1 + 2i",
41            )
42        else:
43            self.expect_expr("complex_long", result_type="_Complex long")
44            self.expect_expr(
45                "complex_unsigned_long",
46                result_type="_Complex long",
47                result_value="1 + 2i",
48            )
49
50    @no_debug_info_test
51    @skipIfWindows
52    def test_long_long(self):
53        self.build()
54        lldbutil.run_to_source_breakpoint(
55            self, "// break here", lldb.SBFileSpec("main.c")
56        )
57
58        # FIXME: We get the type wrong if long has the same size as long long.
59        # FIXME: LLDB treats all complex ints as unsigned, so the value is wrong.
60        long_size_eq_long_long = self.frame().EvaluateExpression(
61            "sizeof(long) == sizeof(long long)"
62        )
63        if long_size_eq_long_long.GetValue() == "true":
64            self.expect_expr("complex_long_long", result_type="_Complex long")
65            self.expect_expr(
66                "complex_unsigned_long_long",
67                result_type="_Complex long",
68                result_value="1 + 2i",
69            )
70        else:
71            self.expect_expr("complex_long_long", result_type="_Complex long long")
72            self.expect_expr(
73                "complex_unsigned_long_long",
74                result_type="_Complex long long",
75                result_value="1 + 2i",
76            )
77