1
0
Fork 0
spacetac/src/common/RandomGenerator.spec.ts

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);
});
});
}