xref: /freebsd/contrib/bmake/unit-tests/cond-op-and.mk (revision 6a7405f5a6b639682cacf01e35d561411ff556aa)
1*6a7405f5SSimon J. Gerraty# $NetBSD: cond-op-and.mk,v 1.12 2025/01/11 21:21:33 rillig Exp $
22c3632d1SSimon J. Gerraty#
32c3632d1SSimon J. Gerraty# Tests for the && operator in .if conditions.
42c3632d1SSimon J. Gerraty
52c3632d1SSimon J. Gerraty.if 0 && 0
62c3632d1SSimon J. Gerraty.  error
72c3632d1SSimon J. Gerraty.endif
82c3632d1SSimon J. Gerraty
92c3632d1SSimon J. Gerraty.if 1 && 0
102c3632d1SSimon J. Gerraty.  error
112c3632d1SSimon J. Gerraty.endif
122c3632d1SSimon J. Gerraty
132c3632d1SSimon J. Gerraty.if 0 && 1
142c3632d1SSimon J. Gerraty.  error
152c3632d1SSimon J. Gerraty.endif
162c3632d1SSimon J. Gerraty
172c3632d1SSimon J. Gerraty.if !(1 && 1)
182c3632d1SSimon J. Gerraty.  error
192c3632d1SSimon J. Gerraty.endif
202c3632d1SSimon J. Gerraty
2112904384SSimon J. Gerraty
222c3632d1SSimon J. Gerraty# The right-hand side is not evaluated since the left-hand side is already
232c3632d1SSimon J. Gerraty# false.
242c3632d1SSimon J. Gerraty.if 0 && ${UNDEF}
252c3632d1SSimon J. Gerraty.endif
262c3632d1SSimon J. Gerraty
2712904384SSimon J. Gerraty# When an outer condition makes the inner '&&' condition irrelevant, neither
2822619282SSimon J. Gerraty# of its operands is evaluated.
2912904384SSimon J. Gerraty.if 1 || (${UNDEF} && ${UNDEF})
3012904384SSimon J. Gerraty.endif
3112904384SSimon J. Gerraty
3212904384SSimon J. Gerraty# Test combinations of outer '||' with inner '&&', to ensure that the operands
3312904384SSimon J. Gerraty# of the inner '&&' are only evaluated if necessary.
3412904384SSimon J. GerratyDEF=	defined
35*6a7405f5SSimon J. Gerraty# expect+1: Variable "UNDEF" is undefined
3612904384SSimon J. Gerraty.if 0 || (${DEF} && ${UNDEF})
3712904384SSimon J. Gerraty.endif
3812904384SSimon J. Gerraty.if 0 || (!${DEF} && ${UNDEF})
3912904384SSimon J. Gerraty.endif
40*6a7405f5SSimon J. Gerraty# expect+1: Variable "UNDEF" is undefined
4112904384SSimon J. Gerraty.if 0 || (${UNDEF} && ${UNDEF})
4212904384SSimon J. Gerraty.endif
43*6a7405f5SSimon J. Gerraty# expect+1: Variable "UNDEF" is undefined
4412904384SSimon J. Gerraty.if 0 || (!${UNDEF} && ${UNDEF})
4512904384SSimon J. Gerraty.endif
4612904384SSimon J. Gerraty.if 1 || (${DEF} && ${UNDEF})
4712904384SSimon J. Gerraty.endif
4812904384SSimon J. Gerraty.if 1 || (!${DEF} && ${UNDEF})
4912904384SSimon J. Gerraty.endif
5012904384SSimon J. Gerraty.if 1 || (${UNDEF} && ${UNDEF})
5112904384SSimon J. Gerraty.endif
5212904384SSimon J. Gerraty.if 1 || (!${UNDEF} && ${UNDEF})
5312904384SSimon J. Gerraty.endif
5412904384SSimon J. Gerraty
5512904384SSimon J. Gerraty
56956e45f6SSimon J. Gerraty# The && operator may be abbreviated as &.  This is not widely known though
57956e45f6SSimon J. Gerraty# and is also not documented in the manual page.
58956e45f6SSimon J. Gerraty
5922619282SSimon J. Gerraty# expect+1: Unknown operator '&'
60956e45f6SSimon J. Gerraty.if 0 & 0
61956e45f6SSimon J. Gerraty.  error
6222619282SSimon J. Gerraty.else
6322619282SSimon J. Gerraty.  error
64956e45f6SSimon J. Gerraty.endif
6522619282SSimon J. Gerraty# expect+1: Unknown operator '&'
66956e45f6SSimon J. Gerraty.if 1 & 0
67956e45f6SSimon J. Gerraty.  error
6822619282SSimon J. Gerraty.else
69956e45f6SSimon J. Gerraty.  error
70956e45f6SSimon J. Gerraty.endif
7122619282SSimon J. Gerraty# expect+1: Unknown operator '&'
7222619282SSimon J. Gerraty.if 0 & 1
7322619282SSimon J. Gerraty.  error
7422619282SSimon J. Gerraty.else
7522619282SSimon J. Gerraty.  error
7622619282SSimon J. Gerraty.endif
7722619282SSimon J. Gerraty# expect+1: Unknown operator '&'
78956e45f6SSimon J. Gerraty.if !(1 & 1)
79956e45f6SSimon J. Gerraty.  error
8022619282SSimon J. Gerraty.else
8122619282SSimon J. Gerraty.  error
82956e45f6SSimon J. Gerraty.endif
83956e45f6SSimon J. Gerraty
8422619282SSimon J. Gerraty# There is no operator '&&&'.  The first two '&&' form an operator, the third
8522619282SSimon J. Gerraty# '&' forms the next (incomplete) token.
8622619282SSimon J. Gerraty# expect+1: Unknown operator '&'
87956e45f6SSimon J. Gerraty.if 0 &&& 0
88956e45f6SSimon J. Gerraty.  error
8922619282SSimon J. Gerraty.else
9022619282SSimon J. Gerraty.  error
91956e45f6SSimon J. Gerraty.endif
92956e45f6SSimon J. Gerraty
9398875883SSimon J. Gerraty# The '&&' operator must be preceded by whitespace, otherwise it becomes part
9422619282SSimon J. Gerraty# of the preceding bare word.  The condition starts with a digit and is thus
9522619282SSimon J. Gerraty# parsed as '"1&&" != "" && 1'.
9698875883SSimon J. Gerraty.if 1&& && 1
9798875883SSimon J. Gerraty.else
9898875883SSimon J. Gerraty.  error
9998875883SSimon J. Gerraty.endif
100