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 @skipIfLinux # https://discourse.llvm.org/t/lldb-test-failures-on-linux/80095 14 def test(self): 15 self.build() 16 17 lldbutil.run_to_source_breakpoint( 18 self, "// Set break point at this line.", lldb.SBFileSpec("main.cpp") 19 ) 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( 31 "a", 32 result_type=array_type, 33 result_children=[ 34 ValueCheck( 35 name="__elems_", 36 children=[ 37 ValueCheck(value="3"), 38 ValueCheck(value="1"), 39 ValueCheck(value="2"), 40 ], 41 ) 42 ], 43 ) 44 self.expect_expr("a.size()", result_type=size_type, result_value="3") 45 self.expect_expr("a.front()", result_type=value_type, result_value="3") 46 self.expect_expr("a[1]", result_type=value_type, result_value="1") 47 self.expect_expr("a.back()", result_type=value_type, result_value="2") 48 49 # Both are just pointers to the underlying elements. 50 self.expect_expr("a.begin()", result_type=iterator) 51 self.expect_expr("a.rbegin()", result_type=riterator) 52 53 self.expect_expr("*a.begin()", result_type=value_type, result_value="3") 54 self.expect_expr("*a.rbegin()", result_type="int", result_value="2") 55 56 self.expect_expr("a.at(0)", result_type=value_type, result_value="3") 57 58 # Same again with an array that has an element type from debug info. 59 array_type = "std::array<DbgInfo, 1>" 60 61 dbg_info_elem_children = [ValueCheck(value="4")] 62 dbg_info_elem = [ValueCheck(children=dbg_info_elem_children)] 63 64 self.expect_expr( 65 "b", 66 result_type=array_type, 67 result_children=[ValueCheck(name="__elems_", children=dbg_info_elem)], 68 ) 69 self.expect_expr("b.size()", result_type=size_type, result_value="1") 70 self.expect_expr( 71 "b.front()", result_type=value_type, result_children=dbg_info_elem_children 72 ) 73 self.expect_expr( 74 "b[0]", result_type=value_type, result_children=dbg_info_elem_children 75 ) 76 self.expect_expr( 77 "b.back()", result_type=value_type, result_children=dbg_info_elem_children 78 ) 79 80 # Both are just pointers to the underlying elements. 81 self.expect_expr("b.begin()", result_type=iterator) 82 self.expect_expr("b.rbegin()", result_type=riterator) 83 84 self.expect_expr( 85 "*b.begin()", result_type=value_type, result_children=dbg_info_elem_children 86 ) 87 self.expect_expr( 88 "*b.rbegin()", result_type="DbgInfo", result_children=dbg_info_elem_children 89 ) 90 91 self.expect_expr( 92 "b.at(0)", result_type=value_type, result_children=dbg_info_elem_children 93 ) 94