1import lldb
2from lldbsuite.test.decorators import *
3from lldbsuite.test.lldbtest import *
4from lldbsuite.test import lldbutil
5
6USE_LIBSTDCPP = "USE_LIBSTDCPP"
7USE_LIBCPP = "USE_LIBCPP"
8
9class GenericDequeDataFormatterTestCase(TestBase):
10
11    def findVariable(self, name):
12        var = self.frame().FindVariable(name)
13        self.assertTrue(var.IsValid())
14        return var
15
16    def getVariableType(self, name):
17        var = self.findVariable(name)
18        return var.GetType().GetDisplayTypeName()
19
20    def check_size(self, var_name, size):
21        var = self.findVariable(var_name)
22        self.assertEqual(var.GetNumChildren(), size)
23
24
25    def do_test(self, stdlib_type):
26        self.build(dictionary={stdlib_type: '1'})
27        lldbutil.run_to_source_breakpoint(self, "break here",
28                                          lldb.SBFileSpec("main.cpp"))
29
30        self.expect_expr("empty", result_children=[])
31        self.expect_expr("deque_1", result_children=[
32            ValueCheck(name="[0]", value="1"),
33        ])
34        self.expect_expr("deque_3", result_children=[
35            ValueCheck(name="[0]", value="3"),
36            ValueCheck(name="[1]", value="1"),
37            ValueCheck(name="[2]", value="2")
38        ])
39
40        self.check_size("deque_200_small", 200)
41        for i in range(0, 100):
42            self.expect_var_path("deque_200_small[%d]"%(i), children=[
43                ValueCheck(name="a", value=str(-99 + i)),
44                ValueCheck(name="b", value=str(-100 + i)),
45                ValueCheck(name="c", value=str(-101 + i)),
46            ])
47            self.expect_var_path("deque_200_small[%d]"%(i + 100), children=[
48                ValueCheck(name="a", value=str(i)),
49                ValueCheck(name="b", value=str(1 + i)),
50                ValueCheck(name="c", value=str(2 + i)),
51            ])
52
53        self.check_size("deque_200_large", 200)
54        for i in range(0, 100):
55            self.expect_var_path("deque_200_large[%d]"%(i), children=[
56                ValueCheck(name="a", value=str(-99 + i)),
57                ValueCheck(name="b", value=str(-100 + i)),
58                ValueCheck(name="c", value=str(-101 + i)),
59                ValueCheck(name="d")
60            ])
61            self.expect_var_path("deque_200_large[%d]"%(i + 100), children=[
62                ValueCheck(name="a", value=str(i)),
63                ValueCheck(name="b", value=str(1 + i)),
64                ValueCheck(name="c", value=str(2 + i)),
65                ValueCheck(name="d")
66            ])
67
68    @add_test_categories(["libstdcxx"])
69    def test_libstdcpp(self):
70        self.do_test(USE_LIBSTDCPP)
71
72    @add_test_categories(["libc++"])
73    def test_libcpp(self):
74         self.do_test(USE_LIBCPP)
75