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 9 10class GenericDequeDataFormatterTestCase(TestBase): 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 def do_test(self, stdlib_type): 25 self.build(dictionary={stdlib_type: "1"}) 26 lldbutil.run_to_source_breakpoint( 27 self, "break here", lldb.SBFileSpec("main.cpp") 28 ) 29 30 self.expect_expr("empty", result_children=[]) 31 self.expect_expr( 32 "deque_1", 33 result_children=[ 34 ValueCheck(name="[0]", value="1"), 35 ], 36 ) 37 self.expect_expr( 38 "deque_3", 39 result_children=[ 40 ValueCheck(name="[0]", value="3"), 41 ValueCheck(name="[1]", value="1"), 42 ValueCheck(name="[2]", value="2"), 43 ], 44 ) 45 46 self.check_size("deque_200_small", 200) 47 for i in range(0, 100): 48 self.expect_var_path( 49 "deque_200_small[%d]" % (i), 50 children=[ 51 ValueCheck(name="a", value=str(-99 + i)), 52 ValueCheck(name="b", value=str(-100 + i)), 53 ValueCheck(name="c", value=str(-101 + i)), 54 ], 55 ) 56 self.expect_var_path( 57 "deque_200_small[%d]" % (i + 100), 58 children=[ 59 ValueCheck(name="a", value=str(i)), 60 ValueCheck(name="b", value=str(1 + i)), 61 ValueCheck(name="c", value=str(2 + i)), 62 ], 63 ) 64 65 self.check_size("deque_200_large", 200) 66 for i in range(0, 100): 67 self.expect_var_path( 68 "deque_200_large[%d]" % (i), 69 children=[ 70 ValueCheck(name="a", value=str(-99 + i)), 71 ValueCheck(name="b", value=str(-100 + i)), 72 ValueCheck(name="c", value=str(-101 + i)), 73 ValueCheck(name="d"), 74 ], 75 ) 76 self.expect_var_path( 77 "deque_200_large[%d]" % (i + 100), 78 children=[ 79 ValueCheck(name="a", value=str(i)), 80 ValueCheck(name="b", value=str(1 + i)), 81 ValueCheck(name="c", value=str(2 + i)), 82 ValueCheck(name="d"), 83 ], 84 ) 85 86 @add_test_categories(["libstdcxx"]) 87 def test_libstdcpp(self): 88 self.do_test(USE_LIBSTDCPP) 89 90 @add_test_categories(["libc++"]) 91 def test_libcpp(self): 92 self.do_test(USE_LIBCPP) 93