blob: 815329a2599b445dafdb93c21e20d99881ffe9ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#! /bin/sh
#
# Copyright 2018 Gavin D. Howard
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
#
set -e
script="$0"
testdir=$(dirname "$script")
. "$testdir/functions.sh"
if [ "$#" -lt 1 ]; then
printf 'usage: %s dir [exe [args...]]\n' "$0"
printf 'valid dirs are:\n'
printf '\n'
cat "$testdir/all.txt"
printf '\n'
exit 1
fi
d="$1"
shift
if [ "$#" -gt 0 ]; then
exe="$1"
shift
else
exe="$testdir/../bin/$d"
fi
name="$testdir/$d/read.txt"
results="$testdir/$d/read_results.txt"
errors="$testdir/$d/read_errors.txt"
out="$testdir/../.log_${d}_test.txt"
exebase=$(basename "$exe")
if [ "$d" = "bc" ]; then
options="-lq"
halt="halt"
else
options="-x"
halt="q"
fi
if [ "$d" = "bc" ]; then
read_call="read()"
read_expr="${read_call}\n5+5;"
else
read_call="?"
read_expr="${read_call}"
fi
printf 'Running %s read...\n' "$d"
while read line; do
printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$options" "$@" > "$out"
diff "$results" "$out"
done < "$name"
set +e
printf 'Running %s read errors...\n' "$d"
while read line; do
printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$options" "$@" 2> "$out" > /dev/null
err="$?"
checktest "$err" "$line" "$out" "$exebase"
done < "$errors"
printf 'Running %s empty read...\n' "$d"
read_test=$(printf '%s\n' "$read_call")
printf '%s\n' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null
err="$?"
checktest "$err" "$read_test" "$out" "$exebase"
printf 'Running %s read EOF...\n' "$d"
read_test=$(printf '%s' "$read_call")
printf '%s' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null
err="$?"
checktest "$err" "$read_test" "$out" "$exebase"
|