Skip to content

Commit a670227

Browse files
committed
Derandomize std.algorithm.sorting
1 parent 0fef09a commit a670227

File tree

1 file changed

+42
-31
lines changed

1 file changed

+42
-31
lines changed

std/algorithm/sorting.d

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -883,26 +883,31 @@ if (ss == SwapStrategy.unstable && isRandomAccessRange!Range
883883

884884
@safe unittest
885885
{
886-
import std.random : uniform;
886+
import std.random : Random, uniform, unpredictableSeed;
887887

888-
auto a = new int[](uniform(0, 100));
889-
foreach (ref e; a)
890-
{
891-
e = uniform(0, 50);
892-
}
893-
auto pieces = partition3(a, 25);
894-
assert(pieces[0].length + pieces[1].length + pieces[2].length == a.length);
895-
foreach (e; pieces[0])
888+
uint[] seeds = [3923355730, 1927035882, unpredictableSeed];
889+
foreach (s; seeds)
896890
{
897-
assert(e < 25);
898-
}
899-
foreach (e; pieces[1])
900-
{
901-
assert(e == 25);
902-
}
903-
foreach (e; pieces[2])
904-
{
905-
assert(e > 25);
891+
auto r = Random(s);
892+
auto a = new int[](uniform(0, 100, r));
893+
foreach (ref e; a)
894+
{
895+
e = uniform(0, 50);
896+
}
897+
auto pieces = partition3(a, 25);
898+
assert(pieces[0].length + pieces[1].length + pieces[2].length == a.length);
899+
foreach (e; pieces[0])
900+
{
901+
assert(e < 25);
902+
}
903+
foreach (e; pieces[1])
904+
{
905+
assert(e == 25);
906+
}
907+
foreach (e; pieces[2])
908+
{
909+
assert(e > 25);
910+
}
906911
}
907912
}
908913

@@ -3500,24 +3505,30 @@ private T[] randomArray(Flag!"exactSize" flag = No.exactSize, T = int)(
35003505
{
35013506
import std.algorithm.comparison : max, min;
35023507
import std.algorithm.iteration : reduce;
3503-
import std.random : uniform;
3508+
import std.random : Random, uniform, unpredictableSeed;
35043509

35053510
debug(std_algorithm) scope(success)
35063511
writeln("unittest @", __FILE__, ":", __LINE__, " done.");
35073512

3508-
int[] a = new int[uniform(1, 10000)];
3509-
foreach (ref e; a) e = uniform(-1000, 1000);
3510-
auto k = uniform(0, a.length);
3511-
topN(a, k);
3512-
if (k > 0)
3513-
{
3514-
auto left = reduce!max(a[0 .. k]);
3515-
assert(left <= a[k]);
3516-
}
3517-
if (k + 1 < a.length)
3513+
uint[] seeds = [90027751, 2709791795, 1374631933, 995751648, 3541495258, 984840953, unpredictableSeed];
3514+
foreach (s; seeds)
35183515
{
3519-
auto right = reduce!min(a[k + 1 .. $]);
3520-
assert(right >= a[k]);
3516+
auto r = Random(s);
3517+
3518+
int[] a = new int[uniform(1, 10000, r)];
3519+
foreach (ref e; a) e = uniform(-1000, 1000, r);
3520+
auto k = uniform(0, a.length, r);
3521+
topN(a, k);
3522+
if (k > 0)
3523+
{
3524+
auto left = reduce!max(a[0 .. k]);
3525+
assert(left <= a[k]);
3526+
}
3527+
if (k + 1 < a.length)
3528+
{
3529+
auto right = reduce!min(a[k + 1 .. $]);
3530+
assert(right >= a[k]);
3531+
}
35213532
}
35223533
}
35233534

0 commit comments

Comments
 (0)