File: run-compare-testsuite.sh

package info (click to toggle)
libfyaml 0.9-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,684 kB
  • sloc: ansic: 51,709; asm: 8,692; sh: 1,185; makefile: 545; python: 24
file content (139 lines) | stat: -rwxr-xr-x 2,949 bytes parent folder | download | duplicates (4)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/bash

declare -a rf

# check tty mode (whether we can colorize)
if [ -t 1 ]; then
	GRN="\e[32m"
	RED="\e[31m"
	GRY="\e[37m"
	YLW="\e[33m"
	CYN="\e[36m"
	NRM="\e[0m"
else
	GRN=""
	RED=""
	GRY=""
	YLW=""
	CYN=""
	NRM=""
fi

rf=()
i=0
for prefix in $*; do
	echo "Collecting tests from $prefix"
	while read full ; do

		# full-path:prefix:path-without-prefix:path-without-prefix-filename
		relative=`echo $full | sed -e "s#^$prefix##g"`
		file=`echo $relative | sed -e "s#/in.yaml##g" | tr '/' '-'`
		rf+=( "$full:$prefix:$relative:$file" )
		# echo ${rf[$i]}
		i=$(($i + 1))
	done < <(find "$prefix" -name "in.yaml" -print | sort)
done

count=${#rf[@]}

mkdir -p output

pass=0
fail=0
unknown=0
experr=0
for (( i=0; i < $count; i++)); do
	v="${rf[$i]}"
	full=`echo $v | cut -d: -f1`
	prefix=`echo $v | cut -d: -f2`
	relative=`echo $v | cut -d: -f3`
	file=`echo $v | cut -d: -f4`
	# echo "$i: full=$full prefix=$prefix relative=$relative file=$file"

	f="output/$file.yaml"
	rm -f "$f" "output/$file.pass" "output/$file.fail" \
		   "output/$file.unknown" "output/$file.desc" \
		   "output/$file.event"
	ln -s `realpath $full` "$f"

	desc=`echo $full | sed -e 's#in.yaml#===#'`
	desctxt=""
	if [ -e "$desc" ]; then
		descf=`realpath $desc`
		ln -s "$descf" "output/$file.desc"
		desctxt=`cat 2>/dev/null "$descf"`
	fi

	event=`echo $full | sed -e 's#in.yaml#test.event#'`
	if [ -e "$event" ]; then
		eventf=`realpath $event`
		ln -s "$eventf" "output/$file.event"
	fi

	errf=`echo $full | sed -e 's#in.yaml#error#'`
	if [ -e "$errf" ] ; then
		expected_error="1"
		exp="!"
	else
		expected_error="0"
		exp="-"
	fi

	this_fail=0
	this_unknown=0

	a0="output/$file.libyaml"
	a1="output/$file.libfyaml"

	pass0=0
	pass1=0
	diff=0

	# execute both libyaml & libfyaml
	./src/libfyaml-parser -mlibyaml-parse "$f" > "$a0" 2>/dev/null
	if [ $? -eq 0 ]; then pass0=1; fi

	./src/libfyaml-parser -mparse "$f" > "$a1" 2>/dev/null
	if [ $? -eq 0 ]; then pass1=1; fi

	# compare output anyway
	diff -u "$a0" "$a1" > "output/$file.diff"
	if [ $? -eq 0 ]; then diff=1; fi

	if [ $expected_error -eq 0 ]; then
		# it fails if any fail
		this_fail=$(($pass0 == 0 || $pass1 == 0 || $diff == 0))
		this_unknown=$(($pass0 == 0))
	else
		# test expected to fail (both must fail)
		this_fail=$(($pass0 == 1 || $pass1 == 1))
		this_unknown=$(($pass0 == 1))
	fi

	if [ $this_unknown -ne 0 ]; then
		touch "output/$file.unknown"
		if [[ $pass1 == $pass0 ]]; then
			COL="${GRY}"
		else
			COL="${CYN}"
		fi
		res="${COL}UNKN${NRM}"
		unknown=$(($unknown + 1))
	elif [ $this_fail -ne 0 ]; then
		touch "output/$file.fail"
		res="${RED}FAIL${NRM}"
		fail=$(($fail + 1))
	else
		touch "output/$file.pass"
		res="${GRN}PASS${NRM}"
		pass=$(($pass + 1))
	fi

	echo -e "${exp}${pass0}${pass1} ${res} $file: $desctxt"
done

echo
echo -e "  TOTAL: ${count}"
echo -e "   PASS: ${GRN}${pass}${NRM}"
echo -e "   FAIL: ${RED}${fail}${NRM}"
echo -e "UNKNOWN: ${GRY}${unknown}${NRM}"