perf: add basic sort performance test

Add a sort command to test-string-list that reads lines from stdin,
stores them in a string_list and then sorts it.  Use it in a simple
perf test script to measure the performance of string_list_sort().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2017-01-22 18:53:57 +01:00 committed by Junio C Hamano
parent 3ca8699409
commit 564e94e619
2 changed files with 51 additions and 0 deletions

View File

@ -97,6 +97,31 @@ int cmd_main(int argc, const char **argv)
return 0; return 0;
} }
if (argc == 2 && !strcmp(argv[1], "sort")) {
struct string_list list = STRING_LIST_INIT_NODUP;
struct strbuf sb = STRBUF_INIT;
struct string_list_item *item;
strbuf_read(&sb, 0, 0);
/*
* Split by newline, but don't create a string_list item
* for the empty string after the last separator.
*/
if (sb.buf[sb.len - 1] == '\n')
strbuf_setlen(&sb, sb.len - 1);
string_list_split_in_place(&list, sb.buf, '\n', -1);
string_list_sort(&list);
for_each_string_list_item(item, &list)
puts(item->string);
string_list_clear(&list, 0);
strbuf_release(&sb);
return 0;
}
fprintf(stderr, "%s: unknown function name: %s\n", argv[0], fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
argv[1] ? argv[1] : "(there was none)"); argv[1] ? argv[1] : "(there was none)");
return 1; return 1;

26
t/perf/p0071-sort.sh Executable file
View File

@ -0,0 +1,26 @@
#!/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)' '
sort <unsorted >expect
'
test_perf 'string_list_sort()' '
test-string-list sort <unsorted >actual
'
test_expect_success 'string_list_sort() sorts like sort(1)' '
test_cmp_bin expect actual
'
test_done