module dgt.util; import core.stdc.math, core.stdc.stdlib; import dgt.array; import dgt.geom; @nogc nothrow: ///A normalized random function float random() { return cast(float) rand() / RAND_MAX; } ///Generate a random float in a range float randomRange(in float min, in float max) { return (max - min) * random() + min; } ///Generate a random int in a range int randomRange(in int min, in int max) { return cast(int)randomRange(cast(float)min, cast(float)max); } ///Generate a vector in a range Vector randomRange(in Vector a, in Vector b) { return Vector(randomRange(a.x, b.x), randomRange(a.y, b.y)); } ///Create a null terminated buffer from a string Array!char nullTerminate(in string str) { Array!char nameNullTerminated = Array!char(str.length + 1); for(size_t i = 0; i < str.length; i++) nameNullTerminated.add(str[i]); nameNullTerminated.add('\0'); return nameNullTerminated; } unittest { for(size_t i = 0; i < 1000; i++) { Vector vector = randomRange(Vector(-1, -1), Vector(5, 5)); assert(vector.x >= -1 && vector.y >= -1 && vector.x < 5 && vector.y < 5); } } unittest { auto str = nullTerminate("Test string"); auto expected = "Test string\0"; for(size_t i = 0; i < expected.length; i++) assert(str[i] == expected[i]); }