mirror of https://github.com/zachjs/sv2v.git
86 lines
2.5 KiB
Bash
Executable File
86 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
testNumber() {
|
|
mode=$1
|
|
number=$2
|
|
|
|
ve=$SHUNIT_TMPDIR/ve.v
|
|
cs=$SHUNIT_TMPDIR/cs.v
|
|
|
|
ve_log=$ve.log
|
|
cs_log=$cs.log
|
|
|
|
# substitute the current number literal into a copy of the test template
|
|
sed -e "s/NUM/$number/" < template.v > $ve
|
|
|
|
# convert in strict mode
|
|
runAndCapture $ve
|
|
assertTrue "conversion should succeed" $result
|
|
assertNotNull "stdout should not be empty" "$stdout"
|
|
if [ $mode = no_trunc ]; then
|
|
assertNull "stderr should be empty:\n$stderr" "$stderr"
|
|
else
|
|
assertNotNull "stderr should not be empty" "$stderr"
|
|
fi
|
|
|
|
# convert result in strict mode
|
|
mv -f $SHUNIT_TMPDIR/stdout $cs
|
|
runAndCapture $cs
|
|
assertTrue "conversion should succeed" $result
|
|
assertNotNull "stdout should not be empty" "$stdout"
|
|
assertNull "stderr should be empty:\n$stderr" "$stderr"
|
|
|
|
# simulate and compare in strict mode
|
|
EXPECT_IVERILOG_WARNINGS=`[ $mode = trunc_ivl_warns ]; echo $?` \
|
|
simulate /dev/null $ve_log $ve
|
|
simulate /dev/null $cs_log $cs
|
|
output=`diff $ve_log $cs_log`
|
|
assertTrue "number literals differ:\n$output" $?
|
|
|
|
# convert in lax mode
|
|
runAndCapture --oversized-numbers $ve
|
|
assertTrue "conversion should succeed" $result
|
|
assertNotNull "stdout should not be empty" "$stdout"
|
|
if [ $mode = no_trunc ] || [[ ! "$number" =~ .\' ]]; then
|
|
assertNull "stderr should be empty:\n$stderr" "$stderr"
|
|
else
|
|
assertNotNull "stderr should not be empty" "$stderr"
|
|
fi
|
|
|
|
# convert result in lax mode
|
|
mv -f $SHUNIT_TMPDIR/stdout $cs
|
|
runAndCapture --oversized-numbers $cs
|
|
assertTrue "conversion should succeed" $result
|
|
assertNotNull "stdout should not be empty" "$stdout"
|
|
assertNull "stderr should be empty:\n$stderr" "$stderr"
|
|
|
|
# simulate and compare in lax mode
|
|
EXPECT_IVERILOG_WARNINGS=`[[ "$number" =~ .\' ]] && [ $mode = trunc_ivl_warns ]; echo $?` \
|
|
simulate /dev/null $ve_log -gno-strict-expr-width $ve
|
|
simulate /dev/null $cs_log -gno-strict-expr-width $cs
|
|
output=`diff $ve_log $cs_log`
|
|
assertTrue "number literals differ:\n$output" $?
|
|
}
|
|
|
|
addTest() {
|
|
mode=$1
|
|
number=$2
|
|
test="${mode}_${number//\'/_}"
|
|
eval "$test() { testNumber $mode \"$number\"; }"
|
|
suite_addTest $test
|
|
}
|
|
|
|
suite() {
|
|
modes=(no_trunc trunc_ivl_warns trunc_ivl_silent)
|
|
for mode in ${modes[@]}; do
|
|
while read number; do
|
|
[ -n "$number" ] && \
|
|
addTest $mode "$number"
|
|
done < $mode.txt
|
|
done
|
|
}
|
|
|
|
source ../lib/functions.sh
|
|
|
|
. shunit2
|