Files
rhinelab-ui/scripts/check-quality.mjs
T

79 lines
2.3 KiB
JavaScript

import assert from "node:assert/strict";
import {
normalizeQuality,
qualityPresets,
matchingPreset,
renderDimensions,
} from "../src/render-quality.ts";
assert.deepEqual(normalizeQuality(null), qualityPresets.original);
const legacy = normalizeQuality(undefined, false);
assert.equal(legacy.pixelRatio, 1);
assert.equal(legacy.aoSamples, 0);
assert.equal(legacy.depthOfField, 0);
assert.equal(legacy.shadows, 2048, "Migration preserves old low-mode shadows");
assert.equal(legacy.transmission, 1, "Migration preserves old low-mode glass");
for (const bad of [
null,
false,
"ultra",
[],
{
scale: NaN,
pixelRatio: 99,
antialias: "injected",
shadows: -1,
aoSamples: Infinity,
},
]) {
assert.deepEqual(normalizeQuality(bad), qualityPresets.original);
}
assert.equal(normalizeQuality({ scale: 99999 }).scale, 200);
assert.equal(normalizeQuality({ scale: -1 }).scale, 50);
assert.equal(normalizeQuality({ depthOfField: 99999 }).depthOfField, 150);
for (const [name, quality] of Object.entries(qualityPresets)) {
assert.equal(matchingPreset(normalizeQuality(quality)), name);
const reloaded = normalizeQuality(JSON.parse(JSON.stringify(quality)));
assert.deepEqual(reloaded, quality);
}
assert.equal(matchingPreset({ ...qualityPresets.ultra, scale: 145 }), "custom");
for (const width of [640, 1920, 3840, 7680]) {
for (const dpr of [1, 1.5, 2, 3]) {
for (const max of [2048, 4096, 16384]) {
const dimensions = renderDimensions(
normalizeQuality({ scale: 200, pixelRatio: 3 }),
1920,
1080,
width / 1920,
dpr,
max,
);
assert.ok(dimensions.width * dimensions.height <= 8_294_400);
assert.ok(dimensions.width <= max && dimensions.height <= max);
assert.ok(dimensions.ratio > 0);
}
}
}
const native = renderDimensions(
qualityPresets.original,
1920,
1080,
1,
1,
16384,
);
const ultra = renderDimensions(qualityPresets.ultra, 1920, 1080, 1, 1, 16384);
assert.equal(native.width, 1920);
assert.equal(ultra.width, 2880);
assert.equal(
(ultra.width * ultra.height) / (native.width * native.height),
2.25,
);
assert.equal(
renderDimensions(qualityPresets.ultra, 1920, 1080, 2, 2, 16384).limited,
true,
);
console.log(
"Quality checks passed: migration, invalid storage, presets, supersampling and 48 device-limit combinations.",
);