summaryrefslogtreecommitdiff
path: root/libphobos/src/std/algorithm/internal.d
diff options
context:
space:
mode:
Diffstat (limited to 'libphobos/src/std/algorithm/internal.d')
-rw-r--r--libphobos/src/std/algorithm/internal.d77
1 files changed, 77 insertions, 0 deletions
diff --git a/libphobos/src/std/algorithm/internal.d b/libphobos/src/std/algorithm/internal.d
new file mode 100644
index 00000000000..ca03fd77b1f
--- /dev/null
+++ b/libphobos/src/std/algorithm/internal.d
@@ -0,0 +1,77 @@
+// Written in the D programming language.
+
+/// Helper functions for std.algorithm package.
+module std.algorithm.internal;
+
+
+// Same as std.string.format, but "self-importing".
+// Helps reduce code and imports, particularly in static asserts.
+// Also helps with missing imports errors.
+package template algoFormat()
+{
+ import std.format : format;
+ alias algoFormat = format;
+}
+
+// Internal random array generators
+version (unittest)
+{
+ package enum size_t maxArraySize = 50;
+ package enum size_t minArraySize = maxArraySize - 1;
+
+ package string[] rndstuff(T : string)()
+ {
+ import std.random : Random, unpredictableSeed, uniform;
+
+ static Random rnd;
+ static bool first = true;
+ if (first)
+ {
+ rnd = Random(unpredictableSeed);
+ first = false;
+ }
+ string[] result =
+ new string[uniform(minArraySize, maxArraySize, rnd)];
+ string alpha = "abcdefghijABCDEFGHIJ";
+ foreach (ref s; result)
+ {
+ foreach (i; 0 .. uniform(0u, 20u, rnd))
+ {
+ auto j = uniform(0, alpha.length - 1, rnd);
+ s ~= alpha[j];
+ }
+ }
+ return result;
+ }
+
+ package int[] rndstuff(T : int)()
+ {
+ import std.random : Random, unpredictableSeed, uniform;
+
+ static Random rnd;
+ static bool first = true;
+ if (first)
+ {
+ rnd = Random(unpredictableSeed);
+ first = false;
+ }
+ int[] result = new int[uniform(minArraySize, maxArraySize, rnd)];
+ foreach (ref i; result)
+ {
+ i = uniform(-100, 100, rnd);
+ }
+ return result;
+ }
+
+ package double[] rndstuff(T : double)()
+ {
+ double[] result;
+ foreach (i; rndstuff!(int)())
+ {
+ result ~= i / 50.0;
+ }
+ return result;
+ }
+}
+
+package(std) T* addressOf(T)(ref T val) { return &val; }