[GSoC][PATCH v2] t/: port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>
Mentored-by: Christian Couder <chriscool@xxxxxxxxxxxxx>
Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@xxxxxxxxx>
Co-authored-by: Achu Luma <ach.lumap@xxxxxxxxx>
Signed-off-by: Achu Luma <ach.lumap@xxxxxxxxx>
Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx>
---
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@xxxxxxxxx>
    +Author: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx>
     
      ## 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@xxxxxx>
         Mentored-by: Christian Couder <chriscool@xxxxxxxxxxxxx>
    +    Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@xxxxxxxxx>
    +    Co-authored-by: Achu Luma <ach.lumap@xxxxxxxxx>
         Signed-off-by: Achu Luma <ach.lumap@xxxxxxxxx>
    +    Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx>
     
      ## 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





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux