[PATCH 1/2] testsuite: add a new tag: check-output-match

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The current tags check-output-contains/excludes/pattern are
quite powerful, universal, but they often need 'complex' regular
expressions with escaping which make them not so nice to read.

For testing IR results, a very common pattern is:
	this instruction must have this (kind of) operand.

So, make a new tag for this. It does nothing than can't be done
with done with the previous ones, on  the contrary, but is much
simpler to use:
	check-output-match(instruction): operand

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
---
 Documentation/test-suite.rst |  8 ++++++++
 validation/test-suite        | 29 +++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/Documentation/test-suite.rst b/Documentation/test-suite.rst
index 333106ee138a..4ff2db2f8777 100644
--- a/Documentation/test-suite.rst
+++ b/Documentation/test-suite.rst
@@ -88,6 +88,14 @@ Tag's syntax
 	of the number of times the pattern should occur in the output.
 	If *min* or *max* is ``-`` the corresponding check is ignored.
 
+``check-output-match(``\ *start*\ ``):`` *pattern*
+
+	Check that in the output (stdout) all lines starting with the
+	first pattern also contains the second pattern. This should be
+	reserved for matching IR instructions since the '.$size' suffix
+	is ignored in the first pattern but is expected to be followed
+	by a space character.
+
 Using test-suite
 ================
 
diff --git a/validation/test-suite b/validation/test-suite
index f7d992dc7c8c..1f229439d699 100755
--- a/validation/test-suite
+++ b/validation/test-suite
@@ -77,6 +77,7 @@ get_tag_value()
 	check_output_contains=0
 	check_output_excludes=0
 	check_output_pattern=0
+	check_output_match=0
 	check_arch_ignore=""
 	check_arch_only=""
 	check_assert=""
@@ -100,6 +101,7 @@ get_tag_value()
 		check-output-contains:)	check_output_contains=1 ;;
 		check-output-excludes:)	check_output_excludes=1 ;;
 		check-output-pattern)	check_output_pattern=1 ;;
+		check-output-match)	check_output_match=1 ;;
 		check-arch-ignore:)	arch=$(uname -m)
 					check_arch_ignore="$val" ;;
 		check-arch-only:)	arch=$(uname -m)
@@ -204,6 +206,26 @@ minmax_patterns()
 	return $?
 }
 
+##
+match_patterns()
+{
+	ifile="$1"
+	patt="$2"
+	ofile="$3"
+	grep "$patt" "$ifile" | sed -e "s/^.*$patt(\(.*\)): *\(.*\)$/\1 \2/" | \
+	while read ins pat; do
+		echo "ins: $ins"
+		echo "pat: $pat"
+		grep -s "^	$ins\\.*[0-9]* " "$ofile" | grep -v -s -q "$pat"
+		if [ "$?" -ne 1 ]; then
+			error "	IR doesn't match '$pat'"
+			return 1
+		fi
+	done
+
+	return $?
+}
+
 ##
 # arg_file(filename) - checks if filename exists
 arg_file()
@@ -395,6 +417,13 @@ do_test()
 			test_failed=1
 		fi
 	fi
+	if [ $check_output_match -eq 1 ]; then
+		# verify the 'check-output-match($insn): $patt' tags
+		match_patterns "$file" 'check-output-match' $file.output.got
+		if [ "$?" -ne "0" ]; then
+			test_failed=1
+		fi
+	fi
 
 	if [ "$must_fail" -eq "1" ]; then
 		if [ "$test_failed" -eq "1" ]; then
-- 
2.29.2




[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux