varmod-order-numeric.mk revision 1.2
1# $NetBSD: varmod-order-numeric.mk,v 1.2 2021/07/30 22:16:09 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. 12NUMBERS= 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# TODO: Use uniform diagnostics for ':On' and ':Onr'. 41# TODO: Fix the misleading ':typo' in the diagnostic. 42# TODO: The '_' is already wrong but does not occur in the diagnostic. 43# 44# expect-text: Bad modifier ":typo" for variable "NUMBERS" 45.if ${NUMBERS:On_typo} 46. error 47.else 48. error 49.endif 50 51# Extra characters after ':Onr' are detected and diagnosed. 52# 53# expect+1: Unknown modifier "_typo" 54.if ${NUMBERS:Onr_typo} 55. error 56.else 57. error 58.endif 59 60# Extra characters after ':Orn' are detected and diagnosed. 61# 62# expect+1: Unknown modifier "_typo" 63.if ${NUMBERS:Orn_typo} 64. error 65.else 66. error 67.endif 68 69# Repeating the 'n' is not supported. In the typical use cases, the sorting 70# criteria are fixed, not computed, therefore allowing this redundancy does 71# not make sense. 72# 73# TODO: This repetition is not diagnosed. 74.if ${NUMBERS:Onn} 75. error 76.else 77. error 78.endif 79 80# Repeating the 'r' is not supported as well, for the same reasons as above. 81# 82# expect+1: Unknown modifier "r" 83.if ${NUMBERS:Onrr} 84. error 85.else 86. error 87.endif 88 89# Repeating the 'r' is not supported as well, for the same reasons as above. 90# 91# TODO: Use uniform diagnostics for ':Onrr' and ':Orrn'. 92# 93# expect-text: Bad modifier ":Orrn" for variable "NUMBERS" 94.if ${NUMBERS:Orrn} 95. error 96.else 97. error 98.endif 99 100all: 101