all: test
CBIN=../build/tests
NODE=node
NODE_OPTS=--use-strict
TESTS=test_r4x8 test_r4x16 test_arith test_fqzcomp test_tok3
CORPUS=../tests
modules: node_modules/bzip2 node_modules/minimist
node_modules/bzip2:
-mkdir node_modules
npm install bzip2
node_modules/minimist:
-mkdir node_modules
npm install minimist
test check: modules ${TESTS}
test_r4x8:
@echo
@echo === Checking r4x8
@if [ ! -e ${CBIN}/rans4x8 ]; then echo "Set CBIN if you wish to validate against C version"; fi
@for i in ${CORPUS}/dat/r4x8/*; do \
echo $$i;\
base=`echo $$i | sed 's/\.[0-9]*$$//;s#/q#/../q#'`; \
level=`echo $$i | sed 's/.*\.//'`;\
a=`${NODE} ${NODE_OPTS} main_rans.js -d -r $$i 2>/dev/null | md5sum`; \
b=`cut -f 1 < $$base | tr -d '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Mismatch for $$i; \
cut -f 1 < $$base | tr -d '\012' > _nonl; \
${NODE} ${NODE_OPTS} main_rans.js -o $$level -r _nonl 2>/dev/null > _; \
a=`${NODE} ${NODE_OPTS} main_rans.js -d -r _ 2>/dev/null | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail round-trip for $$base with level $$level; \
if [ -e ${CBIN}/rans4x8 ]; \
then \
a=`${CBIN}/rans4x8 -d -r < _ 2>/dev/null | tr '\000' '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail JS to C round-trip for $$base; \
fi; \
done
test_r4x16:
@echo
@echo === Checking r4x16
@if [ ! -e ${CBIN}/rans4x16pr ]; then echo "Set CBIN if you wish to validate against C version"; fi
@for i in ${CORPUS}/dat/r4x16/*; do \
echo $$i;\
base=`echo $$i | sed 's/\.[0-9]*$$//;s#/q#/../q#'`; \
level=`echo $$i | sed 's/.*\.//'`;\
a=`${NODE} ${NODE_OPTS} main_rans4x16.js -d -r $$i 2>/dev/null | md5sum`; \
b=`cut -f 1 < $$base | tr -d '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Mismatch for $$i; \
cut -f 1 < $$base | tr -d '\012' > _nonl; \
${NODE} ${NODE_OPTS} main_rans4x16.js -o $$level -r _nonl 2>/dev/null > _; \
a=`${NODE} ${NODE_OPTS} main_rans4x16.js -d -r _ 2>/dev/null | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail round-trip for $$base with level $$level; \
if [ -e ${CBIN}/rans4x16pr ]; \
then \
a=`${CBIN}/rans4x16pr -d -r < _ 2>/dev/null | tr '\000' '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail JS to C round-trip for $$base; \
fi; \
done
test_arith:
@echo
@echo === Checking arith
@if [ ! -e ${CBIN}/arith_dynamic ]; then echo "Set CBIN if you wish to validate against C version"; fi
@for i in ${CORPUS}/dat/arith/*; do \
echo $$i;\
base=`echo $$i | sed 's/\.[0-9]*$$//;s#/q#/../q#'`; \
level=`echo $$i | sed 's/.*\.//'`;\
a=`${NODE} ${NODE_OPTS} main_arith_gen.js -d -r $$i 2>/dev/null | md5sum`; \
b=`cut -f 1 < $$base | tr -d '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Mismatch for $$i; \
cut -f 1 < $$base | tr -d '\012' > _nonl; \
${NODE} ${NODE_OPTS} main_arith_gen.js -o $$level -r _nonl 2>/dev/null > _; \
a=`${NODE} ${NODE_OPTS} main_arith_gen.js -d -r _ 2>/dev/null | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail round-trip for $$base with level $$level; \
if [ -e ${CBIN}/arith_dynamic ]; \
then \
a=`${CBIN}/arith_dynamic -d -r < _ 2>/dev/null | tr '\000' '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail JS to C round-trip for $$base; \
fi; \
done
test_fqzcomp:
@echo
@echo === Checking fqzcomp
@if [ ! -e ${CBIN}/fqzcomp_qual ]; then echo "Set CBIN if you wish to validate against C version"; fi
@for i in ${CORPUS}/dat/fqzcomp/q*; do \
echo $$i;\
base=`echo $$i | sed 's/\.[0-9]*$$//;s#/q#/../q#'`; \
level=`echo $$i | sed 's/.*\.//'`;\
a=`${NODE} ${NODE_OPTS} main_fqzcomp.js -d -r $$i 2>/dev/null | md5sum`; \
b=`awk '{print $$1}' $$base | md5sum`; \
test "$$a" = "$$b" || echo $<: Mismatch for $$i; \
${NODE} ${NODE_OPTS} main_fqzcomp.js -s $$level -r $$base 2>/dev/null > _; \
a=`${NODE} ${NODE_OPTS} main_fqzcomp -d -r _ 2>/dev/null | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail round-trip for $$base with level $$level; \
if [ -e ${CBIN}/fqzcomp_qual ]; \
then \
a=`${CBIN}/fqzcomp_qual -d -r < _ 2>/dev/null | tr '\000' '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail JS to C round-trip for $$base; \
fi; \
done
test_tok3:
@echo
@echo === Checking tok3
@if [ ! -e ${CBIN}/tokenise_name3 ]; then echo "Set CBIN if you wish to validate against C version"; fi
@for base in ${CORPUS}/names/*.names; do \
echo -n "$$base ";\
${NODE} ${NODE_OPTS} main_tok3.js -a -r $$base 2>/dev/null > _; \
a=`${NODE} ${NODE_OPTS} main_tok3 -d -r _ 2>/dev/null | md5sum`; \
cat _ | wc -c;\
b=`cat $$base | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail round-trip for $$base; \
if [ -e ${CBIN}/tokenise_name3 ]; \
then \
a=`${CBIN}/tokenise_name3 -d -r < _ | tr '\000' '\012' | md5sum`; \
test "$$a" = "$$b" || echo $<: Fail JS to C round-trip for $$base; \
fi; \
done;
@for i in ${CORPUS}/names/tok3/*; do \
echo $$i;\
base=`echo $$i | sed 's/\.[0-9]*$$//;s#/tok3##'`; \
level=`echo $$i | sed 's/.*\.//'`;\
a=`${NODE} ${NODE_OPTS} main_tok3 -d -r $$i 2>/dev/null | md5sum`; \
b=`cat $$base | md5sum`; \
test "$$a" = "$$b" || echo $<: Mismatch for $$i; \
done;