1""" 2Test basic std::array functionality. 3""" 4 5from lldbsuite.test.decorators import * 6from lldbsuite.test.lldbtest import * 7from lldbsuite.test import lldbutil 8 9 10class TestCase(TestBase): 11 12 @add_test_categories(["libc++"]) 13 @skipIf(compiler=no_match("clang")) 14 def test(self): 15 self.build() 16 17 lldbutil.run_to_source_breakpoint(self, 18 "// Set break point at this line.", 19 lldb.SBFileSpec("main.cpp")) 20 21 self.runCmd("settings set target.import-std-module true") 22 23 size_type = "size_type" 24 value_type = "value_type" 25 iterator = "iterator" 26 riterator = "reverse_iterator" 27 28 # Test inspecting an array of integers. 29 array_type = "std::array<int, 3>" 30 self.expect_expr("a", 31 result_type=array_type, 32 result_children=[ 33 ValueCheck(name="__elems_", children=[ 34 ValueCheck(value="3"), 35 ValueCheck(value="1"), 36 ValueCheck(value="2"), 37 ]) 38 ]) 39 self.expect_expr("a.size()", result_type=size_type, result_value="3") 40 self.expect_expr("a.front()", result_type=value_type, result_value="3") 41 self.expect_expr("a[1]", result_type=value_type, result_value="1") 42 self.expect_expr("a.back()", result_type=value_type, result_value="2") 43 44 # Both are just pointers to the underlying elements. 45 self.expect_expr("a.begin()", result_type=iterator) 46 self.expect_expr("a.rbegin()", result_type=riterator) 47 48 self.expect_expr("*a.begin()", result_type=value_type, result_value="3") 49 self.expect_expr("*a.rbegin()", result_type="int", result_value="2") 50 51 self.expect_expr("a.at(0)", result_type=value_type, result_value="3") 52 53 54 # Same again with an array that has an element type from debug info. 55 array_type = "std::array<DbgInfo, 1>" 56 57 dbg_info_elem_children = [ValueCheck(value="4")] 58 dbg_info_elem = [ValueCheck(children=dbg_info_elem_children)] 59 60 self.expect_expr("b", 61 result_type=array_type, 62 result_children=[ 63 ValueCheck(name="__elems_", children=dbg_info_elem) 64 ]) 65 self.expect_expr("b.size()", result_type=size_type, result_value="1") 66 self.expect_expr("b.front()", result_type=value_type, result_children=dbg_info_elem_children) 67 self.expect_expr("b[0]", result_type=value_type, result_children=dbg_info_elem_children) 68 self.expect_expr("b.back()", result_type=value_type, result_children=dbg_info_elem_children) 69 70 # Both are just pointers to the underlying elements. 71 self.expect_expr("b.begin()", result_type=iterator) 72 self.expect_expr("b.rbegin()", result_type=riterator) 73 74 self.expect_expr("*b.begin()", result_type=value_type, result_children=dbg_info_elem_children) 75 self.expect_expr("*b.rbegin()", result_type="DbgInfo", result_children=dbg_info_elem_children) 76 77 self.expect_expr("b.at(0)", result_type=value_type, result_children=dbg_info_elem_children) 78 79