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