1#!/bin/bash 2 3UG="../src/ugrep --color=always --sort" 4 5FILES="Hello.bat Hello.class Hello.java Hello.pdf Hello.sh Hello.txt" 6 7if [ ! -x "../src/ugrep" ] ; then 8 echo "../src/ugrep not found, exiting" 9 exit 1 10fi 11 12read -p "Are you sure to overwrite all test cases with new ones? (y/n [n]) " -rsn1 key < /dev/tty 13case $key in 14 y|Y) 15 echo yes 16 ;; 17 *) 18 echo no 19 exit 0 20 ;; 21esac 22 23export GREP_COLORS='cx=hb:ms=hug:mc=ib+W:fn=h35:ln=32h:cn=1;32:bn=1;32:se=+36' 24 25echo "GENERATING TEST DIRECTORIES" 26 27rm -rf out/ dir1/ dir2 28 29mkdir -p out dir1 dir2 30 31ln -s ../Hello.java dir1 32cp Hello.sh dir1 33cp Hello.bat dir1 34cp makefile dir1 35ln -s ../Hello.java dir2 36cp Hello.sh dir2 37cp Hello.bat dir2 38ln -s ../dir2 dir1 39ln -s ../dir1 dir2 40cat > dir1/.gitignore << END 41# ignore shells 42*.sh 43# ignore dir2 (sub)directories 44**/dir2/ 45END 46 47$UG -rl Hello dir1 > out/dir.out 48$UG -Rl Hello dir1 > out/dir-S.out 49$UG -Rl -Osh Hello dir1 > out/dir-O.out 50$UG -Rl -M'#!/bin/sh' Hello dir1 > out/dir-M.out 51$UG -Rl -tShell,make Hello dir1 > out/dir-t.out 52$UG -1l Hello dir1 > out/dir-1.out 53$UG -2l Hello dir1 > out/dir-2.out 54$UG -Rl --include='*.sh' Hello dir1 > out/dir--include.out 55$UG -Rl --exclude='*.sh' Hello dir1 > out/dir--exclude.out 56$UG -Rl --include-dir='dir1' Hello dir1 > out/dir--include-dir.out 57$UG -Rl --exclude-dir='dir2' Hello dir1 > out/dir--exclude-dir.out 58$UG -Rl --include-from='dir1/.gitignore' Hello dir2 > out/dir--include-from.out 59$UG -Rl --exclude-from='dir1/.gitignore' Hello dir1 > out/dir--exclude-from.out 60$UG -Rl --ignore-files Hello dir1 > out/dir--ignore-files.out 61$UG -Rl --filter='sh:head -n1' Hello dir1 > out/dir--filter.out 62 63rm -rf dir1 dir2 64 65echo "GENERATING TEST FILES" 66 67cat > lorem << END 68Lorêm 69ïpsûm 70dolor 71sit 72amét 73END 74 75for OPS in '' '-F' '-G' '-P' ; do 76 $UG $OPS -iwco -f lorem lorem.utf8.txt > "out/lorem.utf8$OPS-iwco.out" 77 $UG $OPS -iwco -f lorem lorem.utf16.txt > "out/lorem.utf16$OPS-iwco.out" 78 $UG $OPS -iwco -f lorem lorem.utf32.txt > "out/lorem.utf32$OPS-iwco.out" 79 cat lorem | $UG $OPS -iwco --encoding=LATIN1 -f - lorem.latin1.txt > "out/lorem.latin1$OPS-iwco.out" 80done 81 82$UG -Zio Lorem lorem.utf8.txt > out/lorem_Lorem-Zio.out 83 84$UG -ci hello $FILES > out/Hello_Hello-ci.out 85$UG -cj hello $FILES > out/Hello_Hello-cj.out 86 87$UG -e Hello -e '".*?"' $FILES > out/Hello_Hello-ee.out 88$UG -e Hello -N '".*?"' $FILES > out/Hello_Hello-eN.out 89$UG --max-count=1 Hello $FILES > out/Hello_Hello--max-count.out 90$UG --max-files=1 Hello $FILES > out/Hello_Hello--max-files.out 91$UG --range=1,1 Hello $FILES > out/Hello_Hello--range.out 92 93for PAT in '' 'Hello' '\w+\s+\S+' '\S\n\S' 'nomatch' ; do 94 FN=`echo "Hello_$PAT" | tr -Cd '[:alnum:]_'` 95 for OUT in '' '-I' '-W' '-X' ; do 96 for OPS in '' '-l' '-lv' '-c' '-co' '-cv' '-n' '-nkbT' '-unkbT' '-o' '-on' '-onkbT' '-ounkbT' '-v' '-nv' '-C2' '-nC2' '-vC2' '-nvC2' '-y' '-ny' '-vy' '-nvy' ; do 97 $UG -U $OUT $OPS "$PAT" $FILES > "out/$FN$OUT$OPS.out" 98 done 99 done 100 for OUT in '--csv' '--json' '--xml' ; do 101 for OPS in '' '-l' '-lv' '-c' '-co' '-cv' '-n' '-v' '-nv' '-nkb' '-unkb' '-o' '-on' '-onkb' '-ounkb' ; do 102 $UG -U $OUT $OPS "$PAT" $FILES > "out/$FN$OUT$OPS.out" 103 done 104 done 105 $UG -U --tag "$PAT" $FILES > "out/$FN--tag.out" 106 $UG -U --format-open='%m) %f:%~' --format=' %m) %n,%k %w-%d%~' --format-close='%~' "$PAT" $FILES > "out/$FN--format.out" 107 $UG -U -v --format-open='%m) %f:%~' --format=' %m) %n,%k %w-%d%~' --format-close='%~' "$PAT" $FILES > "out/$FN-v--format.out" 108 $UG -U -Iw "$PAT" $FILES > "out/$FN-Iw.out" 109 $UG -U -Ix "$PAT" $FILES > "out/$FN-Ix.out" 110 $UG -U -F "$PAT" $FILES > "out/$FN-F.out" 111 $UG -U -Fw "$PAT" $FILES > "out/$FN-Fw.out" 112 $UG -U -Fx "$PAT" $FILES > "out/$FN-Fx.out" 113 if [ "$PAT" == '\w+\s+\S+' ]; then 114 $UG -U -G '\w\+\s\+\S\+' $FILES > "out/$FN-G.out" 115 $UG -U -Gw '\w\+\s\+\S\+' $FILES > "out/$FN-Gw.out" 116 $UG -U -Gx '\w\+\s\+\S\+' $FILES > "out/$FN-Gx.out" 117 else 118 $UG -U -G "$PAT" $FILES > "out/$FN-G.out" 119 $UG -U -Gw "$PAT" $FILES > "out/$FN-Gw.out" 120 $UG -U -Gx "$PAT" $FILES > "out/$FN-Gx.out" 121 fi 122 $UG -U -IP "$PAT" $FILES > "out/$FN-IP.out" 123 $UG -U -IPw "$PAT" $FILES > "out/$FN-IPw.out" 124 $UG -U -IPx "$PAT" $FILES > "out/$FN-IPx.out" 125done 126 127for PAT in '' 'Hello World' 'Hello -World' 'Hello -bin' 'bin -Hello' 'bin -greeting' 'Hello -World|greeting' 'Hello -bin|greeting' 'Hello -(greeting|World)' '"a Hello" greeting' ; do 128 FN=`echo "Hello_$PAT" | tr -Cd '[:alnum:]_-'` 129 for OPS in '' '-l' '-c' '-co' '-o' '-C2' '-y' '--json' ; do 130 $UG -U --bool $OPS "$PAT" $FILES > "out/$FN--bool$OPS.out" 131 $UG -U --files --bool $OPS "$PAT" $FILES > "out/$FN--files--bool$OPS.out" 132 done 133done 134 135$UG -U -e 'Hello' --and 'World' $FILES > "out/Hello--and.out" 136$UG -U -e 'Hello' --andnot 'World' $FILES > "out/Hello--andnot.out" 137$UG -U -e 'Hello' --and --not 'World' -e 'greeting' $FILES > "out/Hello--and--not.out" 138 139echo "GENERATING TEST ARCHIVES" 140 141rm -f archive.* 142 143ls $FILES empty.txt | cpio -o --quiet > archive.cpio 144ls $FILES empty.txt | pax -w -f archive.pax 145tar cf archive.tar Hello.* empty.txt 146compress -c archive.tar > archive.tZ 147gzip -9 -c archive.tar > archive.tgz 148bzip2 -9 -c archive.tar > archive.tbz 149lzma -9 -c archive.tar > archive.tlz 150xz -9 -c archive.tar > archive.txz 151lz4 -9 -c archive.tar > archive.tar.lz4 152zstd -9 -c archive.tar > archive.tzst 153zip -9 -q archive.tar.zip archive.tar 154zip -9 -q archive.zip $FILES empty.txt 155 156$UG -z -c Hello archive.cpio > out/archive.cpio.out 157$UG -z -c Hello archive.pax > out/archive.pax.out 158$UG -z -c Hello archive.tar > out/archive.tar.out 159$UG -z -c Hello archive.tgz > out/archive.tgz.out 160$UG -z -c Hello archive.tZ > out/archive.tZ.out 161$UG -z -c Hello archive.tar.zip > out/archive.tar.zip.out 162$UG -z -c Hello archive.zip > out/archive.zip.out 163$UG -z -c Hello archive.tbz > out/archive.tbz.out 164$UG -z -c Hello archive.tlz > out/archive.tlz.out 165$UG -z -c Hello archive.txz > out/archive.txz.out 166$UG -z -c Hello archive.tar.lz4 > out/archive.tar.lz4.out 167$UG -z -c Hello archive.tzst > out/archive.tzst.out 168 169$UG -z -c -tShell Hello archive.cpio > out/archive-t.cpio.out 170$UG -z -c -tShell Hello archive.pax > out/archive-t.pax.out 171$UG -z -c -tShell Hello archive.tar > out/archive-t.tar.out 172$UG -z -c -tShell Hello archive.tgz > out/archive-t.tgz.out 173$UG -z -c -tShell Hello archive.tZ > out/archive-t.tZ.out 174$UG -z -c -tShell Hello archive.tar.zip > out/archive-t.tar.zip.out 175$UG -z -c -tShell Hello archive.zip > out/archive-t.zip.out 176$UG -z -c -tShell Hello archive.tbz > out/archive-t.tbz.out 177$UG -z -c -tShell Hello archive.tlz > out/archive-t.tlz.out 178$UG -z -c -tShell Hello archive.txz > out/archive-t.txz.out 179$UG -z -c -tShell Hello archive.tar.lz4 > out/archive-t.tar.lz4.out 180$UG -z -c -tShell Hello archive.tzst > out/archive-t.tzst.out 181 182for (( i = 0 ; i < 100000 ; i++ )) ; do 183 echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc hendrerit at metus sit amet aliquam." 184done | gzip -c > archive.gz 185 186$UG -z -c '' archive.gz > out/archive.gz.out 187 188for PAT in '\.' 'et' 'hendrerit' 'aliquam' 'sit amet aliquam' 'Nunc hendrerit at metus sit amet aliquam' 'adip[a-z]{1,}' 'adip[a-z]{4,}' 'adip[a-z]{6}' '[a-z]+' 'a[a-z]+' 'ad[a-z]+' 'adi[a-z]+' ; do 189 FN=`echo "archive_$PAT" | tr -Cd '[:alnum:]_'` 190 $UG -z -co "$PAT" archive.gz > out/$FN-co.gz.out 191done 192