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

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

 



The current tags check-output-contains/excludes/pattern are
quite powerful and the new check-output-match is easy to use
but it can be even simpler. Indeed, a lot of IR simplifications/
canonicalizations can be tested by checking that the expression
to be tested is equivalent to another one. This is less precise
than some more specific tests but:
* it's a big advantage because it's less sensitive to 'noise'
  like the exact number used by the pseudos or to the results
  of some new simplifications or canonicalizations
* very often, this equivalence is what really matters and not
  the exact transformation.

So, add a new utra-simple-to-use tag: just ask that all functions
of the tests return the same specified value (usually 1):
	check-output-returns: <value>

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

diff --git a/Documentation/test-suite.rst b/Documentation/test-suite.rst
index 4ff2db2f8777..3181e109a104 100644
--- a/Documentation/test-suite.rst
+++ b/Documentation/test-suite.rst
@@ -96,6 +96,11 @@ Tag's syntax
 	is ignored in the first pattern but is expected to be followed
 	by a space character.
 
+``check-output-returns:`` *value*
+
+	Check that in the output (stdout) all IR return instructions
+	have the given value.
+
 Using test-suite
 ================
 
diff --git a/validation/test-suite b/validation/test-suite
index 1f229439d699..2307e4e80d75 100755
--- a/validation/test-suite
+++ b/validation/test-suite
@@ -78,6 +78,7 @@ get_tag_value()
 	check_output_excludes=0
 	check_output_pattern=0
 	check_output_match=0
+	check_output_returns=0
 	check_arch_ignore=""
 	check_arch_only=""
 	check_assert=""
@@ -102,6 +103,7 @@ get_tag_value()
 		check-output-excludes:)	check_output_excludes=1 ;;
 		check-output-pattern)	check_output_pattern=1 ;;
 		check-output-match)	check_output_match=1 ;;
+		check-output-returns:)	check_output_returns=1 ;;
 		check-arch-ignore:)	arch=$(uname -m)
 					check_arch_ignore="$val" ;;
 		check-arch-only:)	arch=$(uname -m)
@@ -226,6 +228,24 @@ match_patterns()
 	return $?
 }
 
+##
+return_patterns()
+{
+	ifile="$1"
+	patt="$2"
+	ofile="$3"
+	grep "$patt:" "$ifile" | sed -e "s/^.*$patt: *\(.*\)$/\1/" | \
+	while read ret; do
+		grep -s "^	ret\\.[0-9]" "$ofile" | grep -v -s -q "[ \$]${ret}\$"
+		if [ "$?" -ne 1 ]; then
+			error "	Return doesn't match '$ret'"
+			return 1
+		fi
+	done
+
+	return $?
+}
+
 ##
 # arg_file(filename) - checks if filename exists
 arg_file()
@@ -424,6 +444,13 @@ do_test()
 			test_failed=1
 		fi
 	fi
+	if [ $check_output_returns -eq 1 ]; then
+		# verify the 'check-output-return: $value' tags
+		return_patterns "$file" 'check-output-returns' $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