Home | History | Annotate | Line # | Download | only in unit-tests
varmod-order-numeric.mk revision 1.3
      1 # $NetBSD: varmod-order-numeric.mk,v 1.3 2021/07/30 23:28:04 rillig Exp $
      2 #
      3 # Tests for the :On variable modifier, which returns the words, sorted in
      4 # ascending numeric order.
      5 
      6 # This list contains only 32-bit numbers since the make code needs to conform
      7 # to C90, which does not provide integer types larger than 32 bit.  It uses
      8 # 'long long' by default, but that type is overridable if necessary.
      9 # To get 53-bit integers even in C90, it would be possible to switch to
     10 # 'double' instead, but that would allow floating-point numbers as well, which
     11 # is out of scope for this variable modifier.
     12 NUMBERS=	3 5 7 1 42 -42 5K -3m 1M 1k -2G
     13 
     14 .if ${NUMBERS:On} != "-2G -3m -42 1 3 5 7 42 1k 5K 1M"
     15 .  error ${NUMBERS:On}
     16 .endif
     17 
     18 .if ${NUMBERS:Orn} != "1M 5K 1k 42 7 5 3 1 -42 -3m -2G"
     19 .  error ${NUMBERS:Orn}
     20 .endif
     21 
     22 # Both ':Onr' and ':Orn' have the same effect.
     23 .if ${NUMBERS:Onr} != "1M 5K 1k 42 7 5 3 1 -42 -3m -2G"
     24 .  error ${NUMBERS:Onr}
     25 .endif
     26 
     27 # Shuffling numerically doesn't make sense, so don't allow 'x' and 'n' to be
     28 # combined.
     29 #
     30 # expect-text: Bad modifier ":Oxn" for variable "NUMBERS"
     31 # expect+1: Malformed conditional (${NUMBERS:Oxn})
     32 .if ${NUMBERS:Oxn}
     33 .  error
     34 .else
     35 .  error
     36 .endif
     37 
     38 # Extra characters after ':On' are detected and diagnosed.
     39 # TODO: Add line number information to the "Bad modifier" diagnostic.
     40 #
     41 # expect-text: Bad modifier ":On_typo" for variable "NUMBERS"
     42 .if ${NUMBERS:On_typo}
     43 .  error
     44 .else
     45 .  error
     46 .endif
     47 
     48 # Extra characters after ':Onr' are detected and diagnosed.
     49 #
     50 # expect-text: Bad modifier ":Onr_typo" for variable "NUMBERS"
     51 .if ${NUMBERS:Onr_typo}
     52 .  error
     53 .else
     54 .  error
     55 .endif
     56 
     57 # Extra characters after ':Orn' are detected and diagnosed.
     58 #
     59 # expect+1: Bad modifier ":Orn_typo" for variable "NUMBERS"
     60 .if ${NUMBERS:Orn_typo}
     61 .  error
     62 .else
     63 .  error
     64 .endif
     65 
     66 # Repeating the 'n' is not supported.  In the typical use cases, the sorting
     67 # criteria are fixed, not computed, therefore allowing this redundancy does
     68 # not make sense.
     69 #
     70 # expect-text: Bad modifier ":Onn" for variable "NUMBERS"
     71 .if ${NUMBERS:Onn}
     72 .  error
     73 .else
     74 .  error
     75 .endif
     76 
     77 # Repeating the 'r' is not supported as well, for the same reasons as above.
     78 #
     79 # expect-text: Bad modifier ":Onrr" for variable "NUMBERS"
     80 .if ${NUMBERS:Onrr}
     81 .  error
     82 .else
     83 .  error
     84 .endif
     85 
     86 # Repeating the 'r' is not supported as well, for the same reasons as above.
     87 #
     88 # expect-text: Bad modifier ":Orrn" for variable "NUMBERS"
     89 .if ${NUMBERS:Orrn}
     90 .  error
     91 .else
     92 .  error
     93 .endif
     94 
     95 # Missing closing brace, to cover the error handling code.
     96 _:=	${NUMBERS:O
     97 _:=	${NUMBERS:On
     98 _:=	${NUMBERS:Onr
     99 
    100 all:
    101