84 lines · python
1"""2Tests std::queue functionality.3"""4 5from lldbsuite.test.decorators import *6from lldbsuite.test.lldbtest import *7from lldbsuite.test import lldbutil8 9 10class TestQueue(TestBase):11 @add_test_categories(["libc++"])12 @skipIf(compiler=no_match("clang"))13 @skipIf(14 compiler="clang",15 compiler_version=[">", "16.0"],16 bugnumber="https://github.com/llvm/llvm-project/issues/68968",17 )18 @skipIf(19 compiler="clang",20 compiler_version=["<", "17.0"],21 )22 def test(self):23 self.build()24 25 lldbutil.run_to_source_breakpoint(26 self, "// Set break point at this line.", lldb.SBFileSpec("main.cpp")27 )28 29 self.runCmd("settings set target.import-std-module true")30 31 if self.expectedCompiler(["clang"]) and self.expectedCompilerVersion(32 [">", "16.0"]33 ):34 queue_type = "std::queue<C>"35 else:36 queue_type = "std::queue<C, std::deque<C, std::allocator<C> > >"37 38 size_type = "size_type"39 value_type = "value_type"40 41 # Test std::queue functionality with a std::deque.42 self.expect_expr(43 "q_deque",44 result_type=queue_type,45 result_children=[ValueCheck(children=[ValueCheck(value="1")])],46 )47 self.expect("expr q_deque.pop()")48 self.expect("expr q_deque.push({4})")49 self.expect_expr("q_deque.size()", result_type=size_type, result_value="1")50 self.expect_expr("q_deque.front()", result_type=value_type)51 self.expect_expr("q_deque.back()", result_type=value_type)52 self.expect_expr("q_deque.front().i", result_type="int", result_value="4")53 self.expect_expr("q_deque.back().i", result_type="int", result_value="4")54 self.expect_expr("q_deque.empty()", result_type="bool", result_value="false")55 self.expect("expr q_deque.pop()")56 self.expect("expr q_deque.emplace(5)")57 self.expect_expr("q_deque.front().i", result_type="int", result_value="5")58 59 # Test std::queue functionality with a std::list.60 if self.expectedCompiler(["clang"]) and self.expectedCompilerVersion(61 [">", "16.0"]62 ):63 queue_type = "std::queue<C, std::list<C> >"64 else:65 queue_type = "std::queue<C, std::list<C, std::allocator<C> > >"66 67 self.expect_expr(68 "q_list",69 result_type=queue_type,70 result_children=[ValueCheck(children=[ValueCheck(value="1")])],71 )72 73 self.expect("expr q_list.pop()")74 self.expect("expr q_list.push({4})")75 self.expect_expr("q_list.size()", result_type=size_type, result_value="1")76 self.expect_expr("q_list.front()", result_type=value_type)77 self.expect_expr("q_list.back()", result_type=value_type)78 self.expect_expr("q_list.front().i", result_type="int", result_value="4")79 self.expect_expr("q_list.back().i", result_type="int", result_value="4")80 self.expect_expr("q_list.empty()", result_type="bool", result_value="false")81 self.expect("expr q_list.pop()")82 self.expect("expr q_list.emplace(5)")83 self.expect_expr("q_list.front().i", result_type="int", result_value="5")84