#!/usr/bin/env bash

set -ex

rm -rf test_cells.tmp
mkdir -p test_cells.tmp
cd test_cells.tmp

# don't test $mul to reduce runtime
# don't test $div/$mod/$divfloor/$modfloor to reduce runtime and avoid "div by zero" message
../../../yosys -p 'test_cell -n 5 -w test all /$alu /$fa /$lcu /$lut /$macc /$mul /$div /$mod /$divfloor /$modfloor'

cat > template.txt << "EOT"
%module main
  INVARSPEC ! bool(_trigger);
EOT

for fn in test_*.il; do
	../../../yosys -p "
		read_rtlil $fn
		rename gold gate
		synth

		read_rtlil $fn
		miter -equiv -flatten gold gate main
		hierarchy -top main
		write_smv -tpl template.txt ${fn#.il}.smv
	"
	nuXmv -dynamic ${fn#.il}.smv > ${fn#.il}.out
done

grep '^-- invariant .* is false' *.out || echo 'All OK.'

