Etapa 1 inteira (logica com 100% de cobertura, cena 3D, toque, sons, bancada de desempenho, e2e) e a base da etapa 2 (mapa novo no Tiled, texturas, imagens dos itens, sons conferidos, golpe recortado e medido). Pagina /jogo fora do menu e do sitemap ate a medicao no celular.
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import { semear, sortear, sortearInteiro } from "./rng";
|
|
|
|
function sequencia(semente: number, n: number): number[] {
|
|
const p = { rng: semear(semente) };
|
|
return Array.from({ length: n }, () => sortear(p));
|
|
}
|
|
|
|
describe("semear", () => {
|
|
it("converte a semente em uint32", () => {
|
|
expect(semear(5)).toBe(5);
|
|
expect(semear(2 ** 32 + 7)).toBe(7);
|
|
expect(semear(-1)).toBe(0xffffffff);
|
|
});
|
|
|
|
it("troca a semente 0 por 0x9e3779b9", () => {
|
|
expect(semear(0)).toBe(0x9e3779b9);
|
|
});
|
|
});
|
|
|
|
describe("sortear", () => {
|
|
it("dá a mesma sequência para a mesma semente", () => {
|
|
expect(sequencia(42, 20)).toEqual(sequencia(42, 20));
|
|
});
|
|
|
|
it("dá sequências diferentes para sementes diferentes", () => {
|
|
expect(sequencia(1, 20)).not.toEqual(sequencia(2, 20));
|
|
});
|
|
|
|
it("mantém 1000 sorteios em [0, 1)", () => {
|
|
for (const v of sequencia(7, 1000)) {
|
|
expect(v).toBeGreaterThanOrEqual(0);
|
|
expect(v).toBeLessThan(1);
|
|
}
|
|
});
|
|
|
|
it("funciona com a semente 0", () => {
|
|
const valores = sequencia(0, 10);
|
|
expect(new Set(valores).size).toBe(10);
|
|
});
|
|
|
|
it("avança o estado de p.rng", () => {
|
|
const p = { rng: semear(9) };
|
|
const antes = p.rng;
|
|
sortear(p);
|
|
expect(p.rng).not.toBe(antes);
|
|
});
|
|
});
|
|
|
|
describe("sortearInteiro", () => {
|
|
it("devolve inteiros de 0 a n-1 e usa todos os valores", () => {
|
|
const p = { rng: semear(3) };
|
|
const vistos = new Set<number>();
|
|
for (let i = 0; i < 500; i++) {
|
|
const v = sortearInteiro(p, 6);
|
|
expect(Number.isInteger(v)).toBe(true);
|
|
expect(v).toBeGreaterThanOrEqual(0);
|
|
expect(v).toBeLessThan(6);
|
|
vistos.add(v);
|
|
}
|
|
expect(vistos.size).toBe(6);
|
|
});
|
|
|
|
it("devolve sempre 0 quando n é 1", () => {
|
|
expect(sortearInteiro({ rng: semear(1) }, 1)).toBe(0);
|
|
});
|
|
});
|