[Lldb-commits] [lldb] [lldb][test] Consolidate generic and libcxx std::deque formatter tests (PR #146697)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Wed Jul 2 07:04:50 PDT 2025
https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/146697
>From 168f2c960757ad0203391724836d021b8bf89b5b Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Wed, 2 Jul 2025 14:51:04 +0100
Subject: [PATCH 1/2] [lldb][test] Consolidate generic and libcxx std::deque
formatter tests
The plan is to move all STL formatter API tests into a single directory.
The `std::deque` test is currently the only test that is duplicated
between the `libcxx` and `generic` directories. This patch moves the
libcxx deque tests into `generic` (moving over any functionality that
wasn't tested in the `generic` tests, mainly formatting
pointers/references to `std::deque`).
---
.../deque/TestDataFormatterGenericDeque.py | 76 +++++++++++++++-
.../data-formatter-stl/generic/deque/main.cpp | 25 +++++-
.../data-formatter-stl/libcxx/deque/Makefile | 4 -
.../deque/TestDataFormatterLibcxxDeque.py | 87 -------------------
.../data-formatter-stl/libcxx/deque/main.cpp | 30 -------
5 files changed, 99 insertions(+), 123 deletions(-)
delete mode 100644 lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/Makefile
delete mode 100644 lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/TestDataFormatterLibcxxDeque.py
delete mode 100644 lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/main.cpp
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
index abe2a2b7895de..cf6b339a111c1 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
@@ -21,9 +21,44 @@ def check_size(self, var_name, size):
var = self.findVariable(var_name)
self.assertEqual(var.GetNumChildren(), size)
+ def check_numbers(self, var_name, show_ptr=False):
+ patterns = []
+ substrs = [
+ "[0] = 1",
+ "[1] = 12",
+ "[2] = 123",
+ "[3] = 1234",
+ "[4] = 12345",
+ "[5] = 123456",
+ "[6] = 1234567",
+ "}",
+ ]
+ if show_ptr:
+ patterns = [var_name + " = 0x.* size=7"]
+ else:
+ substrs.insert(0, var_name + " = size=7")
+ self.expect(
+ "frame variable " + var_name,
+ patterns=patterns,
+ substrs=substrs,
+ )
+ self.expect_expr(
+ var_name,
+ result_summary="size=7",
+ result_children=[
+ ValueCheck(value="1"),
+ ValueCheck(value="12"),
+ ValueCheck(value="123"),
+ ValueCheck(value="1234"),
+ ValueCheck(value="12345"),
+ ValueCheck(value="123456"),
+ ValueCheck(value="1234567"),
+ ],
+ )
+
def do_test(self, stdlib_type):
self.build(dictionary={stdlib_type: "1"})
- lldbutil.run_to_source_breakpoint(
+ (_, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
self, "break here", lldb.SBFileSpec("main.cpp")
)
@@ -83,6 +118,23 @@ def do_test(self, stdlib_type):
],
)
+ lldbutil.continue_to_breakpoint(process, bkpt)
+
+ # first value added
+ self.expect(
+ "frame variable empty", substrs=["empty = size=1", "[0] = 1", "}"]
+ )
+
+ # add remaining values
+ lldbutil.continue_to_breakpoint(process, bkpt)
+
+ self.check_numbers("empty")
+
+ # clear out the deque
+ lldbutil.continue_to_breakpoint(process, bkpt)
+
+ self.expect_expr("empty", result_children=[])
+
@add_test_categories(["libstdcxx"])
def test_libstdcpp(self):
self.do_test(USE_LIBSTDCPP)
@@ -90,3 +142,25 @@ def test_libstdcpp(self):
@add_test_categories(["libc++"])
def test_libcpp(self):
self.do_test(USE_LIBCPP)
+
+ def do_test_ref_and_ptr(self, stdlib_type: str):
+ """Test formatting of std::deque& and std::deque*"""
+ self.build(dictionary={stdlib_type: "1"})
+ (self.target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
+ self, "stop here", lldb.SBFileSpec("main.cpp", False)
+ )
+
+ # The reference should display the same was as the value did
+ self.check_numbers("ref", True)
+
+ # The pointer should just show the right number of elements:
+ self.expect("frame variable ptr", substrs=["ptr =", " size=7"])
+ self.expect("expression ptr", substrs=["$", "size=7"])
+
+ @add_test_categories(["libstdcxx"])
+ def test_libstdcpp_ref_and_ptr(self):
+ self.do_test_ref_and_ptr(USE_LIBSTDCPP)
+
+ @add_test_categories(["libc++"])
+ def test_libcpp_ref_and_ptr(self):
+ self.do_test_ref_and_ptr(USE_LIBCPP)
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/main.cpp
index b948fe1b4b375..a1c5b443daae6 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/main.cpp
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/main.cpp
@@ -26,6 +26,11 @@ template <typename T> T fill(T deque) {
return deque;
}
+void by_ref_and_ptr(std::deque<int> &ref, std::deque<int> *ptr) {
+ puts("stop here");
+ return;
+}
+
int main() {
std::deque<int> empty;
std::deque<int> deque_1 = {1};
@@ -37,5 +42,23 @@ int main() {
std::deque<Foo_large> deque_200_large;
deque_200_large = fill<std::deque<Foo_large>>(deque_200_large);
- return empty.size() + deque_1.front() + deque_3.front(); // break here
+ puts("break here");
+
+ empty.push_back(1);
+ puts("break here");
+
+ (empty.push_back(12));
+ (empty.push_back(123));
+ (empty.push_back(1234));
+ (empty.push_back(12345));
+ (empty.push_back(123456));
+ (empty.push_back(1234567));
+ puts("break here");
+
+ by_ref_and_ptr(empty, &empty);
+
+ empty.clear();
+ puts("break here");
+
+ return empty.size() + deque_1.front() + deque_3.front();
}
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/Makefile
deleted file mode 100644
index c5ac05605bdcb..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-USE_LIBCPP := 1
-CXX_SOURCES := main.cpp
-
-include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/TestDataFormatterLibcxxDeque.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/TestDataFormatterLibcxxDeque.py
deleted file mode 100644
index ece1e4f5f049b..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/TestDataFormatterLibcxxDeque.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Test LLDB's data formatter for libcxx's std::deque.
-"""
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class LibcxxDequeDataFormatterTestCase(TestBase):
- def check_numbers(self, var_name, show_ptr=False):
- patterns = []
- substrs = [
- "[0] = 1",
- "[1] = 12",
- "[2] = 123",
- "[3] = 1234",
- "[4] = 12345",
- "[5] = 123456",
- "[6] = 1234567",
- "}",
- ]
- if show_ptr:
- patterns = [var_name + " = 0x.* size=7"]
- else:
- substrs.insert(0, var_name + " = size=7")
- self.expect(
- "frame variable " + var_name,
- patterns=patterns,
- substrs=substrs,
- )
- self.expect_expr(
- var_name,
- result_summary="size=7",
- result_children=[
- ValueCheck(value="1"),
- ValueCheck(value="12"),
- ValueCheck(value="123"),
- ValueCheck(value="1234"),
- ValueCheck(value="12345"),
- ValueCheck(value="123456"),
- ValueCheck(value="1234567"),
- ],
- )
-
- @add_test_categories(["libc++"])
- def test_with_run_command(self):
- """Test basic formatting of std::deque"""
- self.build()
- (self.target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
- self, "break here", lldb.SBFileSpec("main.cpp", False)
- )
-
- self.expect("frame variable numbers", substrs=["numbers = size=0"])
-
- lldbutil.continue_to_breakpoint(process, bkpt)
-
- # first value added
- self.expect(
- "frame variable numbers", substrs=["numbers = size=1", "[0] = 1", "}"]
- )
-
- # add remaining values
- lldbutil.continue_to_breakpoint(process, bkpt)
-
- self.check_numbers("numbers")
-
- # clear out the deque
- lldbutil.continue_to_breakpoint(process, bkpt)
-
- self.expect("frame variable numbers", substrs=["numbers = size=0"])
-
- @add_test_categories(["libc++"])
- def test_ref_and_ptr(self):
- """Test formatting of std::deque& and std::deque*"""
- self.build()
- (self.target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
- self, "stop here", lldb.SBFileSpec("main.cpp", False)
- )
-
- # The reference should display the same was as the value did
- self.check_numbers("ref", True)
-
- # The pointer should just show the right number of elements:
- self.expect("frame variable ptr", substrs=["ptr =", " size=7"])
- self.expect("expression ptr", substrs=["$", "size=7"])
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/main.cpp
deleted file mode 100644
index 025c823d1f5b6..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/deque/main.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <cstdio>
-#include <deque>
-typedef std::deque<int> int_deq;
-
-void by_ref_and_ptr(std::deque<int> &ref, std::deque<int> *ptr) {
- printf("stop here");
- return;
-}
-
-int main() {
- int_deq numbers;
- printf("break here");
-
- (numbers.push_back(1));
- printf("break here");
-
- (numbers.push_back(12));
- (numbers.push_back(123));
- (numbers.push_back(1234));
- (numbers.push_back(12345));
- (numbers.push_back(123456));
- (numbers.push_back(1234567));
- by_ref_and_ptr(numbers, &numbers);
- printf("break here");
-
- numbers.clear();
- printf("break here");
-
- return 0;
-}
>From 2e8ca6d469a3607f8cf3aab8f9631fdae2b9b1b0 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Wed, 2 Jul 2025 15:04:39 +0100
Subject: [PATCH 2/2] fixup! python format
---
.../generic/deque/TestDataFormatterGenericDeque.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
index cf6b339a111c1..f52f6f7ec3ffb 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
@@ -121,9 +121,7 @@ def do_test(self, stdlib_type):
lldbutil.continue_to_breakpoint(process, bkpt)
# first value added
- self.expect(
- "frame variable empty", substrs=["empty = size=1", "[0] = 1", "}"]
- )
+ self.expect("frame variable empty", substrs=["empty = size=1", "[0] = 1", "}"])
# add remaining values
lldbutil.continue_to_breakpoint(process, bkpt)
More information about the lldb-commits
mailing list