#! /bin/sh

EXDIR=../../Examples

rm -f cbl250.lib
ln -s $EXDIR/cbl250.lib .
rm -f cbl250.lef
ln -s $EXDIR/cbl250.lef .
rm -f simulate
ln -s ../simulate/simulate .
rm -f equiCheck
ln -s ../equiCheck/equiCheck .

mkdir cbl250

lef2oa -lef cbl250.lef -lib cbl250

${OAG_VALGRIND} verilog2oa -verilog smallckt.v -lib simEquiTests -leafLibs cbl250 -leafViews abstract
${OAG_VALGRIND} verilog2oa -verilog s27.v -lib simEquiTests -leafLibs cbl250 -leafViews abstract
${OAG_VALGRIND} verilog2oa -verilog s27_bug.v -lib simEquiTests -leafLibs cbl250 -leafViews abstract
${OAG_VALGRIND} verilog2oa -verilog s27_dup.v -lib simEquiTests -leafLibs cbl250 -leafViews abstract
${OAG_VALGRIND} verilog2oa -verilog s641.v -lib simEquiTests -leafLibs cbl250 -leafViews abstract

# Test simulator
RETURN=0
echo "Testing simulator: s27"
${OAG_VALGRIND} ./simulate -lib simEquiTests -liberty cbl250.lib -cell s27_bench -cycles 2 -seed 10 > s27.out
if diff s27.out s27.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing simulator, user input: smallckt"
${OAG_VALGRIND} ./simulate -lib simEquiTests -liberty cbl250.lib -cell smallckt -cycles 3 -seed 10 -patternFile smallckt.input > smallckti.out
if diff smallckti.out smallckti.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing simulator: smallckt"
${OAG_VALGRIND} ./simulate -lib simEquiTests -liberty cbl250.lib -cell smallckt -cycles 2 -seed 10 > smallckt.out
if diff smallckt.out smallckt.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing equivalence checker, 2 simEquiTests, not equivalent, SIM+SAT: s27 s27_bug"
${OAG_VALGRIND} ./equiCheck -lib simEquiTests -liberty cbl250.lib -cell1 s27_bench -cell2 s27_bench_bug -seed 10 |grep 'equivalent' > s27_equi0.out 
if diff s27_equi0.out s27_equi0.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing equivalence checker, 2 simEquiTests, not equivalent, SAT: s27 s27_bug"
${OAG_VALGRIND} ./equiCheck -lib simEquiTests -liberty cbl250.lib -cell1 s27_bench -cell2 s27_bench_bug -seed 10 -randomPattern 0 |grep 'equivalent' > s27_equi.out
if diff s27_equi.out s27_equi.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing equivalence checker, 2 simEquiTests, equivalent, SAT: s27 s27_dup"
${OAG_VALGRIND} ./equiCheck -lib simEquiTests -liberty cbl250.lib -cell1 s27_bench -cell2 s27_bench_dup -randomPattern 0 -seed 10 > s27_equi2.out
if diff s27_equi2.out s27_equi2.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing equivalence checker, 1 design, 2 nets, SAT only, not equivalent: s641"
${OAG_VALGRIND} ./equiCheck -lib simEquiTests -liberty cbl250.lib -cell1 s641_bench -net1 n_148 -net2 n_178 -randomPattern 0 -seed 10 |grep 'equivalent' > s641_equi1.out
if diff s641_equi1.out s641_equi1.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

echo "Testing equivalence checker, 1 design, 2 nets, SAT+SIM, not equivalent : s641"
${OAG_VALGRIND} ./equiCheck -lib simEquiTests -liberty cbl250.lib -cell1 s641_bench -net1 n_148 -net2 n_178 -seed 10 |grep 'equivalent' > s641_equi2.out
if diff s641_equi2.out s641_equi2.gold ; then
    echo "PASSED"
else
    echo "FAILED ***"
    RETURN=1
fi

# clean up
rm -rf lib.defs simEquiTests cbl250

exit $RETURN



