NetBSD/usr.bin/make/unit-tests/varmod-order-shuffle.mk
rillig 94b00ca35c make(1): move tests for the :Ox modifier into separate file
The test has been extended by ensuring that the shuffled words are still
the same.  Comparing two shuffled lists is probabilistic, but comparing
their sorted results is not, therefore that's completely sensible to do.

When writing this test, by coincidence I discovered how to generate the
"Undefined variable" error message.  Unfortunately, the error message is
wrong since the variable NUMBERS is defined at that point.  In summary,
that error message is shown when it shouldn't, and when it should it is
not shown.  Still, I'm glad that I finally found it.
2020-08-16 20:43:01 +00:00

40 lines
1.3 KiB
Makefile

# $NetBSD: varmod-order-shuffle.mk,v 1.3 2020/08/16 20:43:01 rillig Exp $
#
# Tests for the :Ox variable modifier, which returns the words of the
# variable, shuffled.
#
# As of 2020-08-16, make uses random(3) seeded by the current time in seconds.
# This makes the random numbers completely predictable since there is no other
# part of make that uses random numbers.
NUMBERS= one two three four five six seven eight nine ten
# Note that 1 in every 10! trials two independently generated
# randomized orderings will be the same. The test framework doesn't
# support checking probabilistic output, so we accept that each of the
# 3 :Ox tests will incorrectly fail with probability 2.756E-7, which
# lets the whole test fail once in 1.209.600 runs, on average.
# Create two shuffles using the := assignment operator.
shuffled1:= ${NUMBERS:Ox}
shuffled2:= ${NUMBERS:Ox}
.if ${shuffled1} == ${shuffled2}
.error ${shuffled1} == ${shuffled2}
.endif
# Sorting the list before shuffling it has no effect.
shuffled1:= ${NUMBERS:O:Ox}
shuffled2:= ${NUMBERS:O:Ox}
.if ${shuffled1} == ${shuffled2}
.error ${shuffled1} == ${shuffled2}
.endif
# Sorting after shuffling must produce the original numbers.
sorted:= ${NUMBERS:Ox:O}
.if ${sorted} != ${NUMBERS:O}
.error ${sorted} != ${NUMBERS:O}
.endif
all:
@:;