61 lines
1.4 KiB
Bash
61 lines
1.4 KiB
Bash
#!/bin/sh
|
|
|
|
execute_binary() {
|
|
binary="$1"
|
|
input="$2"
|
|
output="$3"
|
|
is_debug="$4"
|
|
|
|
start=$(date '+%s.%N')
|
|
if [ -n "$is_debug" ]; then
|
|
asan="$(ldconfig -p | grep libasan.so | head -n1 | awk '{print $4}')"
|
|
LD_PRELOAD="$asan" timeout 2s ./"$binary" <"$input" >"$output" 2>&1
|
|
else
|
|
timeout 2s ./"$binary" <"$input" >"$output" 2>&1
|
|
fi
|
|
CODE=$?
|
|
end=$(date '+%s.%N')
|
|
truncate -s "$(head -n 1000 "$output" | wc -c)" "$output"
|
|
|
|
if [ $CODE -ge 124 ]; then
|
|
MSG=''
|
|
case $CODE in
|
|
124) MSG='TIMEOUT' ;;
|
|
128) MSG='SIGILL' ;;
|
|
130) MSG='SIGABRT' ;;
|
|
131) MSG='SIGBUS' ;;
|
|
136) MSG='SIGFPE' ;;
|
|
135) MSG='SIGSEGV' ;;
|
|
137) MSG='SIGPIPE' ;;
|
|
139) MSG='SIGTERM' ;;
|
|
esac
|
|
[ $CODE -ne 124 ] && sed -i '$d' "$output"
|
|
test -n "$MSG" && printf '\n[code]: %s (%s)' "$CODE" "$MSG" >>"$output"
|
|
else
|
|
printf '\n[code]: %s' "$CODE" >>"$output"
|
|
fi
|
|
|
|
printf '\n[time]: %s ms' "$(awk "BEGIN {print ($end - $start) * 1000}")" >>$output
|
|
test -n "$is_debug" && is_debug_string=true || is_debug_string=false
|
|
printf '\n[debug]: %s' "$is_debug_string" >>$output
|
|
return $CODE
|
|
}
|
|
|
|
compile_source() {
|
|
src="$1"
|
|
bin="$2"
|
|
output="$3"
|
|
flags="$4"
|
|
|
|
test -f "$bin" && rm "$bin" || true
|
|
g++ @compile_flags.txt $flags "$src" -o "$bin" 2>"$output"
|
|
CODE=$?
|
|
|
|
if [ $CODE -gt 0 ]; then
|
|
printf '\n[code]: %s' "$CODE" >>"$output"
|
|
return $CODE
|
|
else
|
|
echo '' >"$output"
|
|
return 0
|
|
fi
|
|
}
|