randomized value testing
diff --git a/tests/tests-randomized/check-bundles.sh b/tests/tests-randomized/check-bundles.sh
new file mode 100755
index 0000000..30944f2
--- /dev/null
+++ b/tests/tests-randomized/check-bundles.sh
@@ -0,0 +1,150 @@
+#!/bin/sh
+
+#
+# Create an ASN.1 source code project for each line in each of the
+# bundles/*.txt files, compile and run that it can be encoded, decoded,
+# and fuzzed (if fuzzing is available).
+#
+
+set -e
+
+
+usage() {
+    echo "Usage:"
+    echo "  $0 -h"
+    echo "  $0 -t \"<ASN.1 definition for type T, in string form>\""
+    echo "  $0 bundles/<bundle-name.txt> [<line>]"
+    echo "Examples:"
+    echo "  $0 -t UTF8String"
+    echo "  $0 -t \"T ::= INTEGER (0..1)\""
+    echo "  $0 bundles/01-INTEGER-bundle.txt 3"
+    exit 1
+}
+
+tests_succeeded=0
+tests_failed=0
+
+# Get all the type-bearding lines in file and process them individually
+verify_asn_types_in_file() {
+    local filename="$1"
+    local need_line="$2"
+    test "x$filename" != "x" || usage
+    echo "Open [$filename]"
+    local line=0
+    while read asn; do
+        line=$((line+1))
+        if echo "$asn" | sed -e 's/--.*//;' | grep -vqi "[A-Z]"; then
+            # Ignore lines consisting of just comments.
+            continue;
+        fi
+        if [ "x$need_line" != "x" -a "$need_line" != "$line" ]; then
+            # We need a different line.
+            continue;
+        fi
+        verify_asn_type "$asn" "in $filename $line"
+    done < "$filename"
+}
+
+verify_asn_type() {
+    local asn="$1"
+    shift
+    local where="$*"
+    test "x$asn" != "x" || usage
+    if echo "$asn" | grep -qv "::="; then
+        asn="T ::= $asn"
+    fi
+    echo "Testing [$asn] ${where}"
+
+    mkdir -p .tmp.random
+    if (cd .tmp.random && compile_and_test "$asn" "$@"); then
+        echo "OK [$asn] ${where}"
+        tests_succeeded=$((tests_succeeded+1))
+    else
+        tests_failed=$((tests_failed+1))
+        echo "FAIL [$asn] ${where}"
+    fi
+}
+
+compile_and_test() {
+    local asn="$1"
+    shift
+
+    if ! asn_compile "$asn" "$@"; then
+        echo "Cannot compile ASN.1 $asn"
+        return 1
+    fi
+
+    rm -f random-test-driver.o
+    rm -f random-test-driver
+    if ! make -j4; then
+        echo "Cannot compile C for $asn in .tmp.random"
+        return 2
+    fi
+
+    echo "Checking random data encode-decode"
+    if ! eval ${ASAN_ENV_FLAGS} ./random-test-driver -c; then
+        return 3
+    fi
+
+    # If LIBFUZZER_CFLAGS are properly defined, do the fuzz test as well
+    if echo "${LIBFUZZER_CFLAGS}" | grep -qi "[a-z]"; then
+        echo "Generating new random data"
+        rm -rf random-data
+        ./random-test-driver -g random-data
+
+        echo "Recompiling for fuzzing..."
+        rm -f random-test-driver.o
+        rm -f random-test-driver
+        CFLAGS="${LIBFUZZER_CFLAGS} ${CFLAGS}" make
+
+        # Do a LibFuzzer based testing
+        fuzz_time=10
+        echo "Fuzzing will take $fuzz_time seconds..."
+        set -x
+        eval ${ASAN_ENV_FLAGS} UBSAN_OPTIONS=print_stacktrace=1 \
+        ./random-test-driver \
+        -timeout=3 -max_total_time=${fuzz_time} -max_len=128
+    fi
+
+    return 0;
+}
+
+srcdir="${srcdir:-.}"
+abs_top_srcdir="${abs_top_srcdir:-$(pwd)/../../}"
+abs_top_builddir="${abs_top_builddir:-$(pwd)/../../}"
+
+asn_compile() {
+    local asn="$1"
+    shift
+    test ! -f Makefile.am   # Protection from accidental clobbering
+    echo "Test DEFINITIONS ::= BEGIN $asn" > test.asn1
+    echo "END" >> test.asn1
+    ${abs_top_builddir}/asn1c/asn1c -S ${abs_top_srcdir}/skeletons \
+        -gen-OER -gen-PER test.asn1
+    rm -f converter-example.c
+    ln -sf ../random-test-driver.c || cp ../random-test-driver.c .
+    sed -e 's/converter-example/random-test-driver/' \
+        < Makefile.am.example > Makefile
+    echo "Makefile.am.example -> Makefile"
+}
+
+# Command line parsing
+case "$1" in
+    -h) usage ;;
+    -t) verify_asn_type "$2" || exit 1;;
+    "")
+        for bundle in bundles/*txt; do
+            verify_asn_types_in_file "$bundle"
+        done
+    ;;
+    *)
+        verify_asn_types_in_file "$@"
+    ;;
+esac
+
+if [ "$tests_succeeded" != "0" -a "$tests_failed" = "0" ]; then
+    echo "OK $tests_succeeded tests"
+else
+    echo "FAILED $tests_failed tests, OK $tests_succeeded tests"
+    exit 1
+fi