t / perf / p0100-globbing.shon commit Merge branch 'js/fuzzer' (0c41b3b)
   1#!/bin/sh
   2
   3test_description="Tests pathological globbing performance
   4
   5Shows how Git's globbing performance performs when given the sort of
   6pathological patterns described in at https://research.swtch.com/glob
   7"
   8
   9. ./perf-lib.sh
  10
  11test_globs_big='10 25 50 75 100'
  12test_globs_small='1 2 3 4 5 6'
  13
  14test_perf_fresh_repo
  15
  16test_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
  29for i in $test_globs_small
  30do
  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        '
  34done
  35
  36for i in $test_globs_small
  37do
  38        test_perf "fileglob((a*)^nb) against file (a^100).t; n = $i" '
  39                git ls-files "$(cat refglob.'$i')b"
  40        '
  41done
  42
  43test_done