#!/bin/sh

# Shell script used to test MINIX.

PATH=:/bin:/usr/bin
export PATH

echo -n "Shell test  1 "
rm -rf DIR_SH1
mkdir DIR_SH1
cd DIR_SH1

f=../test1.c
if test -r $f; then : ; else echo sh1 cannot read $f; exit 1; fi

#Initial setup
echo "abcdefghijklmnopqrstuvwxyz" >alpha
echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ" >ALPHA
echo "0123456789" >num
echo "!@#$%^&*()_+=-{}[]:;<>?/.," >special
cp /etc/rc rc
cp /etc/passwd passwd
cat alpha ALPHA num rc passwd special >tmp
cat tmp tmp tmp >f1


#Test cp
mkdir foo
cp /etc/rc /etc/passwd foo
if cmp -s foo/rc /etc/rc ; then : ; else echo Error on cp test 1; fi
if cmp -s foo/passwd /etc/passwd ; then : ; else echo Error on cp test 2; fi
rm -rf foo

#Test cat
cat num num num num num >y
wc -c y >x1
echo "     55 y" >x2
if cmp -s x1 x2; then : ; else echo Error on cat test 1; fi
cat <y >z
if cmp -s y z; then : ; else echo Error on cat test 2; fi

#Test ar
cat passwd >p
cp passwd q
if cmp -s p q; then : ; else echo Error on ar test 1; fi
date >r
ar r x.a p q r 2>/dev/null
ar r x.a /usr/bin/cp
ar r x.a /usr/bin/cat
rm p q
mv r R
ar x x.a
if cmp -s p /etc/passwd; then : ; else Error on ar test 2; fi
if cmp -s q /etc/passwd; then : ; else Error on ar test 3; fi
if cmp -s r R; then : ; else Error on ar test 4; fi
if cmp -s cp /usr/bin/cp; then : ; else Error on ar test 5; fi
if cmp -s cat /usr/bin/cat; then : ; else Error on ar test 6; fi
rm cp cat p q r
ar d x.a r >/dev/null
ar x x.a
if test -r r; then echo Error on ar test 7; fi
rm -rf p q r R

#Test basename
if test `basename /usr/ast/foo.c .c` != 'foo'
   then echo Error on basename test 1
fi

if test `basename a/b/c/d` != 'd'; then Error on basename test 2; fi

#Test cdiff, sed, and patch
cp $f x.c			# x.c is a copy $f
echo "/a/s//#####/g" >s		# create sed script
sed -f s <x.c >y.c		# y.c is new version of x.c
cdiff x.c y.c >y		# y is cdiff listing
patch x.c y  2>/dev/null	# z should be y.c
if cmp -s x.c y.c; then : ; else echo Error in cdiff test; fi
rm x.c* y.c s y

#Test comm, grep -v
ls /etc >x			# x = list of /etc
grep -v "passwd" x >y		# y = x except for /etc/passwd
comm -3 x y >z			# should only be 1 line, /etc/passwd
echo "passwd" >w
if cmp -s w z; then : else echo Error on comm test 1; fi

comm -13 x y >z			# should be empty
if test -s z; then echo Error on comm test 2; fi
rm -rf w x y z

#Test compress
compress -fc $f >x.c.Z		# compress the test file
compress -cd x.c.Z >y		# uncompress it
if cmp -s $f y; then : else echo Error in compress test 1; fi
rm -rf x.c.Z y

#Test ed
cp $f x				# copy $f to x
cat >y <<END
g/a/s//#####/g
g/b/s//@@@@@/g
g/c/s//!!!!!/g
w
q
END
ed x <y >/dev/null
cat >y <<END
g/#####/s//a/g
g/@@@@@/s//b/g
g/!!!!!/s//c/g
w
q
END
ed x <y >/dev/null
if cmp -s x $f; then : ; else echo Error in ed test 1; fi
rm x y

#Test expr
if test `expr 1 + 1` != 2; then echo Error on expr test 1; fi
if test `expr 10000 - 1` != 9999; then echo Error on expr test 2; fi
if test `expr 100 '*' 50` != 5000; then echo Error on expr test 3; fi
if test `expr 120 / 5` != 24; then echo Error on expr test 4; fi
if test `expr 143 % 7` != 3; then echo Error on expr test 5; fi
a=100
a=`expr $a + 1`
if test $a != '101'; then echo Error on expr test 6; fi

#Test fgrep
fgrep "abc" alpha >z
if cmp -s alpha z ; then : else echo Error on fgrep test 1; fi
fgrep "abc" num >z
if test -s z; then echo Error on fgrep test 2; fi
cat alpha num >z
fgrep "012" z >w
if cmp -s w num; then : ; else echo Error fgrep test 3; fi


#Test find
date >Rabbit
echo "Rabbit" >y
find . -name Rabbit -print >z
if cmp -s y z; then : else echo Error on find test 1; fi
find . -name Bunny -print >z
if test -s z; then echo Error on find test 2; fi
rm Rabbit y z

#Test grep
grep "a" alpha >x
if cmp -s x alpha; then : ; else echo Error on grep test 1; fi
grep "a" ALPHA >x
if test -s x; then echo Error on grep test 2; fi
grep -v "0" alpha >x
if cmp -s x alpha; then : ; else echo Error on grep test 3; fi
grep -s "a" alpha >x
if test -s x; then echo Error on grep test 4; fi
if grep -s "a" alpha >x; then : else echo Error on grep test 5; fi
if grep -s "a" ALPHA >x; then echo Error on grep test 6; fi

#Test head
head -1 f1 >x
if cmp -s x alpha; then : else echo Error on head test 1; fi
head -2 f1 >x
cat alpha ALPHA >y
if cmp -s x y; then : else echo Error on head test 2; fi

#Test ls
mkdir FOO
cp passwd FOO/z
cp alpha FOO/x
cp ALPHA FOO/y
cd FOO
ls >w
cat >w1 <<END
w
x
y
z
END
if cmp -s w w1; then : ; else echo Error on ls test 1; fi
rm *
cd ..
rmdir FOO

#Test mkdir/rmdir
mkdir Foo Bar
if test -d Foo; then : ; else echo Error on mkdir test 1; fi
if test -d Bar; then : ; else echo Error on mkdir test 2; fi
rmdir Foo Bar
if test -d Foo; then echo Error on mkdir test 3; fi
if test -d Foo; then echo Error on rmdir test 4; fi

#Test mv
mkdir MVDIR
cp $f x
mv x y
mv y z
if cmp -s $f z; then : ; else echo Error on mv test 1; fi
cp $f x
mv x MVDIR/y
if cmp -s $f MVDIR/y; then : ; else echo Error on mv test 2; fi

#Test rev
rev <f1 | head -1 >ahpla
echo "zyxwvutsrqponmlkjihgfedcba" >x
if cmp -s x ahpla; then : ; else echo Error on rev test 1; fi
rev <$f >x
rev <x >y
if cmp -s $f x; then echo Error on rev test 2; fi
if cmp -s $f y; then : ; else echo error on rev test 3; fi

#Test shar
cp $f w
cp alpha x
cp ALPHA y
cp num z
shar w x y z >x1
rm w x y z
sh <x1 >/dev/null
if cmp -s w $f; then : ; else echo Error on shar test 1; fi
if cmp -s x alpha; then : ; else echo Error on shar test 2; fi
if cmp -s y ALPHA; then : ; else echo Error on shar test 3; fi
if cmp -s z num; then : ; else echo Error on shar test 4; fi

#Test sort
sort <$f >x
wc <$f >x1
wc <x >x2
if cmp -s x1 x2; then : ; else echo Error on sort test 1; fi
cat >x <<END
demit 10
epitonic 40
apoop 20
bibelot 3
comate 4
END
cat >y <<END
apoop 20
bibelot 3
comate 4
demit 10
epitonic 40
END
cat >z <<END
epitonic 40
demit 10
comate 4
bibelot 3
apoop 20
END
sort <x >x1
if cmp -s y x1; then : ; else echo Error on sort test 2; fi
sort -r <x1 >x2
if cmp -s x2 z; then : ; else echo Error on sort test 3; fi
sort +1 -n <x |head -1 >y
echo "bibelot 3" >z
if cmp -s y z; then : ; else echo Error on sort test 4; fi

#Test tail
tail -1 f1 >x
if cmp -s x special; then : ; else echo Error on tail test 1; fi

#Test tsort
cat >x <<END
a d
b e
c f
a c
p z
k p
a k
a b
b c
c d
d e
e f
f k
END
cat >answer <<END
a
b
c
d
e
f
k
p
z
END
tsort <x >y
if cmp -s y answer; then : ; else echo Error on tsort test 1; fi

#Test uue/uud
cp $f x
uue x
if test -s x.uue; then : ; else echo Error on uue/uud test 1; fi
rm x
uud x.uue
if cmp -s x $f; then : ; else echo Error on uue/uud test 2; fi

compress -fc x >x.Z 2>/dev/null
uue x.Z
rm x x.Z
uud x.uue
compress -cd x.Z >x
if cmp -s x $f; then : ; else echo Error on uue/uud test 3; fi

cd ..
rm -rf DIR_SH1

echo ok
