#!/bin/sh run_test_case() { mkdir -p target/src mkdir -p .tmp echo " ----------------------------------------------------------------------------- Running test case ${TEST_NAME}" ldmc "${SRC_TYPE}" "${DST_TYPE}" ../morphisms/*.morphism-base 2>|.tmp/ldmc_err 1>| target/src/${TEST_NAME}.c \ || (echo "... error at generation:"; cat .tmp/ldmc_err; return -1); gcc -I../morphisms/runtime/include target/src/${TEST_NAME}.c -o target/${TEST_NAME} \ || (echo "... error at compilation:"; return -2); LEN="$(echo -n "${EXPECT}" | wc -c)" RESULT="$(echo -n ${INPUT} | ./target/${TEST_NAME} 2>.tmp/target_err | head -c ${LEN})" if [ "${RESULT}" == "${EXPECT}" ]; then echo "... ok" else echo -e "... incorrect result\n" cat .tmp/target_err echo -e "" echo -e "INPUT:\n$(echo -n "${INPUT}" | hexyl)" echo -e "EXPECTED:\n$(echo -n "${EXPECT}" | hexyl)" echo -e "GOT:\n$(echo -n "${RESULT}" | hexyl)" fi rm -rf .tmp } TEST_NAME=test-radix-convert SRC_TYPE="ℕ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10> ~ Char ~ Ascii ~ native.UInt8>" DST_TYPE="ℕ ~ <PosInt 16 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 16> ~ Char ~ Ascii ~ native.UInt8>" INPUT="255" EXPECT="ff" run_test_case TEST_NAME=test-msb-cont SRC_TYPE="<Seq~<ValueTerminated 0> native.UInt8>" DST_TYPE="<Seq~MsbCont native.UInt8>" INPUT=$(printf '\x01\x02\x03') EXPECT=$(printf '\x81\x82\x03') run_test_case TEST_NAME=test-value-sep1 SRC_TYPE="<Seq <Seq Char~native.UInt8>> ~ <ValueSep ':' Char~native.UInt8> ~ <Seq~<ValueTerminated 0> Char~native.UInt8>" DST_TYPE="<Seq <Seq Char~native.UInt8>> ~ <ValueSep ',' Char~native.UInt8> ~ <Seq~<ValueTerminated 0> Char~native.UInt8>" INPUT="abc:def:hello world:test" EXPECT="abc,def,hello world,test" run_test_case TEST_NAME=test-value-sep2 SRC_TYPE="<Seq <Seq native.UInt8>> ~ <ValueSep ':' native.UInt8> ~ <Seq~<ValueTerminated 0> native.UInt8>" DST_TYPE="<Seq <Seq native.UInt8>> ~ <ValueSep '\\n' native.UInt8> ~ <Seq~<ValueTerminated 0> native.UInt8>" INPUT="abc:def:hello world:test" EXPECT=$(echo -en "abc\ndef\nhello world\ntest") run_test_case TEST_NAME=test-value-sep-digit SRC_TYPE="<Seq <Seq <Digit 16>~Char~Ascii~native.UInt8>> ~ <ValueSep ':' Char~Ascii~native.UInt8> ~ <Seq~<ValueTerminated '\0'> Char~Ascii~native.UInt8>" DST_TYPE="<Seq <Seq <Digit 16>~Char~Ascii~native.UInt8>> ~ <ValueSep '.' Char~Ascii~native.UInt8> ~ <Seq~<ValueTerminated '\0'> Char~Ascii~native.UInt8>" INPUT="c0:ff:ee" EXPECT=$(echo -en "c0.ff.ee") run_test_case TEST_NAME=test-utf8-to-ascii SRC_TYPE="<Seq Char~Unicode> ~ UTF-8 ~ <Seq ~ <ValueTerminated 0> native.UInt8>" DST_TYPE="<Seq~<ValueTerminated 0> Char ~ Ascii ~ native.UInt8>" INPUT="Hℵelαlo WΓΓΓorl⇒d" EXPECT="Hello World" run_test_case TEST_NAME=test-value-sep-posint SRC_TYPE="<Seq ℕ~<PosInt 16 BigEndian>~<Seq <Digit 16>~Char~Ascii~native.UInt8>> ~ <ValueSep ':' Char~Ascii~native.UInt8> ~ <Seq~<ValueTerminated '\0'> Char~Ascii~native.UInt8>" DST_TYPE="<Seq ℕ~<PosInt 16 BigEndian>~<Seq <Digit 16>~Char~Ascii~native.UInt8>> ~ <ValueSep '.' Char~Ascii~native.UInt8> ~ <Seq~<ValueTerminated '\0'> Char~Ascii~native.UInt8>" INPUT="c0:ff:ee" EXPECT=$(echo -en "c0.ff.ee") run_test_case