git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[GSoC][PATCH v5 0/5] t: port reftable/tree_test.c to the unit testing framework

From
CPChandra Pratap <chandrapratap3519@gmail.com>
Date
Jul 22, 2024, 05:57 UTC
Message-ID
<20240722061836.4176-1-chandrapratap3519@gmail.com>
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);
Previous: Junio C HamanoNext: Chandra Pratap
Message 39 of 66 in “t: port reftable/tree_test.c to the unit testing framework”
  1. Chandra PratapJun 10, 2024
  2. 1/4 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Jun 10, 2024
  3. 2/4 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jun 10, 2024
  4. 3/4 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Jun 10, 2024
  5. Patrick SteinhardtJun 10, 2024
  6. Chandra PratapJun 11, 2024
  7. 4/4 t-reftable-tree: add test for non-existent keyChandra Pratap, Jun 10, 2024
  8. [GSoC][PATCH v2 0/5] t: port reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jun 12, 2024
  9. 1/5 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Jun 12, 2024
  10. 2/5 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jun 12, 2024
  11. 3/5 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Jun 12, 2024
  12. 4/5 t-reftable-tree: add test for non-existent keyChandra Pratap, Jun 12, 2024
  13. 5/5 t-reftable-tree: improve the test for infix_walk()Chandra Pratap, Jun 12, 2024
  14. Patrick SteinhardtJun 12, 2024
  15. Chandra PratapJun 12, 2024
  16. [GSoC][PATCH v3 0/5] t: port reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jun 12, 2024
  17. 1/5 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Jun 12, 2024
  18. 2/5 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jun 12, 2024
  19. 3/5 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Jun 12, 2024
  20. 4/5 t-reftable-tree: add test for non-existent keyChandra Pratap, Jun 12, 2024
  21. 5/5 t-reftable-tree: improve the test for infix_walk()Chandra Pratap, Jun 12, 2024
  22. [GSoC][PATCH v4 0/5] t: port reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jul 16, 2024
  23. 1/5 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Jul 16, 2024
  24. 2/5 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jul 16, 2024
  25. Karthik NayakJul 17, 2024
  26. Chandra PratapJul 17, 2024
  27. Karthik NayakJul 18, 2024
  28. Karthik NayakJul 17, 2024
  29. Chandra PratapJul 17, 2024
  30. Justin ToblerJul 17, 2024
  31. Chandra PratapJul 18, 2024
  32. Karthik NayakJul 18, 2024
  33. Chandra PratapJul 18, 2024
  34. Justin ToblerJul 18, 2024
  35. 3/5 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Jul 16, 2024
  36. 4/5 t-reftable-tree: add test for non-existent keyChandra Pratap, Jul 16, 2024
  37. 5/5 t-reftable-tree: improve the test for infix_walk()Chandra Pratap, Jul 16, 2024
  38. Junio C HamanoJul 16, 2024
  39. [GSoC][PATCH v5 0/5] t: port reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jul 22, 2024
  40. 1/5 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Jul 22, 2024
  41. 2/5 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Jul 22, 2024
  42. Junio C HamanoJul 22, 2024
  43. Junio C HamanoJul 22, 2024
  44. Junio C HamanoJul 22, 2024
  45. 3/5 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Jul 22, 2024
  46. 4/5 t-reftable-tree: add test for non-existent keyChandra Pratap, Jul 22, 2024
  47. 5/5 t-reftable-tree: improve the test for infix_walk()Chandra Pratap, Jul 22, 2024
  48. Chandra PratapAug 1, 2024
  49. Patrick SteinhardtAug 1, 2024
  50. [GSoC][PATCH v6 0/5] t: port reftable/tree_test.c to the unit testing frameworkChandra Pratap, Aug 2, 2024
  51. 1/5 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Aug 2, 2024
  52. 2/5 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Aug 2, 2024
  53. 3/5 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Aug 2, 2024
  54. Junio C HamanoAug 2, 2024
  55. 4/5 t-reftable-tree: add test for non-existent keyChandra Pratap, Aug 2, 2024
  56. 5/5 t-reftable-tree: improve the test for infix_walk()Chandra Pratap, Aug 2, 2024
  57. [GSoC][PATCH v7 0/5] t: port reftable/tree_test.c to the unit testing frameworkChandra Pratap, Aug 4, 2024
  58. 1/5 reftable: remove unnecessary curly braces in reftable/tree.cChandra Pratap, Aug 4, 2024
  59. 2/5 t: move reftable/tree_test.c to the unit testing frameworkChandra Pratap, Aug 4, 2024
  60. 3/5 t-reftable-tree: split test_tree() into two sub-test functionsChandra Pratap, Aug 4, 2024
  61. 4/5 t-reftable-tree: add test for non-existent keyChandra Pratap, Aug 4, 2024
  62. 5/5 t-reftable-tree: improve the test for infix_walk()Chandra Pratap, Aug 4, 2024
  63. Patrick SteinhardtAug 5, 2024
  64. Junio C HamanoAug 5, 2024
  65. Patrick SteinhardtAug 6, 2024
  66. Junio C HamanoAug 6, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.