#!/bin/csh
set path=(../bin $path)
unset time

zcv Perm.1 p.1
if ( $status != 0 ) goto error
zcv Perm.2 p.2
if ( $status != 0 ) goto error

if ( $#argv == 1 ) goto $1

#####################################################################
# MAKETAB/ZZZ
#####################################################################
zzz:
echo -n "Testing MAKETAB/ZZZ:"
foreach f ( 2 5 25 125 256 )
	echo -n " GF($f)"
	maketab $f > /dev/null
	if ( $status != 0 ) goto error
	zzztest $f > /dev/null
	if ( $status != 0 ) goto error
end
echo " Ok"
if ( $#argv == 1 ) goto end

#####################################################################
# ZCV/ZPR
#####################################################################
zcv:
zpr:
echo -n "Testing ZCV/ZPR:"
echo -n " Permutations"
foreach x ( 1 2 )
	zpr p.$x dummy
	if ( $status != 0 || ! { cmp Perm.$x dummy } ) goto error
end

foreach f ( 2 5 25 125 256 )
    echo -n " GF($f)"
    foreach x ( 1 2 )
	echo "5 $f 24 24" > dummy
	cat dummy Mat.$x | zcv = ${f}mat$x
	if ( $status != 0 ) goto error
	zpr ${f}mat$x dummy
	if ( $status != 0 ) goto error
	zcv dummy dummy2
	if ( $status != 0 || ! { cmp dummy2 ${f}mat$x } ) goto error
    end
end

echo " Ok"
if ( $#argv == 1 ) goto end


#####################################################################
# ZCT/ZPT
#####################################################################
zct:
zpt:
echo -n "Testing ZCT/ZPT:"
echo -n " Permutations"
zpt dummy p.1 p.2 p.1 p.2
if ( $status != 0 ) goto error
zct 4,2-3,1 dummy dummy2
if ( $status != 0 ) goto error
zct 2 dummy2 dummy3
	if ( $status != 0 || ! { cmp dummy3 p.2 } ) goto error
zct 4 dummy2 dummy4
	if ( $status != 0 || ! { cmp dummy4 p.1 } ) goto error

echo -n " GF(5)"
zpt -r 2 -c 2 dummy 5mat1 5mat2 5mat2 5mat1
if ( $status != 0 ) goto error
zpt -R 2 -c 1 dummy2 5mat
if ( $status != 0 ) goto error
zpt -r 2 -c 1 dummy3 5mat2 5mat1
if ( $status != 0 ) goto error
zpt -r 1 -c 2 dummy4 dummy2 dummy3
if ( $status != 0 || ! { cmp dummy dummy4 } ) goto error

zpt -r 1 -C 2 dummy2 5mat
if ( $status != 0 ) goto error
zpt -r 1 -c 2 dummy3 5mat2 5mat1
if ( $status != 0 ) goto error
zpt -r 2 -c 1 dummy4 dummy2 dummy3
if ( $status != 0 || ! { cmp dummy dummy4 } ) goto error

zct 1-24\;1-24 dummy dummy2
if ( $status != 0 || ! { cmp dummy2 5mat1 } ) goto error
zct 1-24\;25-48 dummy dummy2
if ( $status != 0 || ! { cmp dummy2 5mat2 } ) goto error
zct 25-48\;1-24 dummy dummy2
if ( $status != 0 || ! { cmp dummy2 5mat2 } ) goto error
zct 25-48\;25-48 dummy dummy2
if ( $status != 0 || ! { cmp dummy2 5mat1 } ) goto error

echo " Ok"
if ( $#argv == 1 ) goto end



#####################################################################
# ZCF
#####################################################################
zcf:
echo -n "Testing ZCF:"
echo "1 3 5 5" > dummy
cat dummy FM | zcv = 3fm
set ord3 = `zor 3fm`

zcf -Q 9 3fm 9fm
zcf -Q 3 9fm 3fm.cmp
if (! { cmp 3fm 3fm.cmp } ) goto error
set ord9 = `zor 9fm`
if ( "$ord3" != "$ord9" ) goto error

zcf -Q 27 3fm 27fm
zcf -Q 3 27fm 3fm.cmp
if (! { cmp 3fm 3fm.cmp } ) goto error
set ord27 = `zor 27fm`
if ( "$ord3" != "$ord27" ) goto error

zcf -Q 81 3fm 81fm
zcf -Q 3 81fm 3fm.cmp
if (! { cmp 3fm 3fm.cmp } ) goto error
set ord81 = `zor 81fm`
if ( "$ord3" != "$ord81" ) goto error
zcf -Q 81 9fm 81fm.cmp
if (! { cmp 81fm 81fm.cmp } ) goto error

zcf -Q 243 3fm 243fm
zcf -Q 3 243fm 3fm.cmp
if (! { cmp 3fm 3fm.cmp } ) goto error
set ord243 = `zor 243fm`
if ( "$ord3" != "$ord243" ) goto error

echo "1 4 5 5" > dummy
cat dummy FM | zcv = 4fm
set ord4 = `zor 4fm`

zcf -Q 16 4fm 16fm
zcf -Q 4 16fm 4fm.cmp
if (! { cmp 4fm 4fm.cmp } ) goto error
set ord16 = `zor 16fm`
if ( "$ord4" != "$ord16" ) goto error

zcf -Q 64 4fm 64fm
zcf -Q 4 64fm 4fm.cmp
if (! { cmp 4fm 4fm.cmp } ) goto error
set ord64 = `zor 64fm`
if ( "$ord4" != "$ord64" ) goto error

zcf -Q 256 4fm 256fm
zcf -Q 4 256fm 4fm.cmp
if (! { cmp 4fm 4fm.cmp } ) goto error
set ord256 = `zor 256fm`
if ( "$ord4" != "$ord256" ) goto error
zcf -Q 256 16fm 256fm.cmp
if (! { cmp 256fm 256fm.cmp } ) goto error

echo " Ok"
if ( $#argv == 1 ) goto end


#####################################################################
# ZOR/ZMU
#####################################################################
zor:
zmu:
echo -n "Testing ZOR/ZMU: Permutations"
set msg=(`zor p.1`)
if ( $status != 0 || $msg[5] != 2 ) goto error
set msg=(`zor p.2`)
if ( $status != 0 || $msg[5] != 5 ) goto error
zmu p.1 p.2 p.3
if ( $status != 0) goto error
set msg=(`zor p.3`)
if ( $status != 0 || $msg[5] != 18 ) goto error
zmu p.3 p.2 p.4
if ( $status != 0) goto error
set msg=(`zor p.4`)
if ( $status != 0 || $msg[5] != 14 ) goto error

foreach f (2 5 25 256)
	echo -n " GF($f)"
	set msg=(`zor ${f}mat1`)
	if ( $status != 0 || $msg[3] != 2 ) goto error
	set msg=(`zor ${f}mat2`)
	if ( $status != 0 || $msg[3] != 23 ) goto error
	zmu ${f}mat1 ${f}mat2 ${f}mat3
	if ( $status != 0) goto error
	set msg=(`zor ${f}mat3`)
	if ( $status != 0 || $msg[3] != 30 ) goto error
	zmu ${f}mat1 ${f}mat1 ${f}mat4
	if ( $status != 0) goto error
	set msg=(`zor ${f}mat4`)
	if ( $status != 0 || $msg[3] != 1 ) goto error
end
echo " Ok"
if ( $#argv == 1 ) goto end



#####################################################################
# ZAD/ZNU
#####################################################################
zad:
znu:
echo -n "Testing ZNU/ZAD:"

foreach f (2 5 25 256)
	echo -n " GF($f)"
	set msg=(`znu ${f}mat1 nsp`)
	if ( $status != 0 || $msg[2] != 0 ) goto error
	set msg=(`znu ${f}mat2 nsp`)
	if ( $status != 0 || $msg[2] != 0 ) goto error
	zad ${f}mat1 ${f}mat2 ${f}mat5 
	zad ${f}mat5 ${f}mat3 ${f}mat6 
	zad ${f}mat6 ${f}mat4 ${f}mat7 
	set msg=(`znu ${f}mat5 nsp`)
	if ( $status != 0 || $msg[2] != 2 ) goto error
	set msg=(`znu ${f}mat7 nsp`)
	if ( $status != 0 || $msg[2] != 16 ) goto error
end

echo " Ok"
if ( $#argv == 1 ) goto end


#####################################################################
# ZCL/ZSI
#####################################################################
zcl:
zsi:
echo -n "Testing ZCL/ZSI:"

foreach f ( 2 5 25 125 256 )
    echo -n " GF($f)"
    rm -f v1 v2
    zct 1-12 ${f}mat1 v1
    zct 5-20 ${f}mat2 v2
    set x = (`zsi v1 v2 s i`)
    if ( $status != 0 ) goto error
    if ( $x[2] != 24 || $x[4] != 4 ) goto error
    zpt -Q ss v1 v2
    if ( $status != 0 ) goto error
    zef -Q ss sse
    if ( $status != 0 ) goto error
    zcl -Q sse s cl op
    if ( $status != 0 ) goto error
    set x = (`zef cl cle`)
    if ( $status != 0 ) goto error
    if ($x[2] != 0) goto error
    zef -Q v1 v1e
    if ( $status != 0 ) goto error
    zef -Q v2 v2e
    if ( $status != 0 ) goto error
    zcl -Q v1e i cl op
    if ( $status != 0 ) goto error
    set x = (`zef cl cle`)
    if ( $status != 0 ) goto error
    if ($x[2] != 0) goto error
    zcl -Q v2e i cl op
    if ( $status != 0 ) goto error
    set x = (`zef cl cle`)
    if ( $status != 0 ) goto error
    if ($x[2] != 0) goto error
end
echo " Ok"
rm v1 v2 v1e v2e s ss sse i cl cle op
if ( $#argv == 1 ) goto end


#####################################################################
# ZTE/ZSY
#####################################################################
zte:
zsy:
echo -n "Testing ZTE/ZSY:"
echo -n " Permutations"
zte p.1 p.1 z1
set msg=(`zor z1`)
if ( $status != 0 || $msg[5] != 2 ) goto error
zte p.2 p.2 z2
set msg=(`zor z2`)
if ( $status != 0 || $msg[5] != 5 ) goto error
foreach m (e2 e3)
	zsy $m p.1 dummy > /dev/null
	set msg=(`zor dummy`)
	if ( $status != 0 || $msg[5] != 2 ) goto error
	zsy $m p.2 dummy > /dev/null
	set msg=(`zor dummy`)
	if ( $status != 0 || $msg[5] != 5 ) goto error
end

foreach f (2 5 25 256)
	echo -n " GF($f)"
	zte ${f}mat2 ${f}mat2 dummy
	set msg=(`zor dummy`)
	if ( $status != 0 || $msg[3] != 23 ) goto error
	foreach m (s2 e2)
		zsy $m ${f}mat2 dummy > /dev/null
		set msg=(`zor dummy`)
		if ( $status != 0 || $msg[3] != 23 ) goto error
	end
end

zct 1-7\;1-7 5mat2 dummy
zsy e3 dummy dummy2 > /dev/null
set msg=(`zor dummy2`)
if ( $status != 0 || $msg[3] != 624 ) goto error
zsy e4 dummy dummy2 > /dev/null
set msg=(`zor dummy2`)
if ( $status != 0 || $msg[3] != 624 ) goto error
echo " Ok"
if ( $#argv == 1 ) goto end


#####################################################################
# ZMO
#####################################################################
zmo:
echo -n "Testing ZMO: "
zpt perms p.1 p.2
cp /dev/null zmo.log
foreach x ( p.1 p.2 perms )
    zmo $x o os >> zmo.log
    zpr o >> zmo.log
    zpr os >> zmo.log
end
zmo -g 2 p o os >> zmo.log
if (! { cmp zmo.log =zmo.log } ) goto error
echo " Ok"
rm zmo.log perms
if ( $#argv == 1 ) goto end


#####################################################################
# ZCP
#####################################################################
zcp:
echo -n "Testing ZCP: "
zcp m11.1 > zcp.log
zcp -f m11.1 >> zcp.log
zcp -G m11.1 >> zcp.log
zcp m11.2 >> zcp.log
zcp -f m11.2 >> zcp.log
zcp -G m11.2 >> zcp.log
if (! { cmp zcp.log =zcp.log } ) goto error
echo " Ok"
rm zcp.log
if ( $#argv == 1 ) goto end


#####################################################################
# ZVP
#####################################################################
zvp:
echo -n "Testing ZVP: "
echo test > zvp.log
echo "6 5 4 4 " > dummy
echo "0 1 0 0  0 0 1 0  0 0 0 1  2 0 0 0" >> dummy
zcv dummy mat1
echo "6 5 4 4 " > dummy
echo "1 0 0 1  0 0 1 0  0 1 0 0  1 0 0 0" >> dummy
zcv dummy mat2
zvp -l 624 -sr mat1 mat2 mat1 p1 p2 >> zvp.log
zpr p1 >> zvp.log
zpr p2 >> zvp.log
zvp -l 624 -sr -p mat1 mat2 mat1 p1 p2 >> zvp.log
zpr p1 >> zvp.log
zpr p2 >> zvp.log
if (! { cmp zvp.log =zvp.log } ) goto error
echo " Ok"
rm zvp.log
if ( $#argv == 1 ) goto end


#####################################################################
# ZKD
#####################################################################
zkd:
echo -n "Testing ZKD: "
cp /dev/null zkd.log
foreach f ( 2 3 11 25 )
    zkd $f os p.1 k >> zkd.log
    if ( $status != 0 ) goto error
    zpr k >> zkd.log
    zkd $f os p.2 k >> zkd.log
    if ( $status != 0 ) goto error
    zpr k >> zkd.log
end
if (! { cmp zkd.log =zkd.log } ) goto error
echo " Ok"
rm zkd.log
if ( $#argv == 1 ) goto end



#####################################################################
# ZPC
#####################################################################
zpc:
echo -n "Testing ZPC"
set x = ( `zpc p.1 p.2 p.1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 11 || $x[6] != 9 ) goto error
set x = ( `zpc s1 s2 s1 a1 a2 b1 b2` )
if ( $x[1] != Transitive ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 1 || $x[6] != 8 ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 1 || $x[6] != 7 ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 1 || $x[6] != 6 ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 2 || $x[6] != 4 ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 1 || $x[6] != 3 ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 1 || $x[6] != 2 ) goto error
set x = ( `zpc q1 q2 q1 s1 s2 q1 q2` )
if ( $#x < 6 || $x[4] != 1 || $x[6] != 1 ) goto error

set msg=(`zpc z1 z2 p.1 s1 s2 q1 q2`)
if ( $status != 0 || $msg[4] != 110 ) goto error
set msg=(`zor s1`)
if ( $status != 0 || $msg[5] != 2 ) goto error
set msg=(`zor s2`)
if ( $status != 0 || $msg[5] != 5 ) goto error
set msg=(`zor q1`)
if ( $status != 0 || $msg[5] != 2 ) goto error
set msg=(`zor q2`)
if ( $status != 0 || $msg[5] != 5 ) goto error

echo " Ok"
if ( $#argv == 1 ) goto end


#####################################################################
# LATTICE PACKAGE
#####################################################################
lattice:
echo "Testing the lattice package"
rm -f m11.log
chop m11 > m11.log
mkpeak m11 >> m11.log
gkond m11 >> m11.log
mkcycl m11 >> m11.log
mkinc m11 >> m11.log
mkdotl m11 >> m11.log
mksub m11 >> m11.log
if (! { cmp m11.out =m11.out } ) goto error
if (! { cmp m11.lat =m11.lat } ) goto error



#####################################################################
# Normal exit: Clean up
#####################################################################
end:
set nonomatch
rm -f dummy* z1 z2 p1 p2 mat1 mat2 s1 s2 q1 q2 nsp p*.zzz
rm -f a1 a2 b1 b2 o os k
foreach x ( 1 2 3 4)
    rm -f p.$x
    foreach f ( 2 5 25 125 256 )
	rm -f ${f}mat$x
    end
end
foreach x ( 5 6 7)
    foreach f ( 2 5 25 125 256 )
	rm -f ${f}mat$x
    end
end
rm -f m11.{v,dot,inc,cfinfo,md,lat,gra} m111* m114* *fm *fm.cmp
echo "All tests passed"
exit


#####################################################################
# Error: Don't clean up
#####################################################################
error:
echo "ERROR"
exit





