1 # $NetBSD: varmod-order-shuffle.mk,v 1.8 2023/02/26 06:08:06 rillig Exp $ 2 # 3 # Tests for the :Ox variable modifier, which returns the words of the 4 # variable, shuffled. 5 # 6 # The variable modifier :Ox is available since 2005-06-01. 7 # 8 # As of 2020-08-16, make uses random(3) seeded by the current time in seconds. 9 # This makes the random numbers completely predictable since the only other 10 # part of make that uses random numbers is the 'randomize-targets' mode, which 11 # is off by default. 12 # 13 # Tags: probabilistic 14 15 WORDS= one two three four five six seven eight nine ten 16 17 # Note that 1 in every 10! trials two independently generated 18 # randomized orderings will be the same. The test framework doesn't 19 # support checking probabilistic output, so we accept that each of the 20 # 3 :Ox tests will incorrectly fail with probability 2.756E-7, which 21 # lets the whole test fail once in 1.209.600 runs, on average. 22 23 # Create two shuffles using the := assignment operator. 24 shuffled1:= ${WORDS:Ox} 25 shuffled2:= ${WORDS:Ox} 26 .if ${shuffled1} == ${shuffled2} 27 . error ${shuffled1} == ${shuffled2} 28 .endif 29 30 # Sorting the list before shuffling it has no effect. 31 shuffled1:= ${WORDS:O:Ox} 32 shuffled2:= ${WORDS:O:Ox} 33 .if ${shuffled1} == ${shuffled2} 34 . error ${shuffled1} == ${shuffled2} 35 .endif 36 37 # Sorting after shuffling must produce the original numbers. 38 sorted:= ${WORDS:Ox:O} 39 .if ${sorted} != ${WORDS:O} 40 . error ${sorted} != ${WORDS:O} 41 .endif 42 43 all: 44