93 lines
3.1 KiB
TypeScript
93 lines
3.1 KiB
TypeScript
module TK {
|
|
testing("RandomGenerator", test => {
|
|
test.case("produces floats", check => {
|
|
var gen = new RandomGenerator();
|
|
|
|
var i = 100;
|
|
while (i--) {
|
|
var value = gen.random();
|
|
check.greaterorequal(value, 0);
|
|
check.greater(1, value);
|
|
}
|
|
});
|
|
|
|
test.case("produces integers", check => {
|
|
var gen = new RandomGenerator();
|
|
|
|
var i = 100;
|
|
while (i--) {
|
|
var value = gen.randInt(5, 12);
|
|
check.equals(Math.round(value), value);
|
|
check.greater(value, 4);
|
|
check.greater(13, value);
|
|
}
|
|
});
|
|
|
|
test.case("chooses from an array", check => {
|
|
var gen = new RandomGenerator();
|
|
|
|
check.equals(gen.choice([5]), 5);
|
|
|
|
var i = 100;
|
|
while (i--) {
|
|
var value = gen.choice(["test", "thing"]);
|
|
check.contains(["thing", "test"], value);
|
|
}
|
|
});
|
|
|
|
test.case("samples from an array", check => {
|
|
var gen = new RandomGenerator();
|
|
|
|
var i = 100;
|
|
while (i-- > 1) {
|
|
var input = [1, 2, 3, 4, 5];
|
|
var sample = gen.sample(input, i % 5 + 1);
|
|
check.same(sample.length, i % 5 + 1);
|
|
sample.forEach((num, idx) => {
|
|
check.contains(input, num);
|
|
check.notcontains(sample.filter((ival, iidx) => iidx != idx), num);
|
|
});
|
|
}
|
|
});
|
|
|
|
test.case("choose from weighted ranges", check => {
|
|
let gen = new RandomGenerator();
|
|
|
|
check.equals(gen.weighted([]), -1);
|
|
check.equals(gen.weighted([1]), 0);
|
|
check.equals(gen.weighted([0, 1, 0]), 1);
|
|
check.equals(gen.weighted([0, 12, 0]), 1);
|
|
|
|
gen = new SkewedRandomGenerator([0, 0.5, 0.7, 0.8, 0.9999]);
|
|
check.equals(gen.weighted([4, 3, 0, 2, 1]), 0);
|
|
check.equals(gen.weighted([4, 3, 0, 2, 1]), 1);
|
|
check.equals(gen.weighted([4, 3, 0, 2, 1]), 3);
|
|
check.equals(gen.weighted([4, 3, 0, 2, 1]), 3);
|
|
check.equals(gen.weighted([4, 3, 0, 2, 1]), 4);
|
|
});
|
|
|
|
test.case("generates ids", check => {
|
|
let gen = new SkewedRandomGenerator([0, 0.4, 0.2, 0.1, 0.3, 0.8]);
|
|
check.equals(gen.id(6, "abcdefghij"), "aecbdi");
|
|
});
|
|
|
|
test.case("can be skewed", check => {
|
|
var gen = new SkewedRandomGenerator([0, 0.5, 0.2, 0.9]);
|
|
|
|
check.equals(gen.random(), 0);
|
|
check.equals(gen.random(), 0.5);
|
|
check.equals(gen.randInt(4, 8), 5);
|
|
check.equals(gen.random(), 0.9);
|
|
|
|
var value = gen.random();
|
|
check.greaterorequal(value, 0);
|
|
check.greater(1, value);
|
|
|
|
gen = new SkewedRandomGenerator([0.7], true);
|
|
check.equals(gen.random(), 0.7);
|
|
check.equals(gen.random(), 0.7);
|
|
check.equals(gen.random(), 0.7);
|
|
});
|
|
});
|
|
}
|