Source-Changes-HG archive

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

[src/trunk]: src/usr.bin/make/unit-tests tests/make: demonstrate inconsistenc...



details:   https://anonhg.NetBSD.org/src/rev/16621a4f2a2e
branches:  trunk
changeset: 376579:16621a4f2a2e
user:      rillig <rillig%NetBSD.org@localhost>
date:      Thu Jun 22 20:36:24 2023 +0000

description:
tests/make: demonstrate inconsistency in pattern matching with ranges

diffstat:

 usr.bin/make/unit-tests/varmod-match-escape.mk |  33 +++++++++++++++++++++++--
 1 files changed, 30 insertions(+), 3 deletions(-)

diffs (51 lines):

diff -r 08ee9300864b -r 16621a4f2a2e usr.bin/make/unit-tests/varmod-match-escape.mk
--- a/usr.bin/make/unit-tests/varmod-match-escape.mk    Thu Jun 22 16:59:17 2023 +0000
+++ b/usr.bin/make/unit-tests/varmod-match-escape.mk    Thu Jun 22 20:36:24 2023 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-match-escape.mk,v 1.8 2023/06/01 20:56:35 rillig Exp $
+# $NetBSD: varmod-match-escape.mk,v 1.9 2023/06/22 20:36:24 rillig Exp $
 #
 # As of 2020-08-01, the :M and :N modifiers interpret backslashes differently,
 # depending on whether there was a variable expression somewhere before the
@@ -77,12 +77,39 @@ VALUES=             : :: :\:
 #
 # TODO: Str_Match("a-z]", "[a-z]")
 # TODO: Str_Match("012", "[0-]]")
-# TODO: Str_Match("0]", "[0-]]")
-# TODO: Str_Match("1]", "[0-]]")
 # TODO: Str_Match("[", "[[]")
 # TODO: Str_Match("]", "[]")
 # TODO: Str_Match("]", "[[-]]")
 
+# Demonstrate an inconsistency between positive and negative character lists
+# when the range ends with the character ']'.
+#
+# 'A' begins the range, 'B' is in the middle of the range, ']' ends the range,
+# 'a' is outside the range.
+WORDS=         A A] A]] B B] B]] ] ]] ]]] a a] a]]
+# The ']' is part of the character range and at the same time ends the
+# character list.
+EXP.[A-]=      A B ]
+# The first ']' is part of the character range and at the same time ends the
+# character list.
+EXP.[A-]]=     A] B] ]]
+# The first ']' is part of the character range and at the same time ends the
+# character list.
+EXP.[A-]]]=    A]] B]] ]]]
+# For negative character lists, the ']' ends the character range but does not
+# end the character list.
+# XXX: This is unnecessarily inconsistent but irrelevant in practice as there
+# is no practical need for a character range that ends at ']'.
+EXP.[^A-]=     a
+EXP.[^A-]]=    a
+EXP.[^A-]]]=   a]
+
+.for pattern in [A-] [A-]] [A-]]] [^A-] [^A-]] [^A-]]]
+.  if ${WORDS:M${pattern}} != ${EXP.${pattern}}
+.    warning ${pattern}: ${WORDS:M${pattern}} != ${EXP.${pattern}}
+.  endif
+.endfor
+
 # In brackets, the backslash is just an ordinary character.
 # Outside brackets, it is an escape character for a few special characters.
 # TODO: Str_Match("\\", "[\\-]]")



Home | Main Index | Thread Index | Old Index