tool/lib/minitest/unit.rb: Reproducible shuffle of test suites
... based on CRC32 of names of the test suites. Formerly, `make test-all` randomized the order of the test suites by using `Array#shuffle`. It also shows `--seed N` to reproduce the order, but it was not reproducible when a suite set is different. This change sorts the suites by CRC32 hash of the suite names with a salt generated by the seed.
This commit is contained in:
parent
094fb6ae0d
commit
8f99bfa26d
@ -1407,7 +1407,18 @@ module MiniTest
|
|||||||
suites = @@test_suites.keys
|
suites = @@test_suites.keys
|
||||||
case self.test_order
|
case self.test_order
|
||||||
when :random
|
when :random
|
||||||
suites.shuffle
|
# shuffle test suites based on CRC32 of their names
|
||||||
|
salt = "\n" + rand(1 << 32).to_s
|
||||||
|
crc_tbl = (0..255).map do |i|
|
||||||
|
(0..7).inject(i) {|c,| (c & 1 == 1) ? (0xEDB88320 ^ (c >> 1)) : (c >> 1) }
|
||||||
|
end
|
||||||
|
suites = suites.sort_by do |suite|
|
||||||
|
crc32 = 0xffffffff
|
||||||
|
(suite.name + salt).bytes do |data|
|
||||||
|
crc32 = crc_tbl[(crc32 ^ data) & 0xff] ^ (crc32 >> 8)
|
||||||
|
end
|
||||||
|
crc32 ^ 0xffffffff
|
||||||
|
end
|
||||||
when :nosort
|
when :nosort
|
||||||
suites
|
suites
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user