Add optional SEED=n command line option to Makefile, and -S n command line option...
authorEric Smith <brouhaha@fedoraproject.org>
Thu, 15 Sep 2016 08:00:29 +0000 (02:00 -0600)
committerEric Smith <brouhaha@fedoraproject.org>
Thu, 22 Sep 2016 17:49:29 +0000 (11:49 -0600)
14 files changed:
Makefile
tests/asicworld/run-test.sh
tests/bram/generate.py
tests/bram/run-test.sh
tests/fsm/generate.py
tests/fsm/run-test.sh
tests/hana/run-test.sh
tests/memories/run-test.sh
tests/realmath/generate.py
tests/realmath/run-test.sh
tests/share/generate.py
tests/share/run-test.sh
tests/simple/run-test.sh
tests/tools/autotest.mk

index fd31776a3a5771dcc592a16ef146e61320388d6c..15fc2ec09519d1278562e793b37b03dc40bc6fa6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -404,16 +404,22 @@ endif
 yosys-abc$(EXE): abc/abc-$(ABCREV)$(EXE)
        $(P) cp abc/abc-$(ABCREV)$(EXE) yosys-abc$(EXE)
 
+ifneq ($(SEED),)
+SEEDOPT="-S $(SEED)"
+else
+SEEDOPT=""
+endif
+
 test: $(TARGETS) $(EXTRA_TARGETS)
-       +cd tests/simple && bash run-test.sh
-       +cd tests/hana && bash run-test.sh
-       +cd tests/asicworld && bash run-test.sh
-       +cd tests/realmath && bash run-test.sh
-       +cd tests/share && bash run-test.sh
-       +cd tests/fsm && bash run-test.sh
+       +cd tests/simple && bash run-test.sh $(SEEDOPT)
+       +cd tests/hana && bash run-test.sh $(SEEDOPT)
+       +cd tests/asicworld && bash run-test.sh $(SEEDOPT)
+       +cd tests/realmath && bash run-test.sh $(SEEDOPT)
+       +cd tests/share && bash run-test.sh $(SEEDOPT)
+       +cd tests/fsm && bash run-test.sh $(SEEDOPT)
        +cd tests/techmap && bash run-test.sh
-       +cd tests/memories && bash run-test.sh
-       +cd tests/bram && bash run-test.sh
+       +cd tests/memories && bash run-test.sh $(SEEDOPT)
+       +cd tests/bram && bash run-test.sh $(SEEDOPT)
        +cd tests/various && bash run-test.sh
        +cd tests/sat && bash run-test.sh
        @echo ""
index 24983f1a5a580d9fcfc9d43cd2342a1e0cab6c82..d5708c45635a24cfde3e0d62a59b7d407c7e0dbf 100755 (executable)
@@ -1,2 +1,14 @@
 #!/bin/bash
-exec ${MAKE:-make} -f ../tools/autotest.mk EXTRA_FLAGS="-e" *.v
+
+OPTIND=1
+seed=""    # default to no seed specified
+while getopts "S:" opt
+do
+    case "$opt" in
+       S) arg="${OPTARG#"${OPTARG%%[![:space:]]*}"}" # remove leading space
+          seed="SEED=$arg" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
+exec ${MAKE:-make} -f ../tools/autotest.mk $seed EXTRA_FLAGS="-e" *.v
index 05a7ed02784d1fd990be155654e56873f1cefee3..cab81255c313888d432c8f46742716b527c03844 100644 (file)
@@ -1,11 +1,11 @@
 #!/usr/bin/env python3
 
+import argparse
 import os
 import sys
 import random
 
 debug_mode = False
-seed = (int(os.times()[4]*100) + os.getpid()) % 900000 + 100000
 
 def create_bram(dsc_f, sim_f, ref_f, tb_f, k1, k2, or_next):
     while True:
@@ -243,10 +243,23 @@ def create_bram(dsc_f, sim_f, ref_f, tb_f, k1, k2, or_next):
     print("  end", file=tb_f)
     print("endmodule", file=tb_f)
 
-print("Rng seed: %d" % seed)
+parser = argparse.ArgumentParser(formatter_class = argparse.ArgumentDefaultsHelpFormatter)
+parser.add_argument('-S', '--seed',  type = int, help = 'seed for PRNG')
+parser.add_argument('-c', '--count', type = int, default = 5, help = 'number of test cases to generate')
+parser.add_argument('-d', '--debug', action='store_true')
+args = parser.parse_args()
+
+debug_mode = args.debug
+
+if args.seed is not None:
+    seed = args.seed
+else:
+    seed = (int(os.times()[4]*100) + os.getpid()) % 900000 + 100000
+
+print("PRNG seed: %d" % seed)
 random.seed(seed)
 
-for k1 in range(5):
+for k1 in range(args.count):
     dsc_f = open("temp/brams_%02d.txt" % k1, "w")
     sim_f = open("temp/brams_%02d.v" % k1, "w")
     ref_f = open("temp/brams_%02d_ref.v" % k1, "w")
index f0bf0131ea47ff1d9f0cb05ea89d6c611c50beb2..a3041678704f2f6d54067878a8946c2bee0b9ca9 100755 (executable)
@@ -4,11 +4,26 @@
 # MAKE="make -j8" time bash -c 'for ((i=0; i<100; i++)); do echo "-- $i --"; bash run-test.sh || exit 1; done'
 
 set -e
+
+OPTIND=1
+count=5
+seed=""    # default to no seed specified
+debug=""
+while getopts "c:S:" opt
+do
+    case "$opt" in
+       c) count="$OPTARG" ;;
+       d) debug="-d" ;;
+       S) seed="-S $OPTARG" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
 rm -rf temp
 mkdir -p temp
 
 echo "generating tests.."
-python3 generate.py
+python3 generate.py $debug -c $count $seed
 
 {
        echo -n "all:"
index 8757d474183a8989bf84db6f3af728bd40d3bc78..c8eda0cd166ddadbbb2ac39acef84ea19ebc99b8 100644 (file)
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 
+import argparse
 import sys
 import random
 from contextlib import contextmanager
@@ -30,7 +31,16 @@ def random_expr(variables):
         return "%d'd%s" % (bits, random.randint(0, 2**bits-1))
     raise AssertionError
 
-for idx in range(50):
+parser = argparse.ArgumentParser(formatter_class = argparse.ArgumentDefaultsHelpFormatter)
+parser.add_argument('-S', '--seed',  type = int, help = 'seed for PRNG')
+parser.add_argument('-c', '--count', type = int, default = 50, help = 'number of test cases to generate')
+args = parser.parse_args()
+
+if args.seed is not None:
+    print("PRNG seed: %d" % args.seed)
+    random.seed(args.seed)
+
+for idx in range(args.count):
     with open('temp/uut_%05d.v' % idx, 'w') as f:
         with redirect_stdout(f):
             rst2 = random.choice([False, True])
index 423892334f0b694f6f1cab51b97e658c24eb00f6..cf506470deae33f4c772970048c99ce926bb2ace 100755 (executable)
@@ -5,10 +5,22 @@
 
 set -e
 
+OPTIND=1
+count=100
+seed=""    # default to no seed specified
+while getopts "c:S:" opt
+do
+    case "$opt" in
+       c) count="$OPTARG" ;;
+       S) seed="-S $OPTARG" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
 rm -rf temp
 mkdir -p temp
 echo "generating tests.."
-python3 generate.py
+python3 generate.py -c $count $seed
 
 {
        all_targets="all_targets:"
index fb766eec9525c100d7d9f291387e7a02bc16bd12..878c80b3f06b477a1872521f81f68ca239f70f4a 100755 (executable)
@@ -1,2 +1,14 @@
 #!/bin/bash
-exec ${MAKE:-make} -f ../tools/autotest.mk EXTRA_FLAGS="-l hana_vlib.v -n 300 -e" test_*.v
+
+OPTIND=1
+seed=""    # default to no seed specified
+while getopts "S:" opt
+do
+    case "$opt" in
+       S) arg="${OPTARG#"${OPTARG%%[![:space:]]*}"}" # remove leading space
+          seed="SEED=$arg" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
+exec ${MAKE:-make} -f ../tools/autotest.mk $seed EXTRA_FLAGS="-l hana_vlib.v -n 300 -e" test_*.v
index c3b196188663ac62a1387ab02e880eec11841891..734a96682edc3b964bdf2c8e74eaa216e445f23a 100755 (executable)
@@ -1,7 +1,18 @@
 #!/bin/bash
 
 set -e
-bash ../tools/autotest.sh -G *.v
+
+OPTIND=1
+seed=""    # default to no seed specified
+while getopts "S:" opt
+do
+    case "$opt" in
+       S) seed="-S $OPTARG" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
+bash ../tools/autotest.sh $seed -G *.v
 
 for f in `egrep -l 'expect-(wr|rd)-ports' *.v`; do
        echo -n "Testing expectations for $f .."
index 19d01c7c6e543dd478984b233410e5a361549f93..2bedf38e4e3d274473d833833f2e7616dbb56d7d 100644 (file)
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 
+import argparse
 import sys
 import random
 from contextlib import contextmanager
@@ -36,7 +37,16 @@ def random_expression(depth = 3, maxparam = 0):
         return op + '(' + recursion() + ', ' + recursion() + ')'
     raise
 
-for idx in range(100):
+parser = argparse.ArgumentParser(formatter_class = argparse.ArgumentDefaultsHelpFormatter)
+parser.add_argument('-S', '--seed',  type = int, help = 'seed for PRNG')
+parser.add_argument('-c', '--count', type = int, default = 100, help = 'number of test cases to generate')
+args = parser.parse_args()
+
+if args.seed is not None:
+    print("PRNG seed: %d" % args.seed)
+    random.seed(args.seed)
+
+for idx in range(args.count):
     with open('temp/uut_%05d.v' % idx, 'w') as f:
         with redirect_stdout(f):
             print('module uut_%05d(output [63:0] %s);\n' % (idx, ', '.join(['y%02d' % i for i in range(100)])))
index f1ec5476b612947fe391983e143480423b6c83c9..e1a36c694f2ec2731ba0debcaf477418c3cd3e98 100755 (executable)
@@ -1,14 +1,26 @@
 #!/bin/bash
 set -e
 
+OPTIND=1
+count=100
+seed=""    # default to no seed specified
+while getopts "c:S:" opt
+do
+    case "$opt" in
+       c) count="$OPTARG" ;;
+       S) seed="-S $OPTARG" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
 rm -rf temp
 mkdir -p temp
 echo "generating tests.."
-python3 generate.py
+python3 generate.py -c $count $seed
 
 cd temp
 echo "running tests.."
-for ((i = 0; i < 100; i++)); do
+for ((i = 0; i < $count; i++)); do
        echo -n "[$i]"
        idx=$( printf "%05d" $i )
        ../../../yosys -qq uut_${idx}.ys
index 01a19a8d98e0c00b74023dd89731d2d0433f09f6..7e87bd64808997c5245314d2775089279b33838f 100644 (file)
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 
+import argparse
 import sys
 import random
 from contextlib import contextmanager
@@ -21,7 +22,16 @@ def maybe_plus_x(expr):
     else:
         return expr
 
-for idx in range(100):
+parser = argparse.ArgumentParser(formatter_class = argparse.ArgumentDefaultsHelpFormatter)
+parser.add_argument('-S', '--seed',  type = int, help = 'seed for PRNG')
+parser.add_argument('-c', '--count', type = int, default = 100, help = 'number of test cases to generate')
+args = parser.parse_args()
+
+if args.seed is not None:
+    print("PRNG seed: %d" % args.seed)
+    random.seed(args.seed)
+
+for idx in range(args.count):
     with open('temp/uut_%05d.v' % idx, 'w') as f:
         with redirect_stdout(f):
             if random.choice(['bin', 'uni']) == 'bin':
index 18dbbc27922911dc1866a3efec192b82b518a656..1bcd8e423b8d13ec46ec29356664021d389c4a5b 100755 (executable)
@@ -5,10 +5,22 @@
 
 set -e
 
+OPTIND=1
+count=100
+seed=""    # default to no seed specified
+while getopts "c:S:" opt
+do
+    case "$opt" in
+       c) count="$OPTARG" ;;
+       S) seed="-S $OPTARG" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
 rm -rf temp
 mkdir -p temp
 echo "generating tests.."
-python3 generate.py
+python3 generate.py -c $count $seed
 
 echo "running tests.."
 for i in $( ls temp/*.ys | sed 's,[^0-9],,g; s,^0*\(.\),\1,g;' ); do
index 6531d51ae44558680c1b38a275724435dd8aea57..aaa1cf9406c3eb6d2c6734df5c91c1c643cd38b3 100755 (executable)
@@ -1,9 +1,20 @@
 #!/bin/bash
 
+OPTIND=1
+seed=""    # default to no seed specified
+while getopts "S:" opt
+do
+    case "$opt" in
+       S) arg="${OPTARG#"${OPTARG%%[![:space:]]*}"}" # remove leading space
+          seed="SEED=$arg" ;;
+    esac
+done
+shift "$((OPTIND-1))"
+
 # check for Icarus Verilog
 if ! which iverilog > /dev/null ; then
   echo "$0: Error: Icarus Verilog 'iverilog' not found."
   exit 1
 fi
 
-exec ${MAKE:-make} -f ../tools/autotest.mk *.v
+exec ${MAKE:-make} -f ../tools/autotest.mk $seed *.v
index f65002cef240c27f2614feb9f0c6e4f0e01f1b54..c68678929fa703845a192a50716f9b6956bb0f1d 100644 (file)
@@ -1,8 +1,13 @@
 
 EXTRA_FLAGS=
+SEED=
+
+ifneq ($(strip $(SEED)),)
+SEEDOPT=-S$(SEED)
+endif
 
 $(MAKECMDGOALS):
-       @$(basename $(MAKEFILE_LIST)).sh -G -j $(EXTRA_FLAGS) $@
+       @$(basename $(MAKEFILE_LIST)).sh -G -j $(SEEDOPT) $(EXTRA_FLAGS) $@
 
 .PHONY: $(MAKECMDGOALS)