Merge branch 'ds/maintenance-part-2'
[git] / t / perf / p0100-globbing.sh
1 #!/bin/sh
2
3 test_description="Tests pathological globbing performance
4
5 Shows how Git's globbing performance performs when given the sort of
6 pathological patterns described in at https://research.swtch.com/glob
7 "
8
9 . ./perf-lib.sh
10
11 test_globs_big='10 25 50 75 100'
12 test_globs_small='1 2 3 4 5 6'
13
14 test_perf_fresh_repo
15
16 test_expect_success 'setup' '
17         for i in $(test_seq 1 100)
18         do
19                 printf "a" >>refname &&
20                 for j in $(test_seq 1 $i)
21                 do
22                         printf "a*" >>refglob.$i
23                 done &&
24                 echo b >>refglob.$i
25         done &&
26         test_commit test $(cat refname).t "" $(cat refname).t
27 '
28
29 for i in $test_globs_small
30 do
31         test_perf "refglob((a*)^nb) against tag (a^100).t; n = $i" '
32                 git for-each-ref "refs/tags/$(cat refglob.'$i')b"
33         '
34 done
35
36 for i in $test_globs_small
37 do
38         test_perf "fileglob((a*)^nb) against file (a^100).t; n = $i" '
39                 git ls-files "$(cat refglob.'$i')b"
40         '
41 done
42
43 test_done