From: Chandra Pratap <chandrapratap3519@gmail.com>
To: git@vger.kernel.org
Cc: karthik188@gmail.com, chriscool@tuxfamily.org
Subject: [GSoC][PATCH v5 0/5] t: port reftable/tree_test.c to the unit testing framework
Date: Mon, 22 Jul 2024 11:27:53 +0530 [thread overview]
Message-ID: <20240722061836.4176-1-chandrapratap3519@gmail.com> (raw)
In-Reply-To: <20240716075641.4264-1-chandrapratap3519@gmail.com>
The reftable library comes with self tests, which are exercised
as part of the usual end-to-end tests and are designed to
observe the end-user visible effects of Git commands. What it
exercises, however, is a better match for the unit-testing
framework, merged at 8bf6fbd0 (Merge branch 'js/doc-unit-tests',
2023-12-09), which is designed to observe how low level
implementation details, at the level of sequences of individual
function calls, behave.
Hence, port reftable/tree_test.c to the unit testing framework and
improve upon the ported test. The first patch in the series is
preparatory cleanup, the second patch moves the test to the unit
testing framework, and the rest of the patches improve upon the
ported test.
Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com>
---
Changes in v5:
- Rebase the branch on top of the latest master
- Add more explanation in the commit message of patch 2
- Refer to function pointers as 'func' and not '&func'
- Add comments and refactor the test in patch 2 for easier
comprehension
CI/PR: https://github.com/gitgitgadget/git/pull/1740
Chandra Pratap(5):
reftable: remove unnecessary curly braces in reftable/tree.c
t: move reftable/tree_test.c to the unit testing framework
t-reftable-tree: split test_tree() into two sub-test
t-reftable-tree: add test for non-existent key
t-reftable-tree: improve the test for infix_walk()
Makefile | 2 +-
reftable/reftable-tests.h | 1 -
reftable/tree.c | 15 +++-------
reftable/tree_test.c | 60 ----------------------
t/helper/test-reftable.c | 1 -
t/unit-tests/t-reftable-tree.c | 83 +++++++++++++++++++++++++++++++++++++
6 files changed, 89 insertions(+), 73 deletions(-)
Range-diff against v4:
<rebase commits>
1: 2be2a35b7f = 45: 1d637f7686 reftable: remove unnecessary curly braces in reftable/tree.c
2: de49698ea7 ! 46: 7401e2409f t: move reftable/tree_test.c to the unit testing framework
@@ Commit message
the unit testing framework instead of reftable's test framework and
renaming the tests to align with unit-tests' standards.
+ Also add a comment to help understand the test routine.
+
+ Note that this commit mostly moves the test from reftable/ to
+ t/unit-tests/ and most of the refactoring is performed by the
+ trailing commits.
+
Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com>
## Makefile ##
-@@ Makefile: UNIT_TEST_PROGRAMS += t-mem-pool
- UNIT_TEST_PROGRAMS += t-oidtree
+@@ Makefile: UNIT_TEST_PROGRAMS += t-oidtree
UNIT_TEST_PROGRAMS += t-prio-queue
UNIT_TEST_PROGRAMS += t-reftable-basics
+ UNIT_TEST_PROGRAMS += t-reftable-record
+UNIT_TEST_PROGRAMS += t-reftable-tree
UNIT_TEST_PROGRAMS += t-strbuf
UNIT_TEST_PROGRAMS += t-strcmp-offset
UNIT_TEST_PROGRAMS += t-strvec
-@@ Makefile: REFTABLE_TEST_OBJS += reftable/record_test.o
+@@ Makefile: REFTABLE_TEST_OBJS += reftable/pq_test.o
REFTABLE_TEST_OBJS += reftable/readwrite_test.o
REFTABLE_TEST_OBJS += reftable/stack_test.o
REFTABLE_TEST_OBJS += reftable/test_framework.o
@@ reftable/tree_test.c (deleted)
## t/helper/test-reftable.c ##
@@ t/helper/test-reftable.c: int cmd__reftable(int argc, const char **argv)
+ {
/* test from simple to complex. */
- record_test_main(argc, argv);
block_test_main(argc, argv);
- tree_test_main(argc, argv);
pq_test_main(argc, argv);
@@ t/unit-tests/t-reftable-tree.c (new)
+ size_t i = 1;
+ struct curry c = { 0 };
+
++ /* pseudo-randomly insert the pointers for elements between
++ * values[1] and values[10] (included) in the tree.
++ */
+ do {
-+ nodes[i] = tree_search(values + i, &root, &t_compare, 1);
++ nodes[i] = tree_search(&values[i], &root, &t_compare, 1);
+ i = (i * 7) % 11;
+ } while (i != 1);
+
+ for (i = 1; i < ARRAY_SIZE(nodes); i++) {
-+ check_pointer_eq(values + i, nodes[i]->key);
-+ check_pointer_eq(nodes[i], tree_search(values + i, &root, &t_compare, 0));
++ check_pointer_eq(&values[i], nodes[i]->key);
++ check_pointer_eq(nodes[i], tree_search(&values[i], &root, &t_compare, 0));
+ }
+
+ infix_walk(root, check_increasing, &c);
3: c733776054 ! 47: 59d5c17d5e t-reftable-tree: split test_tree() into two sub-test functions
@@ Commit message
'int insert' which when set, inserts the key if it is not found
in the tree. Otherwise, the function returns NULL for such cases.
+ While at it, use 'func' to pass function pointers and not '&func'.
+
Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com>
@@ t/unit-tests/t-reftable-tree.c: static void check_increasing(void *arg, void *ke
size_t i = 1;
- struct curry c = { 0 };
- do {
- nodes[i] = tree_search(values + i, &root, &t_compare, 1);
+ /* pseudo-randomly insert the pointers for elements between
+ * values[1] and values[10] (included) in the tree.
@@ t/unit-tests/t-reftable-tree.c: static void t_tree(void)
- check_pointer_eq(nodes[i], tree_search(values + i, &root, &t_compare, 0));
+ check_pointer_eq(nodes[i], tree_search(&values[i], &root, &t_compare, 0));
}
- infix_walk(root, check_increasing, &c);
@@ t/unit-tests/t-reftable-tree.c: static void t_tree(void)
+ size_t i = 1;
+
+ do {
-+ tree_search(values + i, &root, &t_compare, 1);
++ tree_search(&values[i], &root, t_compare, 1);
+ i = (i * 7) % 11;
+ } while (i != 1);
+
4: f1a9325bb3 < -: ---------- t-reftable-tree: add test for non-existent key
-: ---------- > 48: c1ce79916b t-reftable-tree: add test for non-existent key
5: c6b7a3d646 ! 49: d1a5ced526 t-reftable-tree: improve the test for infix_walk()
@@ t/unit-tests/t-reftable-tree.c: static void t_infix_walk(void)
+ size_t count = 0;
do {
- tree_search(values + i, &root, &t_compare, 1);
+ tree_search(&values[i], &root, t_compare, 1);
i = (i * 7) % 11;
+ count++;
} while (i != 1);
@@ t/unit-tests/t-reftable-tree.c: static void t_infix_walk(void)
- infix_walk(root, &check_increasing, &c);
+ infix_walk(root, &store, &c);
+ for (i = 1; i < ARRAY_SIZE(values); i++)
-+ check_pointer_eq(values + i, out[i - 1]);
++ check_pointer_eq(&values[i], out[i - 1]);
+ check(!out[i - 1]);
+ check_int(c.len, ==, count);
tree_free(root);
next prev parent reply other threads:[~2024-07-22 6:19 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-10 13:01 [GSoC][PATCH 0/4] t: port reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-06-10 13:01 ` [PATCH 1/4] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-06-10 13:01 ` [PATCH 2/4] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-06-10 13:01 ` [PATCH 3/4] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-06-10 13:49 ` Patrick Steinhardt
2024-06-11 6:44 ` Chandra Pratap
2024-06-10 13:01 ` [PATCH 4/4] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-06-12 5:38 ` [GSoC][PATCH v2 0/5] t: port reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-06-12 5:38 ` [PATCH v2 1/5] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-06-12 5:38 ` [PATCH v2 2/5] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-06-12 5:38 ` [PATCH v2 3/5] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-06-12 5:38 ` [PATCH v2 4/5] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-06-12 5:38 ` [PATCH v2 5/5] t-reftable-tree: improve the test for infix_walk() Chandra Pratap
2024-06-12 6:59 ` Patrick Steinhardt
2024-06-12 9:05 ` Chandra Pratap
2024-06-12 12:52 ` [GSoC][PATCH v3 0/5] t: port reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-06-12 12:52 ` [PATCH v3 1/5] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-06-12 12:53 ` [PATCH v3 2/5] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-06-12 12:53 ` [PATCH v3 3/5] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-06-12 12:53 ` [PATCH v3 4/5] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-06-12 12:53 ` [PATCH v3 5/5] t-reftable-tree: improve the test for infix_walk() Chandra Pratap
2024-07-16 7:48 ` [GSoC][PATCH v4 0/5] t: port reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-07-16 7:48 ` [PATCH v4 1/5] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-07-16 7:48 ` [PATCH v4 2/5] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-07-17 11:49 ` Karthik Nayak
2024-07-17 13:50 ` Chandra Pratap
2024-07-18 8:04 ` Karthik Nayak
2024-07-17 12:39 ` Karthik Nayak
2024-07-17 14:30 ` Chandra Pratap
2024-07-17 22:14 ` Justin Tobler
2024-07-18 4:58 ` Chandra Pratap
2024-07-18 8:10 ` Karthik Nayak
2024-07-18 8:23 ` Chandra Pratap
2024-07-18 15:26 ` Justin Tobler
2024-07-16 7:48 ` [PATCH v4 3/5] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-07-16 7:48 ` [PATCH v4 4/5] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-07-16 7:48 ` [PATCH v4 5/5] t-reftable-tree: improve the test for infix_walk() Chandra Pratap
2024-07-16 19:52 ` [GSoC][PATCH v4 0/5] t: port reftable/tree_test.c to the unit testing framework Junio C Hamano
2024-07-22 5:57 ` Chandra Pratap [this message]
2024-07-22 5:57 ` [PATCH v5 1/5] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-07-22 5:57 ` [PATCH v5 2/5] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-07-22 17:52 ` Junio C Hamano
2024-07-22 17:52 ` Junio C Hamano
2024-07-22 17:56 ` Junio C Hamano
2024-07-22 5:57 ` [PATCH v5 3/5] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-07-22 5:57 ` [PATCH v5 4/5] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-07-22 5:57 ` [PATCH v5 5/5] t-reftable-tree: improve the test for infix_walk() Chandra Pratap
2024-08-01 11:21 ` [GSoC][PATCH v5 0/5] t: port reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-08-01 11:45 ` Patrick Steinhardt
2024-08-02 12:08 ` [GSoC][PATCH v6 " Chandra Pratap
2024-08-02 12:08 ` [PATCH v6 1/5] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-08-02 12:08 ` [PATCH v6 2/5] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-08-02 12:08 ` [PATCH v6 3/5] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-08-02 16:25 ` Junio C Hamano
2024-08-02 12:08 ` [PATCH v6 4/5] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-08-02 12:08 ` [PATCH v6 5/5] t-reftable-tree: improve the test for infix_walk() Chandra Pratap
2024-08-04 14:06 ` [GSoC][PATCH v7 0/5] t: port reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-08-04 14:06 ` [PATCH v7 1/5] reftable: remove unnecessary curly braces in reftable/tree.c Chandra Pratap
2024-08-04 14:06 ` [PATCH v7 2/5] t: move reftable/tree_test.c to the unit testing framework Chandra Pratap
2024-08-04 14:06 ` [PATCH v7 3/5] t-reftable-tree: split test_tree() into two sub-test functions Chandra Pratap
2024-08-04 14:06 ` [PATCH v7 4/5] t-reftable-tree: add test for non-existent key Chandra Pratap
2024-08-04 14:06 ` [PATCH v7 5/5] t-reftable-tree: improve the test for infix_walk() Chandra Pratap
2024-08-05 11:04 ` [GSoC][PATCH v7 0/5] t: port reftable/tree_test.c to the unit testing framework Patrick Steinhardt
2024-08-05 15:53 ` Junio C Hamano
2024-08-06 6:30 ` Patrick Steinhardt
2024-08-06 15:35 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240722061836.4176-1-chandrapratap3519@gmail.com \
--to=chandrapratap3519@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=karthik188@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).