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