Squashed 'third_party/pycrc/' content from commit cb91196b9

Change-Id: Iaed6f7d683e3c11395f10f0724f973363aad2cdb
git-subtree-dir: third_party/pycrc
git-subtree-split: cb91196b920d1f892c05941ed470c7a80cba7596
diff --git a/test/check_files.sh b/test/check_files.sh
new file mode 100755
index 0000000..4cc874f
--- /dev/null
+++ b/test/check_files.sh
@@ -0,0 +1,116 @@
+#!/bin/sh
+set -e
+
+PYCRC=`dirname $0`/../pycrc.py
+outdir_old="/tmp/pycrc_out"
+outdir_new="/tmp/pycrc_new"
+tarfile="pycrc_files.tar.gz"
+
+usage() {
+        echo >&2 "usage: $0 [OPTIONS]"
+        echo >&2 ""
+        echo >&2 "with OPTIONS in"
+        echo >&2 "        -c    check the generated output"
+        echo >&2 "        -g    generate the database"
+        echo >&2 "        -n    no cleanup: don't delete the directories with the generated code"
+        echo >&2 "        -h    this help message"
+}
+
+
+opt_check=off
+opt_no_cleanup=off
+opt_generate=off
+
+while getopts cgnh opt; do
+    case "$opt" in
+        c)  opt_check=on;;
+        g)  opt_generate=on;;
+        n)  opt_no_cleanup=on;;
+        h)  usage
+            exit 0
+            ;;
+        \?) usage       # unknown flag
+            exit 1
+            ;;
+    esac
+done
+shift `expr $OPTIND - 1`
+
+if [ -e "$outdir_old" ]; then
+    echo >&2 "Output directory $outdir_old exists!"
+    exit 1
+fi
+if [ -e "$outdir_new" ]; then
+    echo >&2 "Output directory $outdir_new exists!"
+    exit 1
+fi
+
+
+cleanup() {
+    if [ "$opt_no_cleanup" = "on" ]; then
+        echo "No cleanup. Please delete $outdir_old and $outdir_new when you're done"
+    else
+        rm -rf "$outdir_old" "$outdir_new"
+    fi
+}
+
+trap cleanup 0 1 2 3 15
+
+
+generate() {
+    outfile="$1"
+    shift
+    $PYCRC "$@" -o "${outfile}"
+    sed -i -e 's/Generated on ... ... .. ..:..:.. ..../Generated on XXX XXX XX XX:XX:XX XXXX/; s/by pycrc v[0-9.]*/by pycrc vXXX/;' "${outfile}"
+}
+
+populate() {
+    outdir=$1
+    mkdir -p "$outdir"
+    models=`PYTHONPATH=.. python -c 'import pycrc.models as m; print(" ".join(m.CrcModels().names()))'`
+    for model in "undefined" $models; do
+        for algo in "bbb" "bbf" "tbl"; do
+            for cstd in c98 c99; do
+                if [ "$model" = "undefined" ]; then
+                    mod_opt=
+                else
+                    mod_opt="--model=${model}"
+                fi
+                generate "${outdir}/${model}_${algo}_${cstd}.h" --generate=h --algorithm=${algo} $mod_opt
+                generate "${outdir}/${model}_${algo}_${cstd}.c" --generate=c --algorithm=${algo} $mod_opt
+            done
+        done
+    done
+
+    algo=tbl
+    for model in crc-32; do
+        for slice in 4 8 16; do
+            for cstd in c98 c99; do
+                generate "${outdir}/${model}_${algo}_sb${slice}_${cstd}.h" --generate=h --algorithm=${algo} --model=${model} --slice-by ${slice}
+                generate "${outdir}/${model}_${algo}_sb${slice}_${cstd}.c" --generate=c --algorithm=${algo} --model=${model} --slice-by ${slice}
+            done
+        done
+    done
+}
+
+do_check() {
+    tar xzf "$tarfile" -C "`dirname $outdir_new`"
+    populate "$outdir_new"
+    diff -ru "$outdir_old" "$outdir_new"
+}
+
+
+if [ "$opt_check" = "on" ]; then
+    if [ ! -f "$tarfile" ]; then
+        echo >&2 "Can't find tarfile $tarfile"
+        exit 1
+    fi
+    do_check
+fi
+
+if [ "$opt_generate" = "on" ]; then
+    populate "$outdir_old"
+    dirname="`dirname $outdir_old`"
+    basename="`basename $outdir_old`"
+    tar czf "$tarfile" -C "$dirname" "$basename"
+fi