From 65efc06a496d9eaca87d43652042d59e49cb72df Mon Sep 17 00:00:00 2001 From: Maksim Ivanov Date: Tue, 5 Aug 2025 16:36:21 +0200 Subject: [PATCH 1/2] clang_delta: Add tests for replace-dependent-typedef Add a few basic test cases for the Clang "replace-dependent-typedef" pass. This is preparation for fixing the problem with this heuristic highlighted in #156. --- clang_delta/CMakeLists.txt | 4 ++++ .../tests/replace-dependent-typedef/test1.cc | 12 +++++++++++ .../replace-dependent-typedef/test1.output | 12 +++++++++++ .../replace-dependent-typedef/test1.output2 | 12 +++++++++++ .../replace-dependent-typedef/test1.output3 | 12 +++++++++++ clang_delta/tests/test_clang_delta.py | 20 +++++++++++++++++++ 6 files changed, 72 insertions(+) create mode 100644 clang_delta/tests/replace-dependent-typedef/test1.cc create mode 100644 clang_delta/tests/replace-dependent-typedef/test1.output create mode 100644 clang_delta/tests/replace-dependent-typedef/test1.output2 create mode 100644 clang_delta/tests/replace-dependent-typedef/test1.output3 diff --git a/clang_delta/CMakeLists.txt b/clang_delta/CMakeLists.txt index 10dbeedb..83fb0f2b 100644 --- a/clang_delta/CMakeLists.txt +++ b/clang_delta/CMakeLists.txt @@ -349,6 +349,10 @@ set(SOURCE_FILES "/tests/rename-param/stuck.ii" "/tests/rename-var/rename-var.c" "/tests/rename-var/rename-var.output" + "/tests/replace-dependent-typedef/test1.cc" + "/tests/replace-dependent-typedef/test1.output" + "/tests/replace-dependent-typedef/test1.output2" + "/tests/replace-dependent-typedef/test1.output3" "/tests/replace-derived-class/replace-derived1.cpp" "/tests/replace-derived-class/replace-derived1.output" "/tests/replace-derived-class/replace-derived2.cpp" diff --git a/clang_delta/tests/replace-dependent-typedef/test1.cc b/clang_delta/tests/replace-dependent-typedef/test1.cc new file mode 100644 index 00000000..c0cf4ee2 --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.cc @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef xx_t xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef S::type type; }; + +template +struct C { + typedef int Inner; + typedef C::Inner Bar; +}; diff --git a/clang_delta/tests/replace-dependent-typedef/test1.output b/clang_delta/tests/replace-dependent-typedef/test1.output new file mode 100644 index 00000000..58961044 --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.output @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef long xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef S::type type; }; + +template +struct C { + typedef int Inner; + typedef C::Inner Bar; +}; diff --git a/clang_delta/tests/replace-dependent-typedef/test1.output2 b/clang_delta/tests/replace-dependent-typedef/test1.output2 new file mode 100644 index 00000000..968d7e2c --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.output2 @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef xx_t xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef A type; }; + +template +struct C { + typedef int Inner; + typedef C::Inner Bar; +}; diff --git a/clang_delta/tests/replace-dependent-typedef/test1.output3 b/clang_delta/tests/replace-dependent-typedef/test1.output3 new file mode 100644 index 00000000..4900aa6c --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.output3 @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef xx_t xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef S::type type; }; + +template +struct C { + typedef int Inner; + typedef int Bar; +}; diff --git a/clang_delta/tests/test_clang_delta.py b/clang_delta/tests/test_clang_delta.py index 39ba2a49..ce5bbf63 100644 --- a/clang_delta/tests/test_clang_delta.py +++ b/clang_delta/tests/test_clang_delta.py @@ -1049,6 +1049,26 @@ def test_rename_param_stuck(self): def test_rename_var_rename_var(self): self.check_clang_delta('rename-var/rename-var.c', '--transformation=rename-var --counter=1') + def test_replace_derived_class_replace_dependent_typedef_1_1(self): + self.check_clang_delta( + 'replace-dependent-typedef/test1.cc', + '--transformation=replace-dependent-typedef --counter=1', + ) + + def test_replace_derived_class_replace_dependent_typedef_1_2(self): + self.check_clang_delta( + 'replace-dependent-typedef/test1.cc', + '--transformation=replace-dependent-typedef --counter=2', + 'replace-dependent-typedef/test1.output2' + ) + + def test_replace_derived_class_replace_dependent_typedef_1_3(self): + self.check_clang_delta( + 'replace-dependent-typedef/test1.cc', + '--transformation=replace-dependent-typedef --counter=3', + 'replace-dependent-typedef/test1.output3' + ) + def test_replace_derived_class_replace_derived1(self): self.check_clang_delta( 'replace-derived-class/replace-derived1.cpp', From b2e9714746053fc8ac80d610525977c642c91c62 Mon Sep 17 00:00:00 2001 From: Maksim Ivanov Date: Tue, 5 Aug 2025 16:40:34 +0200 Subject: [PATCH 2/2] ruff format; --- clang_delta/tests/test_clang_delta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang_delta/tests/test_clang_delta.py b/clang_delta/tests/test_clang_delta.py index ce5bbf63..621af637 100644 --- a/clang_delta/tests/test_clang_delta.py +++ b/clang_delta/tests/test_clang_delta.py @@ -1059,14 +1059,14 @@ def test_replace_derived_class_replace_dependent_typedef_1_2(self): self.check_clang_delta( 'replace-dependent-typedef/test1.cc', '--transformation=replace-dependent-typedef --counter=2', - 'replace-dependent-typedef/test1.output2' + 'replace-dependent-typedef/test1.output2', ) def test_replace_derived_class_replace_dependent_typedef_1_3(self): self.check_clang_delta( 'replace-dependent-typedef/test1.cc', '--transformation=replace-dependent-typedef --counter=3', - 'replace-dependent-typedef/test1.output3' + 'replace-dependent-typedef/test1.output3', ) def test_replace_derived_class_replace_derived1(self):