mirror of
https://github.com/dlang/phobos.git
synced 2025-04-30 07:00:37 +03:00
Merge pull request #5202 from wilzbach/derandomize-std-algorithm
Derandomize std.algorithm
This commit is contained in:
commit
6153116b03
1 changed files with 43 additions and 31 deletions
|
@ -883,9 +883,13 @@ if (ss == SwapStrategy.unstable && isRandomAccessRange!Range
|
||||||
|
|
||||||
@safe unittest
|
@safe unittest
|
||||||
{
|
{
|
||||||
import std.random : uniform;
|
import std.random : Random, uniform, unpredictableSeed;
|
||||||
|
|
||||||
auto a = new int[](uniform(0, 100));
|
immutable uint[] seeds = [3923355730, 1927035882, unpredictableSeed];
|
||||||
|
foreach (s; seeds)
|
||||||
|
{
|
||||||
|
auto r = Random(s);
|
||||||
|
auto a = new int[](uniform(0, 100, r));
|
||||||
foreach (ref e; a)
|
foreach (ref e; a)
|
||||||
{
|
{
|
||||||
e = uniform(0, 50);
|
e = uniform(0, 50);
|
||||||
|
@ -905,6 +909,7 @@ if (ss == SwapStrategy.unstable && isRandomAccessRange!Range
|
||||||
assert(e > 25);
|
assert(e > 25);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// makeIndex
|
// makeIndex
|
||||||
/**
|
/**
|
||||||
|
@ -3500,14 +3505,20 @@ private T[] randomArray(Flag!"exactSize" flag = No.exactSize, T = int)(
|
||||||
{
|
{
|
||||||
import std.algorithm.comparison : max, min;
|
import std.algorithm.comparison : max, min;
|
||||||
import std.algorithm.iteration : reduce;
|
import std.algorithm.iteration : reduce;
|
||||||
import std.random : uniform;
|
import std.random : Random, uniform, unpredictableSeed;
|
||||||
|
|
||||||
debug(std_algorithm) scope(success)
|
debug(std_algorithm) scope(success)
|
||||||
writeln("unittest @", __FILE__, ":", __LINE__, " done.");
|
writeln("unittest @", __FILE__, ":", __LINE__, " done.");
|
||||||
|
|
||||||
int[] a = new int[uniform(1, 10000)];
|
immutable uint[] seeds = [90027751, 2709791795, 1374631933, 995751648, 3541495258, 984840953, unpredictableSeed];
|
||||||
foreach (ref e; a) e = uniform(-1000, 1000);
|
foreach (s; seeds)
|
||||||
auto k = uniform(0, a.length);
|
{
|
||||||
|
auto r = Random(s);
|
||||||
|
|
||||||
|
int[] a = new int[uniform(1, 10000, r)];
|
||||||
|
foreach (ref e; a) e = uniform(-1000, 1000, r);
|
||||||
|
|
||||||
|
auto k = uniform(0, a.length, r);
|
||||||
topN(a, k);
|
topN(a, k);
|
||||||
if (k > 0)
|
if (k > 0)
|
||||||
{
|
{
|
||||||
|
@ -3520,6 +3531,7 @@ private T[] randomArray(Flag!"exactSize" flag = No.exactSize, T = int)(
|
||||||
assert(right >= a[k]);
|
assert(right >= a[k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// bug 12987
|
// bug 12987
|
||||||
@safe unittest
|
@safe unittest
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue