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