Home | History | Annotate | Line # | Download | only in unit-tests
cond-op-or.mk revision 1.10
      1  1.10  rillig # $NetBSD: cond-op-or.mk,v 1.10 2023/08/15 21:27:09 rillig Exp $
      2   1.1  rillig #
      3   1.2  rillig # Tests for the || operator in .if conditions.
      4   1.1  rillig 
      5   1.3  rillig .if 0 || 0
      6   1.6  rillig .  error
      7   1.3  rillig .endif
      8   1.3  rillig 
      9   1.3  rillig .if !(1 || 0)
     10   1.6  rillig .  error
     11   1.3  rillig .endif
     12   1.3  rillig 
     13   1.3  rillig .if !(0 || 1)
     14   1.6  rillig .  error
     15   1.3  rillig .endif
     16   1.3  rillig 
     17   1.3  rillig .if !(1 || 1)
     18   1.6  rillig .  error
     19   1.3  rillig .endif
     20   1.3  rillig 
     21   1.7  rillig 
     22   1.3  rillig # The right-hand side is not evaluated since the left-hand side is already
     23   1.3  rillig # true.
     24   1.3  rillig .if 1 || ${UNDEF}
     25   1.3  rillig .endif
     26   1.1  rillig 
     27   1.8  rillig # When an outer condition makes the inner '||' condition irrelevant, neither
     28   1.8  rillig # of its operands must be evaluated.  This had been wrong in cond.c 1.283 from
     29   1.7  rillig # 2021-12-09 and was reverted in cond.c 1.284 an hour later.
     30   1.7  rillig .if 0 && (!defined(UNDEF) || ${UNDEF})
     31   1.7  rillig .endif
     32   1.7  rillig 
     33   1.8  rillig # Test combinations of outer '&&' with inner '||', to ensure that the operands
     34   1.8  rillig # of the inner '||' is only evaluated if necessary.
     35   1.8  rillig DEF=	defined
     36   1.8  rillig .if 0 && (${DEF} || ${UNDEF})
     37   1.8  rillig .endif
     38   1.8  rillig .if 0 && (!${DEF} || ${UNDEF})
     39   1.8  rillig .endif
     40   1.8  rillig .if 0 && (${UNDEF} || ${UNDEF})
     41   1.8  rillig .endif
     42   1.8  rillig .if 0 && (!${UNDEF} || ${UNDEF})
     43   1.8  rillig .endif
     44   1.8  rillig .if 1 && (${DEF} || ${UNDEF})
     45   1.8  rillig .endif
     46   1.9  rillig # expect+1: Malformed conditional (1 && (!${DEF} || ${UNDEF})
     47   1.8  rillig .if 1 && (!${DEF} || ${UNDEF})
     48   1.8  rillig .endif
     49   1.9  rillig # expect+1: Malformed conditional (1 && (${UNDEF} || ${UNDEF})
     50   1.8  rillig .if 1 && (${UNDEF} || ${UNDEF})
     51   1.8  rillig .endif
     52   1.9  rillig # expect+1: Malformed conditional (1 && (!${UNDEF} || ${UNDEF})
     53   1.8  rillig .if 1 && (!${UNDEF} || ${UNDEF})
     54   1.8  rillig .endif
     55   1.8  rillig 
     56   1.7  rillig 
     57   1.5  rillig # The || operator may be abbreviated as |.  This is not widely known though
     58   1.4  rillig # and is also not documented in the manual page.
     59   1.4  rillig 
     60   1.4  rillig .if 0 | 0
     61   1.4  rillig .  error
     62   1.4  rillig .endif
     63   1.4  rillig .if !(1 | 0)
     64   1.4  rillig .  error
     65   1.4  rillig .endif
     66   1.4  rillig .if !(0 | 1)
     67   1.4  rillig .  error
     68   1.4  rillig .endif
     69   1.4  rillig .if !(1 | 1)
     70   1.4  rillig .  error
     71   1.4  rillig .endif
     72   1.4  rillig 
     73   1.4  rillig # There is no operator |||.
     74   1.9  rillig # expect+1: Malformed conditional (0 ||| 0)
     75   1.4  rillig .if 0 ||| 0
     76   1.4  rillig .  error
     77   1.4  rillig .endif
     78   1.4  rillig 
     79  1.10  rillig # The '||' operator must be preceded by whitespace, otherwise it becomes part
     80  1.10  rillig # of the preceding bare word.  The condition is parsed as '"1||" != "" || 0'.
     81  1.10  rillig .if 1|| || 0
     82  1.10  rillig .else
     83  1.10  rillig .  error
     84  1.10  rillig .endif
     85