freebsd-nq/contrib/bmake/unit-tests/varmod-order-shuffle.mk
Simon J. Gerraty 2c3632d14f Update to bmake-20200902
Lots of code refactoring, simplification and cleanup.
Lots of new unit-tests providing much higher code coverage.
All courtesy of rillig at netbsd.

Other significant changes:

o new read-only variable .SHELL which provides the path of the shell
  used to run scripts (as defined by  the .SHELL target).

o variable parsing detects more errors.

o new debug option -dl: LINT mode, does the equivalent of := for all
  variable assignments so that file and line number are reported for
  variable parse errors.
2020-09-05 19:29:42 +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:
@:;