tests: Centralize test collection and Makefile generation
authorXiretza <xiretza@xiretza.xyz>
Wed, 16 Sep 2020 15:59:37 +0000 (17:59 +0200)
committerXiretza <xiretza@xiretza.xyz>
Mon, 21 Sep 2020 13:07:02 +0000 (15:07 +0200)
16 files changed:
tests/arch/anlogic/run-test.sh
tests/arch/ecp5/run-test.sh
tests/arch/efinix/run-test.sh
tests/arch/gowin/run-test.sh
tests/arch/ice40/run-test.sh
tests/arch/intel_alm/run-test.sh
tests/arch/xilinx/run-test.sh
tests/gen-tests-makefile.sh [new file with mode: 0755]
tests/opt/run-test.sh
tests/sat/run-test.sh
tests/svtypes/run-test.sh
tests/techmap/mem_simple_4x1_runtest.sh
tests/techmap/recursive_runtest.sh
tests/techmap/run-test.sh
tests/various/run-test.sh
tests/verilog/run-test.sh

index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
index bf19b887d99406c7e7ddd5ea88297b69ca36745c..4be4b70ae17a3b4f46f87d16bc1b83add1797fc0 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
diff --git a/tests/gen-tests-makefile.sh b/tests/gen-tests-makefile.sh
new file mode 100755 (executable)
index 0000000..176890d
--- /dev/null
@@ -0,0 +1,94 @@
+set -eu
+
+YOSYS_BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../ >/dev/null 2>&1 && pwd)"
+
+# $ generate_target target_name test_command
+generate_target() {
+       target_name=$1
+       test_command=$2
+       echo "all:: $target_name"
+       echo ".PHONY: $target_name"
+       echo "$target_name:"
+       printf "\t@%s\n" "$test_command"
+       printf "\t@echo 'Passed %s'\n" "$target_name"
+}
+
+# $ generate_ys_test ys_file [yosys_args]
+generate_ys_test() {
+       ys_file=$1
+       yosys_args=${2:-}
+       generate_target "$ys_file" "$YOSYS_BASEDIR/yosys -ql ${ys_file%.*}.log $yosys_args $ys_file"
+}
+
+# $ generate_bash_test bash_file
+generate_bash_test() {
+       bash_file=$1
+       generate_target "$bash_file" "bash -v $bash_file >${bash_file%.*}.log 2>&1"
+}
+
+# $ generate_tests [-y|--yosys-scripts] [-s|--prove-sv] [-b|--bash] [-a|--yosys-args yosys_args]
+generate_tests() {
+       do_ys=false
+       do_sv=false
+       do_sh=false
+       yosys_args=""
+
+       while [[ $# -gt 0 ]]; do
+               arg="$1"
+               case "$arg" in
+                       -y|--yosys-scripts)
+                               do_ys=true
+                               shift
+                               ;;
+                       -s|--prove-sv)
+                               do_sv=true
+                               shift
+                               ;;
+                       -b|--bash)
+                               do_sh=true
+                               shift
+                               ;;
+                       -a|--yosys-args)
+                               yosys_args+="$2"
+                               shift
+                               shift
+                               ;;
+                       *)
+                               echo >&2 "Unknown argument: $1"
+                               exit 1
+               esac
+       done
+
+       if [[ ! ( $do_ys = true || $do_sv = true || $do_sh = true ) ]]; then
+               echo >&2 "Error: No file types selected"
+               exit 1
+       fi
+
+       echo ".PHONY: all"
+       echo "all::"
+
+       if [[ $do_ys = true ]]; then
+               for x in *.ys; do
+                       generate_ys_test "$x" "$yosys_args"
+               done
+       fi;
+       if [[ $do_sv = true ]]; then
+               for x in *.sv; do
+                       if [ ! -f "${x%.sv}.ys"  ]; then
+                               generate_ys_test "$x" "-p \"prep -top top; sat -verify -prove-asserts\" $yosys_args"
+                       fi;
+               done
+       fi;
+       if [[ $do_sh == true ]]; then
+               for s in *.sh; do
+                       if [ "$s" != "run-test.sh" ]; then
+                               generate_bash_test "$s"
+                       fi
+               done
+       fi
+}
+
+run_tests() {
+       generate_tests "$@" > run-test.mk
+       exec ${MAKE:-make} -f run-test.mk
+}
index 44ce7e6741f45edf2bad06e8f6424cfef095f8dd..2007cd6e4cc5b6b613ccfdf45566168094a16963 100755 (executable)
@@ -1,6 +1,4 @@
 #!/bin/bash
-set -e
-for x in *.ys; do
-  echo "Running $x.."
-  ../../yosys -ql ${x%.ys}.log $x
-done
+set -eu
+source ../gen-tests-makefile.sh
+run_tests --yosys-scripts
index 67e1beb23b3a4fe2a48c13617cc8db2e4dd243c5..74589dfeb570f873666ee7fadc24e4175b9eacbc 100755 (executable)
@@ -1,6 +1,4 @@
-#!/bin/bash
-set -e
-for x in *.ys; do
-       echo "Running $x.."
-       ../../yosys -ql ${x%.ys}.log $x
-done
+#!/usr/bin/env bash
+set -eu
+source ../gen-tests-makefile.sh
+run_tests --yosys-scripts
index 09a30eed1cae7f518042d6cc804ff7772db11f2d..91ceae227fb4f9b5f242ca08b2a99be18037eec9 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log $x"
-done
-for x in *.sv; do
-       if [ ! -f "${x%.sv}.ys"  ]; then
-               echo "all:: check-$x"
-               echo "check-$x:"
-               echo "  @echo 'Checking $x..'"
-               echo "  @../../yosys -ql ${x%.sv}.log -p \"prep -top top; sat -verify -prove-asserts\" $x"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../gen-tests-makefile.sh
+run_tests --yosys-scripts --prove-sv
index e2c6303da85529138ee89189024592925967a5ba..9c41fa56af06a4aefb5727e25c1af737974ae20e 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-set -ev
+set -e
 
 ../../yosys -b 'verilog -noattr' -o mem_simple_4x1_synth.v -p 'proc; opt; memory -nomap; techmap -map mem_simple_4x1_map.v;; techmap; opt; abc;; stat' mem_simple_4x1_uut.v
 
index 30c79bf035e04b290fbc8894a20608fbc604f65b..0725ccf40a51ddbb3d7d974f5f1710d904f33057 100644 (file)
@@ -1,3 +1,3 @@
-set -ev
+set -e
 
 ../../yosys -p 'hierarchy -top top; techmap -map recursive_map.v -max_iter 1; select -assert-count 2 t:sub; select -assert-count 2 t:bar' recursive.v
index c16f204d9708ae9e9cbc012084a48d9ee97d782e..581847ab04e786f58bed13bf1a75160f42c1b64a 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log -e 'select out of bounds' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s > ${s%.sh}.log 2>&1"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash --yosys-args "-e 'select out of bounds'"
index ea56b70f029f9ce25afd09b08be9649d3e41b7a7..2f91cf0fd4e91046409b6e7728cf6d184960282b 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash
index ea56b70f029f9ce25afd09b08be9649d3e41b7a7..2f91cf0fd4e91046409b6e7728cf6d184960282b 100755 (executable)
@@ -1,20 +1,4 @@
 #!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
+set -eu
+source ../gen-tests-makefile.sh
+run_tests --yosys-scripts --bash