diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-and-test.yaml similarity index 92% rename from .github/workflows/build-test.yaml rename to .github/workflows/build-and-test.yaml index 5bba3dd..c673daf 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -1,4 +1,4 @@ -name: Build test +name: Build and test on: push: branches: [ "*" ] @@ -82,8 +82,14 @@ jobs: make -C build/slang install - name: Build yosys-slang run: | - yosys-config --build slang.so \ + yosys-config --build build/slang.so \ slang_frontend.cc initial_eval.cc proc_usage.cc \ -Ibuild/slang_install/include -std=c++20 \ -DSLANG_BOOST_SINGLE_HEADER -Lbuild/slang_install/lib \ -lsvlang -lfmt + - name: Pull submodules for tests + run: | + git submodule update --depth 0 -- tests/third_party/picorv32 + - name: Run tests + run: | + tests/run.sh diff --git a/.gitmodules b/.gitmodules index e1463ea..588cd69 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "tests/third_party/yosys"] path = tests/third_party/yosys url = https://github.com/YosysHQ/yosys.git +[submodule "tests/third_party/picorv32"] + path = tests/third_party/picorv32 + url = https://github.com/YosysHQ/picorv32.git diff --git a/tests/run.sh b/tests/run.sh new file mode 100755 index 0000000..dd69161 --- /dev/null +++ b/tests/run.sh @@ -0,0 +1,22 @@ +#!/bin/bash +YOSYS=yosys +TESTSDIR="$(dirname "${BASH_SOURCE[0]}")" +PLUGIN="$(realpath "$TESTSDIR/../build/slang.so")" +code=0 +for testcase in "$TESTSDIR"/*/*.ys; +do + TEXT=$testcase; + base=$(basename "$testcase") + dir=$(dirname "$testcase") + echo -n "${TEXT}... "; + if ! (cd "$dir" && exec "$YOSYS" -m "$PLUGIN" -s "$base" 1>/dev/null 2>&1); then + echo -e "\e[31mFAIL\e[0m"; + echo -e "Testcase \e[1m${testcase}\e[0m failed"; + (cd "$dir" && exec "$YOSYS" -g -Q -m "$PLUGIN" -s "$base"); + echo; + code=1; + else + echo -e "\e[32mOK\e[0m"; + fi +done; +exit $code diff --git a/tests/third_party/picorv32 b/tests/third_party/picorv32 new file mode 160000 index 0000000..336cfca --- /dev/null +++ b/tests/third_party/picorv32 @@ -0,0 +1 @@ +Subproject commit 336cfca6e5f1c08788348aadc46b3581b9a5d585 diff --git a/tests/various/picorv32_gcd.hex b/tests/various/picorv32_gcd.hex new file mode 100644 index 0000000..a821b41 --- /dev/null +++ b/tests/various/picorv32_gcd.hex @@ -0,0 +1,2048 @@ +17 +41 +00 +00 +13 +01 +01 +00 +ef +00 +00 +01 +ef +00 +40 +22 +73 +00 +50 +10 +6f +f0 +df +ff +13 +01 +81 +ff +23 +22 +81 +00 +13 +04 +81 +00 +93 +07 +80 +37 +23 +2c +f4 +fe +6f +00 +80 +01 +83 +27 +84 +ff +23 +a0 +07 +00 +83 +27 +84 +ff +93 +87 +47 +00 +23 +2c +f4 +fe +03 +27 +84 +ff +93 +07 +80 +37 +e3 +12 +f7 +fe +13 +00 +00 +00 +13 +00 +00 +00 +03 +24 +41 +00 +13 +01 +81 +00 +67 +80 +00 +00 +13 +01 +81 +ff +23 +22 +81 +00 +13 +04 +81 +00 +93 +07 +05 +00 +a3 +0d +f4 +fe +b7 +07 +00 +10 +03 +47 +b4 +ff +23 +a0 +e7 +00 +13 +00 +00 +00 +03 +24 +41 +00 +13 +01 +81 +00 +67 +80 +00 +00 +13 +01 +01 +ff +23 +26 +11 +00 +23 +24 +81 +00 +13 +04 +01 +01 +23 +28 +a4 +fe +6f +00 +c0 +01 +83 +27 +04 +ff +13 +87 +17 +00 +23 +28 +e4 +fe +83 +c7 +07 +00 +13 +85 +07 +00 +ef +f0 +5f +fa +83 +27 +04 +ff +83 +c7 +07 +00 +e3 +90 +07 +fe +13 +00 +00 +00 +13 +85 +07 +00 +83 +20 +c1 +00 +03 +24 +81 +00 +13 +01 +01 +01 +67 +80 +00 +00 +13 +01 +41 +fe +23 +2c +11 +00 +23 +2a +81 +00 +13 +04 +c1 +01 +23 +22 +a4 +fe +23 +28 +04 +fe +6f +00 +40 +05 +83 +27 +44 +fe +93 +05 +a0 +00 +13 +85 +07 +00 +ef +00 +00 +22 +93 +07 +05 +00 +13 +f7 +f7 +0f +83 +27 +04 +ff +93 +86 +17 +00 +23 +28 +d4 +fe +13 +07 +07 +03 +13 +77 +f7 +0f +93 +87 +47 +ff +b3 +87 +87 +00 +23 +8a +e7 +fe +83 +27 +44 +fe +93 +05 +a0 +00 +13 +85 +07 +00 +ef +00 +40 +16 +93 +07 +05 +00 +23 +22 +f4 +fe +83 +27 +44 +fe +e3 +46 +f0 +fa +6f +00 +c0 +02 +83 +27 +04 +ff +93 +87 +f7 +ff +93 +87 +47 +ff +b3 +87 +87 +00 +83 +c7 +47 +ff +13 +85 +07 +00 +ef +f0 +df +ee +83 +27 +04 +ff +93 +87 +f7 +ff +23 +28 +f4 +fe +83 +27 +04 +ff +e3 +4a +f0 +fc +13 +00 +00 +00 +13 +00 +00 +00 +83 +20 +81 +01 +03 +24 +41 +01 +13 +01 +c1 +01 +67 +80 +00 +00 +13 +01 +c1 +fe +23 +28 +11 +00 +23 +26 +81 +00 +13 +04 +41 +01 +23 +28 +a4 +fe +23 +26 +b4 +fe +03 +27 +04 +ff +83 +27 +c4 +fe +63 +16 +f7 +00 +83 +27 +04 +ff +6f +00 +c0 +04 +03 +27 +04 +ff +83 +27 +c4 +fe +63 +d2 +e7 +02 +03 +27 +04 +ff +83 +27 +c4 +fe +b3 +07 +f7 +40 +83 +25 +c4 +fe +13 +85 +07 +00 +ef +f0 +5f +fb +93 +07 +05 +00 +6f +00 +00 +02 +03 +27 +c4 +fe +83 +27 +04 +ff +b3 +07 +f7 +40 +83 +25 +04 +ff +13 +85 +07 +00 +ef +f0 +5f +f9 +93 +07 +05 +00 +13 +85 +07 +00 +83 +20 +01 +01 +03 +24 +c1 +00 +13 +01 +41 +01 +67 +80 +00 +00 +13 +01 +c1 +fe +23 +28 +11 +00 +23 +26 +81 +00 +13 +04 +41 +01 +93 +07 +50 +02 +23 +28 +f4 +fe +93 +07 +10 +05 +23 +26 +f4 +fe +13 +05 +00 +36 +ef +f0 +1f +e4 +03 +25 +04 +ff +ef +f0 +df +e8 +13 +05 +80 +36 +ef +f0 +1f +e3 +03 +25 +c4 +fe +ef +f0 +df +e7 +13 +05 +c0 +36 +ef +f0 +1f +e2 +83 +25 +c4 +fe +03 +25 +04 +ff +ef +f0 +9f +f2 +93 +07 +05 +00 +13 +85 +07 +00 +ef +f0 +df +e5 +13 +05 +40 +37 +ef +f0 +1f +e0 +13 +00 +00 +00 +83 +20 +01 +01 +03 +24 +c1 +00 +13 +01 +41 +01 +67 +80 +00 +00 +63 +40 +05 +06 +63 +c6 +05 +06 +13 +86 +05 +00 +93 +05 +05 +00 +13 +05 +f0 +ff +63 +0c +06 +02 +93 +06 +10 +00 +63 +7a +b6 +00 +63 +58 +c0 +00 +13 +16 +16 +00 +93 +96 +16 +00 +e3 +6a +b6 +fe +13 +05 +00 +00 +63 +e6 +c5 +00 +b3 +85 +c5 +40 +33 +65 +d5 +00 +93 +d6 +16 +00 +13 +56 +16 +00 +e3 +96 +06 +fe +67 +80 +00 +00 +93 +82 +00 +00 +ef +f0 +5f +fb +13 +85 +05 +00 +67 +80 +02 +00 +33 +05 +a0 +40 +63 +48 +b0 +00 +b3 +05 +b0 +40 +6f +f0 +df +f9 +b3 +05 +b0 +40 +93 +82 +00 +00 +ef +f0 +1f +f9 +33 +05 +a0 +40 +67 +80 +02 +00 +93 +82 +00 +00 +63 +ca +05 +00 +63 +4c +05 +00 +ef +f0 +9f +f7 +13 +85 +05 +00 +67 +80 +02 +00 +b3 +05 +b0 +40 +e3 +58 +05 +fe +33 +05 +a0 +40 +ef +f0 +1f +f6 +33 +05 +b0 +40 +67 +80 +02 +00 +67 +63 +64 +28 +00 +00 +00 +00 +2c +00 +00 +00 +29 +20 +3d +20 +00 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/tests/various/picorv32_gcd.ys b/tests/various/picorv32_gcd.ys new file mode 100644 index 0000000..89f6e42 --- /dev/null +++ b/tests/various/picorv32_gcd.ys @@ -0,0 +1,70 @@ +read_slang --top picorv32 ../third_party/picorv32/picorv32.v +read_verilog <