git/t/perf/p0071-sort.sh
René Scharfe b378c2ff1e 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>
2022-07-17 15:20:38 -07:00

53 lines
910 B
Bash
Executable File

#!/bin/sh
test_description='Basic sort performance tests'
. ./perf-lib.sh
test_perf_default_repo
test_expect_success 'setup' '
git ls-files --stage "*.[ch]" "*.sh" |
cut -f2 -d" " |
git cat-file --batch >unsorted
'
test_perf 'sort(1) unsorted' '
sort <unsorted >sorted
'
test_expect_success 'reverse' '
sort -r <unsorted >reversed
'
for file in sorted reversed
do
test_perf "sort(1) $file" "
sort <$file >actual
"
done
for file in unsorted sorted reversed
do
test_perf "string_list_sort() $file" "
test-tool string-list sort <$file >actual
"
test_expect_success "string_list_sort() $file sorts like sort(1)" "
test_cmp_bin sorted actual
"
done
for file in unsorted sorted reversed
do
test_perf "DEFINE_LIST_SORT $file" "
test-tool mergesort sort <$file >actual
"
test_expect_success "DEFINE_LIST_SORT $file sorts like sort(1)" "
test_cmp_bin sorted actual
"
done
test_done