test-mergesort: use DEFINE_LIST_SORT

Build a typed sort function for the mergesort performance test tool using DEFINE_LIST_SORT instead of calling llist_mergesort(). This gets rid of the next pointer accessor functions and improves the performance at the cost of a slightly higher object text size. Before: 0071.12: llist_mergesort() unsorted 0.24(0.22+0.01) 0071.14: llist_mergesort() sorted 0.12(0.10+0.01) 0071.16: llist_mergesort() reversed 0.12(0.10+0.01) __TEXT __DATA __OBJC others dec hex 6407 276 0 24701 31384 7a98 t/helper/test-mergesort.o With this patch: 0071.12: DEFINE_LIST_SORT unsorted 0.22(0.21+0.01) 0071.14: DEFINE_LIST_SORT sorted 0.11(0.10+0.01) 0071.16: DEFINE_LIST_SORT reversed 0.11(0.10+0.01) __TEXT __DATA __OBJC others dec hex 6615 276 0 25832 32723 7fd3 t/helper/test-mergesort.o Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

René Scharfe committed Jul 16, 2022 at 18:57 UTC b378c2ff1e5f87cc7751d39aef97364acdcdf537
2 files changed +5 -14
t/helper/test-mergesort.c
+3 -12
@@ -13,19 +13,10 @@ struct line {
13 struct line *next;
14 };
15
16 -static void *get_next(const void *a)
17 -{
18 - return ((const struct line *)a)->next;
19 -}
20 -
21 -static void set_next(void *a, void *b)
22 -{
23 - ((struct line *)a)->next = b;
24 -}
16 +DEFINE_LIST_SORT(static, sort_lines, struct line, next);
17
26 -static int compare_strings(const void *a, const void *b)
18 +static int compare_strings(const struct line *x, const struct line *y)
19 {
28 - const struct line *x = a, *y = b;
20 return strcmp(x->text, y->text);
21 }
22
@@ -47,7 +38,7 @@ static int sort_stdin(void)
38 p = line;
39 }
40
50 - lines = llist_mergesort(lines, get_next, set_next, compare_strings);
41 + sort_lines(&lines, compare_strings);
42
43 while (lines) {
44 puts(lines->text);
t/perf/p0071-sort.sh
+2 -2
@@ -40,11 +40,11 @@ done
40
41 for file in unsorted sorted reversed
42 do
43 - test_perf "llist_mergesort() $file" "
43 + test_perf "DEFINE_LIST_SORT $file" "
44 test-tool mergesort sort <$file >actual
45 "
46
47 - test_expect_success "llist_mergesort() $file sorts like sort(1)" "
47 + test_expect_success "DEFINE_LIST_SORT $file sorts like sort(1)" "
48 test_cmp_bin sorted actual
49 "
50 done