[GSoC][PATCH v2] t/: port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c
- From
Ghanshyam Thakkar <shyamthakkar001@gmail.com>
- Date
- May 19, 2024, 20:44 UTC
- Message-ID
- <20240519204530.12258-3-shyamthakkar001@gmail.com>
- In-Reply-To
- <20240310144819.4379-1-ach.lumap@gmail.com>
In the recent codebase update (8bf6fbd (Merge branch 'js/doc-unit-tests', 2023-12-09)), a new unit testing framework was merged, providing a standardized approach for testing C code. Prior to this update, some unit tests relied on the test helper mechanism, lacking a dedicated unit testing framework. It's more natural to perform these unit tests using the new unit test framework.
Let's migrate the unit tests for strcmp-offset functionality from the legacy approach using the test-tool command `test-tool strcmp-offset` in helper/test-strcmp-offset.c to the new unit testing framework (t/unit-tests/test-lib.h).
The migration involves refactoring the tests to utilize the testing macros provided by the framework (TEST() and check_*()).
Helped-by: Patrick Steinhardt <ps@pks.im> Mentored-by: Christian Couder <chriscool@tuxfamily.org> Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com> Co-authored-by: Achu Luma <ach.lumap@gmail.com> Signed-off-by: Achu Luma <ach.lumap@gmail.com> Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@gmail.com> --- The v2 only adjusts the formatting to be in line with the style described in CodingGuidelines. And it is also rebased on 'next' to avoid Makefile conflicts.
CI for v2: https://github.com/spectre10/git/actions/runs/9150288967
Range-diff against v1:
1: 47e7df1d22 ! 1: 3c2a6f7e9b Port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c
@@
## Metadata ##
-Author: Achu Luma <ach.lumap@gmail.com>
+Author: Ghanshyam Thakkar <shyamthakkar001@gmail.com>
## Commit message ##
- Port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c
+ t/: port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c
In the recent codebase update (8bf6fbd (Merge branch
'js/doc-unit-tests', 2023-12-09)), a new unit testing framework was
@@ Commit message
The migration involves refactoring the tests to utilize the testing
macros provided by the framework (TEST() and check_*()).
+ Helped-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
+ Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
+ Co-authored-by: Achu Luma <ach.lumap@gmail.com>
Signed-off-by: Achu Luma <ach.lumap@gmail.com>
+ Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@gmail.com>
## Makefile ##
@@ Makefile: TEST_BUILTINS_OBJS += test-sha1.o
@@ Makefile: TEST_BUILTINS_OBJS += test-sha1.o
TEST_BUILTINS_OBJS += test-string-list.o
TEST_BUILTINS_OBJS += test-submodule-config.o
TEST_BUILTINS_OBJS += test-submodule-nested-repo-config.o
-@@ Makefile: UNIT_TEST_PROGRAMS += t-mem-pool
- UNIT_TEST_PROGRAMS += t-strbuf
- UNIT_TEST_PROGRAMS += t-ctype
+@@ Makefile: UNIT_TEST_PROGRAMS += t-ctype
+ UNIT_TEST_PROGRAMS += t-mem-pool
UNIT_TEST_PROGRAMS += t-prio-queue
+ UNIT_TEST_PROGRAMS += t-strbuf
+UNIT_TEST_PROGRAMS += t-strcmp-offset
+ UNIT_TEST_PROGRAMS += t-trailer
UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS))
UNIT_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS))
- UNIT_TEST_OBJS += $(UNIT_TEST_DIR)/test-lib.o
## t/helper/test-strcmp-offset.c (deleted) ##
@@
@@ t/unit-tests/t-strcmp-offset.c (new)
+#include "test-lib.h"
+#include "read-cache-ll.h"
+
-+static void check_strcmp_offset(const char *string1, const char *string2, int expect_result, uintmax_t expect_offset)
++static void check_strcmp_offset(const char *string1, const char *string2,
++ int expect_result, uintmax_t expect_offset)
+{
-+ int result;
+ size_t offset;
++ int result = strcmp_offset(string1, string2, &offset);
+
-+ result = strcmp_offset(string1, string2, &offset);
-+
-+ /* Because different CRTs behave differently, only rely on signs of the result values. */
++ /*
++ * Because different CRTs behave differently, only rely on signs of the
++ * result values.
++ */
+ result = (result < 0 ? -1 :
-+ result > 0 ? 1 :
-+ 0);
++ result > 0 ? 1 :
++ 0);
+
+ check_int(result, ==, expect_result);
+ check_uint((uintmax_t)offset, ==, expect_offset);
+}
+
+#define TEST_STRCMP_OFFSET(string1, string2, expect_result, expect_offset) \
-+ TEST(check_strcmp_offset(string1, string2, expect_result, expect_offset), \
-+ "strcmp_offset(%s, %s) works", #string1, #string2)
++ TEST(check_strcmp_offset(string1, string2, expect_result, \
++ expect_offset), \
++ "strcmp_offset(%s, %s) works", #string1, #string2)
+
-+int cmd_main(int argc, const char **argv) {
++int cmd_main(int argc, const char **argv)
++{
+ TEST_STRCMP_OFFSET("abc", "abc", 0, 3);
+ TEST_STRCMP_OFFSET("abc", "def", -1, 0);
+ TEST_STRCMP_OFFSET("abc", "abz", -1, 2);Makefile | 2 +- t/helper/test-strcmp-offset.c | 23 ---------------------- t/helper/test-tool.c | 1 - t/helper/test-tool.h | 1 - t/t0065-strcmp-offset.sh | 22 --------------------- t/unit-tests/t-strcmp-offset.c | 35 ++++++++++++++++++++++++++++++++++ 6 files changed, 36 insertions(+), 48 deletions(-) delete mode 100644 t/helper/test-strcmp-offset.c delete mode 100755 t/t0065-strcmp-offset.sh create mode 100644 t/unit-tests/t-strcmp-offset.c
diff --git a/Makefile b/Makefile index 8f4432ae57..59d98ba688 100644 --- a/Makefile +++ b/Makefile @@ -839,7 +839,6 @@ TEST_BUILTINS_OBJS += test-sha1.o TEST_BUILTINS_OBJS += test-sha256.o TEST_BUILTINS_OBJS += test-sigchain.o TEST_BUILTINS_OBJS += test-simple-ipc.o -TEST_BUILTINS_OBJS += test-strcmp-offset.o TEST_BUILTINS_OBJS += test-string-list.o TEST_BUILTINS_OBJS += test-submodule-config.o TEST_BUILTINS_OBJS += test-submodule-nested-repo-config.o @@ -1338,6 +1337,7 @@ UNIT_TEST_PROGRAMS += t-ctype UNIT_TEST_PROGRAMS += t-mem-pool UNIT_TEST_PROGRAMS += t-prio-queue UNIT_TEST_PROGRAMS += t-strbuf +UNIT_TEST_PROGRAMS += t-strcmp-offset UNIT_TEST_PROGRAMS += t-trailer UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS)) UNIT_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS)) diff --git a/t/helper/test-strcmp-offset.c b/t/helper/test-strcmp-offset.c deleted file mode 100644 index d8473cf2fc..0000000000 --- a/t/helper/test-strcmp-offset.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "test-tool.h" -#include "read-cache-ll.h" - -int cmd__strcmp_offset(int argc UNUSED, const char **argv) -{ - int result; - size_t offset; - - if (!argv[1] || !argv[2]) - die("usage: %s <string1> <string2>", argv[0]); - - result = strcmp_offset(argv[1], argv[2], &offset); - - /* - * Because different CRTs behave differently, only rely on signs - * of the result values. - */ - result = (result < 0 ? -1 : - result > 0 ? 1 : - 0); - printf("%d %"PRIuMAX"\n", result, (uintmax_t)offset); - return 0; -} diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c index f6fd0fe491..7ad7d07018 100644 --- a/t/helper/test-tool.c +++ b/t/helper/test-tool.c @@ -78,7 +78,6 @@ static struct test_cmd cmds[] = { { "sha256", cmd__sha256 }, { "sigchain", cmd__sigchain }, { "simple-ipc", cmd__simple_ipc }, - { "strcmp-offset", cmd__strcmp_offset }, { "string-list", cmd__string_list }, { "submodule", cmd__submodule }, { "submodule-config", cmd__submodule_config }, diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h index 868f33453c..d14b3072bd 100644 --- a/t/helper/test-tool.h +++ b/t/helper/test-tool.h @@ -71,7 +71,6 @@ int cmd__oid_array(int argc, const char **argv); int cmd__sha256(int argc, const char **argv); int cmd__sigchain(int argc, const char **argv); int cmd__simple_ipc(int argc, const char **argv); -int cmd__strcmp_offset(int argc, const char **argv); int cmd__string_list(int argc, const char **argv); int cmd__submodule(int argc, const char **argv); int cmd__submodule_config(int argc, const char **argv); diff --git a/t/t0065-strcmp-offset.sh b/t/t0065-strcmp-offset.sh deleted file mode 100755 index 94e34c83ed..0000000000 --- a/t/t0065-strcmp-offset.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -test_description='Test strcmp_offset functionality' - -TEST_PASSES_SANITIZE_LEAK=true -. ./test-lib.sh - -while read s1 s2 expect -do - test_expect_success "strcmp_offset($s1, $s2)" ' - echo "$expect" >expect && - test-tool strcmp-offset "$s1" "$s2" >actual && - test_cmp expect actual - ' -done <<-EOF -abc abc 0 3 -abc def -1 0 -abc abz -1 2 -abc abcdef -1 3 -EOF - -test_done diff --git a/t/unit-tests/t-strcmp-offset.c b/t/unit-tests/t-strcmp-offset.c new file mode 100644 index 0000000000..fe4c2706b1 --- /dev/null +++ b/t/unit-tests/t-strcmp-offset.c @@ -0,0 +1,35 @@ +#include "test-lib.h" +#include "read-cache-ll.h" + +static void check_strcmp_offset(const char *string1, const char *string2, + int expect_result, uintmax_t expect_offset) +{ + size_t offset; + int result = strcmp_offset(string1, string2, &offset); + + /* + * Because different CRTs behave differently, only rely on signs of the + * result values. + */ + result = (result < 0 ? -1 : + result > 0 ? 1 : + 0); + + check_int(result, ==, expect_result); + check_uint((uintmax_t)offset, ==, expect_offset); +} + +#define TEST_STRCMP_OFFSET(string1, string2, expect_result, expect_offset) \ + TEST(check_strcmp_offset(string1, string2, expect_result, \ + expect_offset), \ + "strcmp_offset(%s, %s) works", #string1, #string2) + +int cmd_main(int argc, const char **argv) +{ + TEST_STRCMP_OFFSET("abc", "abc", 0, 3); + TEST_STRCMP_OFFSET("abc", "def", -1, 0); + TEST_STRCMP_OFFSET("abc", "abz", -1, 2); + TEST_STRCMP_OFFSET("abc", "abcdef", -1, 3); + + return test_done(); +}
-- 2.45.1