Home | History | Annotate | Line # | Download | only in unit-tests
      1  1.9  rillig # $NetBSD: cond-op-parentheses.mk,v 1.9 2025/06/28 22:39:28 rillig Exp $
      2  1.1  rillig #
      3  1.5  rillig # Tests for parentheses in .if conditions, which group expressions to override
      4  1.5  rillig # the precedence of the operators '!', '&&' and '||'.  Parentheses cannot be
      5  1.5  rillig # used to form arithmetic expressions such as '(3+4)' though.
      6  1.1  rillig 
      7  1.5  rillig # Contrary to the C family of programming languages, the outermost condition
      8  1.5  rillig # does not have to be enclosed in parentheses.
      9  1.5  rillig .if defined(VAR)
     10  1.5  rillig .  error
     11  1.5  rillig .elif !1
     12  1.5  rillig .  error
     13  1.5  rillig .endif
     14  1.5  rillig 
     15  1.5  rillig # Parentheses cannot enclose numbers as there is no need for it.  Make does
     16  1.5  rillig # not implement any arithmetic functions in its condition parser.  If
     17  1.5  rillig # absolutely necessary, use expr(1).
     18  1.6  rillig #
     19  1.6  rillig # XXX: It's inconsistent that the right operand has unbalanced parentheses.
     20  1.6  rillig #
     21  1.9  rillig # expect+1: Comparison with ">" requires both operands "3" and "(2" to be numeric
     22  1.5  rillig .if 3 > (2)
     23  1.5  rillig .endif
     24  1.9  rillig # expect+1: Malformed conditional "(3) > 2"
     25  1.5  rillig .if (3) > 2
     26  1.5  rillig .endif
     27  1.1  rillig 
     28  1.3  rillig # Test for deeply nested conditions.
     29  1.3  rillig .if	((((((((((((((((((((((((((((((((((((((((((((((((((((((((	\
     30  1.3  rillig 	((((((((((((((((((((((((((((((((((((((((((((((((((((((((	\
     31  1.3  rillig 	1								\
     32  1.3  rillig 	))))))))))))))))))))))))))))))))))))))))))))))))))))))))	\
     33  1.3  rillig 	))))))))))))))))))))))))))))))))))))))))))))))))))))))))
     34  1.5  rillig # Parentheses can be nested at least to depth 112.  There is nothing special
     35  1.5  rillig # about this number though, much higher numbers work as well, at least on
     36  1.5  rillig # NetBSD.  The actual limit depends on the allowed call stack depth for C code
     37  1.5  rillig # of the platform.  Anyway, 112 should be enough for all practical purposes.
     38  1.3  rillig .else
     39  1.3  rillig .  error
     40  1.3  rillig .endif
     41  1.3  rillig 
     42  1.4  rillig # An unbalanced opening parenthesis is a parse error.
     43  1.9  rillig # expect+1: Malformed conditional "("
     44  1.4  rillig .if (
     45  1.4  rillig .  error
     46  1.4  rillig .else
     47  1.4  rillig .  error
     48  1.4  rillig .endif
     49  1.4  rillig 
     50  1.4  rillig # An unbalanced closing parenthesis is a parse error.
     51  1.4  rillig #
     52  1.5  rillig # Before cond.c 1.237 from 2021-01-19, CondParser_Term returned TOK_RPAREN
     53  1.5  rillig # even though the documentation of that function promised to only ever return
     54  1.5  rillig # TOK_TRUE, TOK_FALSE or TOK_ERROR.  In cond.c 1.241, the return type of that
     55  1.5  rillig # function was changed to a properly restricted enum type, to prevent this bug
     56  1.5  rillig # from occurring again.
     57  1.9  rillig # expect+1: Malformed conditional ")"
     58  1.4  rillig .if )
     59  1.4  rillig .  error
     60  1.4  rillig .else
     61  1.4  rillig .  error
     62  1.4  rillig .endif
     63  1.4  rillig 
     64  1.1  rillig all:
     65  1.1  rillig 	@:;
     66