2025-03-15 18:49:29 +01:00
|
|
|
|
#!/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);
|
|
|
|
|
|
2025-03-20 16:16:41 +01:00
|
|
|
|
gcc -I../morphisms/runtime/include target/src/${TEST_NAME}.c -o target/${TEST_NAME} \
|
2025-03-15 18:49:29 +01:00
|
|
|
|
|| (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
|
2025-03-20 16:28:16 +01:00
|
|
|
|
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>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT="255"
|
|
|
|
|
EXPECT="ff"
|
|
|
|
|
run_test_case
|
|
|
|
|
|
|
|
|
|
TEST_NAME=test-msb-cont
|
2025-03-20 16:28:16 +01:00
|
|
|
|
SRC_TYPE="<Seq~<ValueTerminated 0> native.UInt8>"
|
|
|
|
|
DST_TYPE="<Seq~MsbCont native.UInt8>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT=$(printf '\x01\x02\x03')
|
|
|
|
|
EXPECT=$(printf '\x81\x82\x03')
|
|
|
|
|
run_test_case
|
|
|
|
|
|
|
|
|
|
TEST_NAME=test-value-sep1
|
2025-03-20 16:28:16 +01:00
|
|
|
|
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>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT="abc:def:hello world:test"
|
|
|
|
|
EXPECT="abc,def,hello world,test"
|
|
|
|
|
run_test_case
|
|
|
|
|
|
|
|
|
|
TEST_NAME=test-value-sep2
|
2025-03-20 16:28:16 +01:00
|
|
|
|
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>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT="abc:def:hello world:test"
|
|
|
|
|
EXPECT=$(echo -en "abc\ndef\nhello world\ntest")
|
|
|
|
|
run_test_case
|
|
|
|
|
|
|
|
|
|
TEST_NAME=test-value-sep-digit
|
2025-03-20 16:28:16 +01:00
|
|
|
|
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>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT="c0:ff:ee"
|
|
|
|
|
EXPECT=$(echo -en "c0.ff.ee")
|
|
|
|
|
run_test_case
|
|
|
|
|
|
|
|
|
|
TEST_NAME=test-utf8-to-ascii
|
2025-03-20 16:28:16 +01:00
|
|
|
|
SRC_TYPE="<Seq Char~Unicode> ~ UTF-8 ~ <Seq ~ <ValueTerminated 0> native.UInt8>"
|
|
|
|
|
DST_TYPE="<Seq~<ValueTerminated 0> Char ~ Ascii ~ native.UInt8>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT="Hℵelαlo WΓΓΓorl⇒d"
|
|
|
|
|
EXPECT="Hello World"
|
|
|
|
|
run_test_case
|
|
|
|
|
|
|
|
|
|
TEST_NAME=test-value-sep-posint
|
2025-03-20 16:28:16 +01:00
|
|
|
|
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>"
|
2025-03-15 18:49:29 +01:00
|
|
|
|
INPUT="c0:ff:ee"
|
|
|
|
|
EXPECT=$(echo -en "c0.ff.ee")
|
|
|
|
|
run_test_case
|