Files
Battle-for-Tismo/tests/noise_test.js
2026-09-16 19:59:18 +02:00

51 lines
1.8 KiB
JavaScript

import { TestCase } from "./framework/test_case.js";
import { SimplexNoise } from "../shared/noise.js";
const FRACTAL = { frequency: 0.06, octaves: 4, lacunarity: 2.0, gain: 0.5 };
export class NoiseTest extends TestCase {
test_is_deterministic_for_a_seed() {
const a = new SimplexNoise(1);
const b = new SimplexNoise(1);
this.assertEqual(a.noise2D(1.5, 2.5), b.noise2D(1.5, 2.5));
this.assertEqual(a.noise3D(1.1, 2.2, 3.3), b.noise3D(1.1, 2.2, 3.3));
this.assertEqual(a.fbm(4, 5, undefined, FRACTAL), b.fbm(4, 5, undefined, FRACTAL));
}
test_different_seeds_differ() {
const a = new SimplexNoise(1);
const b = new SimplexNoise(2);
let differs = false;
for (let i = 0; i < 20 && !differs; i++) {
if (a.noise2D(i * 0.7, i * 0.3) !== b.noise2D(i * 0.7, i * 0.3)) differs = true;
}
this.assertTrue(differs, "a different seed changes the field");
}
test_2d_values_stay_in_range() {
const noise = new SimplexNoise(7);
for (let i = 0; i < 500; i++) {
const value = noise.noise2D(i * 0.13, i * 0.07);
this.assert(value >= -1.0001 && value <= 1.0001, `noise2D out of range: ${value}`);
}
}
test_3d_values_stay_in_range() {
const noise = new SimplexNoise(7);
for (let i = 0; i < 500; i++) {
const value = noise.noise3D(i * 0.13, i * 0.07, i * 0.21);
this.assert(value >= -1.0001 && value <= 1.0001, `noise3D out of range: ${value}`);
}
}
test_fbm_2d_and_3d_are_finite_and_bounded() {
const noise = new SimplexNoise(3);
const flat = noise.fbm(10, 10, undefined, FRACTAL);
const wrapped = noise.fbm(10, 10, 5, FRACTAL);
for (const value of [flat, wrapped]) {
this.assertTrue(Number.isFinite(value), "fbm is finite");
this.assert(value >= -1.0001 && value <= 1.0001, `fbm out of range: ${value}`);
}
}
}