@prosopo/puzzle-assets 0.1.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$cjs.log +13 -15
- package/.turbo/turbo-build$colon$tsc.log +5 -8
- package/.turbo/turbo-build.log +15 -20
- package/CHANGELOG.md +86 -0
- package/LICENSE +201 -0
- package/dist/browser.d.ts +3 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -4
- package/dist/browser.js.map +1 -1
- package/dist/cjs/compose.cjs +117 -1
- package/dist/cjs/contrast.cjs +142 -0
- package/dist/cjs/index.cjs +24 -6
- package/dist/cjs/notch.cjs +115 -93
- package/dist/cjs/palette.cjs +36 -3
- package/dist/compose.d.ts +4 -0
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +117 -2
- package/dist/compose.js.map +1 -1
- package/dist/contrast.d.ts +9 -0
- package/dist/contrast.d.ts.map +1 -0
- package/dist/contrast.js +137 -0
- package/dist/contrast.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/notch.d.ts.map +1 -1
- package/dist/notch.js +115 -93
- package/dist/notch.js.map +1 -1
- package/dist/palette.d.ts +1 -0
- package/dist/palette.d.ts.map +1 -1
- package/dist/palette.js +36 -4
- package/dist/palette.js.map +1 -1
- package/dist/prng.d.ts.map +1 -1
- package/dist/prng.js.map +1 -1
- package/dist/tests/pieceReadability.unit.test.d.ts +2 -0
- package/dist/tests/pieceReadability.unit.test.d.ts.map +1 -0
- package/dist/tests/pieceReadability.unit.test.js +320 -0
- package/dist/tests/pieceReadability.unit.test.js.map +1 -0
- package/dist/tests/renderReplay.unit.test.d.ts +2 -0
- package/dist/tests/renderReplay.unit.test.d.ts.map +1 -0
- package/dist/tests/renderReplay.unit.test.js +77 -0
- package/dist/tests/renderReplay.unit.test.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +59 -60
- package/src/background.ts +0 -189
- package/src/browser.ts +0 -100
- package/src/compose.ts +0 -210
- package/src/decoys.ts +0 -191
- package/src/encode.ts +0 -59
- package/src/index.ts +0 -137
- package/src/notch.ts +0 -223
- package/src/palette.ts +0 -110
- package/src/prng.ts +0 -95
- package/src/tests/puzzleAssets.unit.test.ts +0 -438
- package/src/types.ts +0 -93
- package/tsconfig.cjs.json +0 -14
- package/tsconfig.json +0 -19
- package/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.types.json +0 -9
package/dist/palette.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bestPairContrast } from "./contrast.js";
|
|
1
2
|
//#region src/palette.ts
|
|
2
3
|
var PALETTES = [
|
|
3
4
|
{
|
|
@@ -75,19 +76,50 @@ var hslToRgb = (h, s, l) => {
|
|
|
75
76
|
* colour and the mesh reads as one flat field with a slight gradient, which is
|
|
76
77
|
* the difference between "designed" and "beige".
|
|
77
78
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
79
|
+
/**
|
|
80
|
+
* The worst-case contrast ratio the palette's widest pair must reach, across
|
|
81
|
+
* normal vision and all three dichromacies.
|
|
82
|
+
*
|
|
83
|
+
* This is a floor on the *range* a background spans, not on every pair — a mesh
|
|
84
|
+
* gradient needs near-neighbours, and demanding contrast between them would
|
|
85
|
+
* produce stripes. What it rules out is a field that is uniformly one brightness,
|
|
86
|
+
* where hue is the only thing separating anything and a dichromat sees a flat
|
|
87
|
+
* rectangle.
|
|
88
|
+
*
|
|
89
|
+
* 1.6 is chosen to be achievable rather than aspirational: the palettes are
|
|
90
|
+
* analogous-hue families on purpose, and pushing this towards WCAG's 3:1 would
|
|
91
|
+
* reject most of them and force the generator into the widened-lightness
|
|
92
|
+
* fallback on nearly every draw, which would make every background look the
|
|
93
|
+
* same. Separation of the piece from what it rests on is guaranteed by its
|
|
94
|
+
* luminance-stepped rim in `compose.ts`, not by this; this stops the background
|
|
95
|
+
* itself from having no structure at all.
|
|
96
|
+
*/
|
|
97
|
+
var MIN_PALETTE_CONTRAST = 1.6;
|
|
98
|
+
/** How many times to redraw before widening the lightness band instead. */
|
|
99
|
+
var MAX_PALETTE_ATTEMPTS = 6;
|
|
100
|
+
var drawOnce = (prng, count, spec, lightnessBoost) => {
|
|
80
101
|
const baseHue = spec.hue + prng.range(-20, 20);
|
|
81
102
|
const direction = prng.next() < .5 ? -1 : 1;
|
|
103
|
+
const low = Math.max(.08, spec.lightness[0] - lightnessBoost);
|
|
104
|
+
const high = Math.min(.92, spec.lightness[1] + lightnessBoost);
|
|
82
105
|
const colours = [];
|
|
83
106
|
for (let i = 0; i < count; i++) {
|
|
84
107
|
const hue = baseHue + direction * ((count === 1 ? .5 : i / (count - 1)) - .5) * 2 * spec.spread + prng.range(-6, 6);
|
|
85
108
|
const saturation = prng.range(spec.saturation[0], spec.saturation[1]);
|
|
86
109
|
const pole = i % 2 === 0 ? 0 : 1;
|
|
87
|
-
const lightness =
|
|
110
|
+
const lightness = (pole === 0 ? low : high) + prng.range(-.04, .04) * (pole === 0 ? 1 : -1);
|
|
88
111
|
colours.push(hslToRgb(hue, saturation, lightness));
|
|
89
112
|
}
|
|
90
113
|
return colours;
|
|
91
114
|
};
|
|
115
|
+
var drawPalette = (prng, count) => {
|
|
116
|
+
const spec = prng.pick(PALETTES);
|
|
117
|
+
let last = drawOnce(prng, count, spec, 0);
|
|
118
|
+
for (let attempt = 1; attempt <= MAX_PALETTE_ATTEMPTS; attempt++) {
|
|
119
|
+
if (bestPairContrast(last) >= 1.6) return last;
|
|
120
|
+
last = drawOnce(prng, count, spec, attempt * .07);
|
|
121
|
+
}
|
|
122
|
+
return last;
|
|
123
|
+
};
|
|
92
124
|
//#endregion
|
|
93
|
-
export { drawPalette, hslToRgb };
|
|
125
|
+
export { MIN_PALETTE_CONTRAST, drawPalette, hslToRgb };
|
package/dist/palette.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../src/palette.ts"],"names":[],"mappings":"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"}
|
package/dist/prng.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prng.d.ts","sourceRoot":"","sources":["../src/prng.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prng.d.ts","sourceRoot":"","sources":["../src/prng.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,IAAI;IAEpB,IAAI,IAAI,MAAM,CAAC;IAEf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAExC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,UAAU,KAAK,CAAC;AAG7B,eAAO,MAAM,UAAU,QAAO,MAAiC,CAAC;AAMhE,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,IA+CzC,CAAC"}
|
package/dist/prng.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prng.js","sourceRoot":"","sources":["../src/prng.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prng.js","sourceRoot":"","sources":["../src/prng.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pieceReadability.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/pieceReadability.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { generateBackground } from "../background.js";
|
|
3
|
+
import { cutNotch, pieceRimGeometry } from "../compose.js";
|
|
4
|
+
import { VISION_TYPES, bestPairContrast, contrastRatio, relativeLuminance, simulateVision, } from "../contrast.js";
|
|
5
|
+
import { coverageFromDistance, createNotchShape } from "../notch.js";
|
|
6
|
+
import { MIN_PALETTE_CONTRAST, drawPalette } from "../palette.js";
|
|
7
|
+
import { createPrng } from "../prng.js";
|
|
8
|
+
const SEEDS = 400;
|
|
9
|
+
const seedAt = (i) => {
|
|
10
|
+
const seed = Buffer.alloc(16);
|
|
11
|
+
seed.writeUInt32LE((i * 2_654_435_761) >>> 0, 0);
|
|
12
|
+
seed.writeUInt32LE((i * 40_503 + 7) >>> 0, 4);
|
|
13
|
+
seed.writeUInt32LE((i ^ 0x9e37_79b9) >>> 0, 8);
|
|
14
|
+
seed.writeUInt32LE((i * 97 + 13) >>> 0, 12);
|
|
15
|
+
return seed;
|
|
16
|
+
};
|
|
17
|
+
const hueOf = (colour) => {
|
|
18
|
+
const r = colour.r / 255;
|
|
19
|
+
const g = colour.g / 255;
|
|
20
|
+
const b = colour.b / 255;
|
|
21
|
+
const max = Math.max(r, g, b);
|
|
22
|
+
const min = Math.min(r, g, b);
|
|
23
|
+
const span = max - min;
|
|
24
|
+
if (span === 0)
|
|
25
|
+
return 0;
|
|
26
|
+
let hue;
|
|
27
|
+
if (max === r)
|
|
28
|
+
hue = ((g - b) / span) % 6;
|
|
29
|
+
else if (max === g)
|
|
30
|
+
hue = (b - r) / span + 2;
|
|
31
|
+
else
|
|
32
|
+
hue = (r - g) / span + 4;
|
|
33
|
+
return (((hue * 60) % 360) + 360) % 360;
|
|
34
|
+
};
|
|
35
|
+
const hueGap = (a, b) => {
|
|
36
|
+
const raw = Math.abs(a - b) % 360;
|
|
37
|
+
return raw > 180 ? 360 - raw : raw;
|
|
38
|
+
};
|
|
39
|
+
describe("colour-vision arithmetic", () => {
|
|
40
|
+
it("gives black and white the full WCAG range", () => {
|
|
41
|
+
expect(contrastRatio({ r: 0, g: 0, b: 0 }, { r: 255, g: 255, b: 255 })).toBeCloseTo(21, 1);
|
|
42
|
+
});
|
|
43
|
+
it("gives a colour against itself the floor of 1", () => {
|
|
44
|
+
expect(contrastRatio({ r: 90, g: 120, b: 200 }, { r: 90, g: 120, b: 200 })).toBe(1);
|
|
45
|
+
});
|
|
46
|
+
it("weights green above red above blue, on linear light", () => {
|
|
47
|
+
const red = relativeLuminance({ r: 255, g: 0, b: 0 });
|
|
48
|
+
const green = relativeLuminance({ r: 0, g: 255, b: 0 });
|
|
49
|
+
const blue = relativeLuminance({ r: 0, g: 0, b: 255 });
|
|
50
|
+
expect(green).toBeGreaterThan(red);
|
|
51
|
+
expect(red).toBeGreaterThan(blue);
|
|
52
|
+
expect(relativeLuminance({ r: 128, g: 128, b: 128 })).toBeLessThan(0.3);
|
|
53
|
+
});
|
|
54
|
+
it("leaves colours alone for normal vision", () => {
|
|
55
|
+
const colour = { r: 12, g: 200, b: 77 };
|
|
56
|
+
expect(simulateVision(colour, "normal")).toEqual(colour);
|
|
57
|
+
});
|
|
58
|
+
it("collapses red against green onto one hue for protanopia and deuteranopia", () => {
|
|
59
|
+
const red = { r: 200, g: 60, b: 60 };
|
|
60
|
+
const green = { r: 60, g: 200, b: 60 };
|
|
61
|
+
expect(hueGap(hueOf(red), hueOf(green))).toBeGreaterThan(100);
|
|
62
|
+
for (const vision of ["protanopia", "deuteranopia"]) {
|
|
63
|
+
const gap = hueGap(hueOf(simulateVision(red, vision)), hueOf(simulateVision(green, vision)));
|
|
64
|
+
expect(gap, vision).toBeLessThan(20);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
it("leaves red against green apart for tritanopia", () => {
|
|
68
|
+
const red = { r: 200, g: 60, b: 60 };
|
|
69
|
+
const green = { r: 60, g: 200, b: 60 };
|
|
70
|
+
expect(hueGap(hueOf(simulateVision(red, "tritanopia")), hueOf(simulateVision(green, "tritanopia")))).toBeGreaterThan(90);
|
|
71
|
+
});
|
|
72
|
+
it("keeps a grey ramp distinguishable for every vision type", () => {
|
|
73
|
+
for (const vision of VISION_TYPES) {
|
|
74
|
+
const dark = simulateVision({ r: 40, g: 40, b: 40 }, vision);
|
|
75
|
+
const light = simulateVision({ r: 215, g: 215, b: 215 }, vision);
|
|
76
|
+
expect(contrastRatio(dark, light)).toBeGreaterThan(5);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("generated palettes, swept over seeds", () => {
|
|
81
|
+
it("always spans the contrast floor, under every vision type", () => {
|
|
82
|
+
const failures = [];
|
|
83
|
+
for (let i = 0; i < SEEDS; i++) {
|
|
84
|
+
const colours = drawPalette(createPrng(seedAt(i)), 5);
|
|
85
|
+
const worst = bestPairContrast(colours);
|
|
86
|
+
if (worst < MIN_PALETTE_CONTRAST) {
|
|
87
|
+
failures.push(`seed ${i}: ${worst.toFixed(3)}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
expect(failures).toEqual([]);
|
|
91
|
+
});
|
|
92
|
+
it("holds the floor for every palette size the renderer asks for", () => {
|
|
93
|
+
for (const count of [2, 3, 4, 5, 6, 8]) {
|
|
94
|
+
for (let i = 0; i < 40; i++) {
|
|
95
|
+
const colours = drawPalette(createPrng(seedAt(i + count * 1000)), count);
|
|
96
|
+
expect(bestPairContrast(colours), `count ${count}, seed ${i}`).toBeGreaterThanOrEqual(MIN_PALETTE_CONTRAST);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
it("still produces a range of palettes rather than clamping to the floor", () => {
|
|
101
|
+
const spans = new Set();
|
|
102
|
+
for (let i = 0; i < SEEDS; i++) {
|
|
103
|
+
spans.add(bestPairContrast(drawPalette(createPrng(seedAt(i)), 5)).toFixed(1));
|
|
104
|
+
}
|
|
105
|
+
expect(spans.size).toBeGreaterThan(4);
|
|
106
|
+
});
|
|
107
|
+
it("is still reproducible from its seed", () => {
|
|
108
|
+
expect(drawPalette(createPrng(seedAt(7)), 5)).toEqual(drawPalette(createPrng(seedAt(7)), 5));
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
const protrusionArcs = (shape, size, radiusFraction) => {
|
|
112
|
+
const cx = size / 2;
|
|
113
|
+
const cy = size / 2;
|
|
114
|
+
const radius = (size / 2) * radiusFraction;
|
|
115
|
+
const steps = 720;
|
|
116
|
+
let arcs = 0;
|
|
117
|
+
let previouslyInside = false;
|
|
118
|
+
let firstInside = null;
|
|
119
|
+
for (let i = 0; i < steps; i++) {
|
|
120
|
+
const angle = (i / steps) * Math.PI * 2;
|
|
121
|
+
const inside = shape.distance(cx + radius * Math.cos(angle), cy + radius * Math.sin(angle)) < 0;
|
|
122
|
+
if (firstInside === null) {
|
|
123
|
+
firstInside = inside;
|
|
124
|
+
}
|
|
125
|
+
else if (inside && !previouslyInside) {
|
|
126
|
+
arcs++;
|
|
127
|
+
}
|
|
128
|
+
previouslyInside = inside;
|
|
129
|
+
}
|
|
130
|
+
if (firstInside === true && previouslyInside) {
|
|
131
|
+
arcs++;
|
|
132
|
+
}
|
|
133
|
+
return arcs;
|
|
134
|
+
};
|
|
135
|
+
const coveredFraction = (shape, size) => {
|
|
136
|
+
let covered = 0;
|
|
137
|
+
for (let y = 0; y < size; y++) {
|
|
138
|
+
for (let x = 0; x < size; x++) {
|
|
139
|
+
covered += coverageFromDistance(shape.distance(x, y));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return covered / (size * size);
|
|
143
|
+
};
|
|
144
|
+
describe("the silhouette, swept over seeds", () => {
|
|
145
|
+
const SIZE = 64;
|
|
146
|
+
it("always has protruding tabs", () => {
|
|
147
|
+
const withoutTabs = [];
|
|
148
|
+
for (let i = 0; i < SEEDS; i++) {
|
|
149
|
+
const shape = createNotchShape(createPrng(seedAt(i)), SIZE);
|
|
150
|
+
if (protrusionArcs(shape, SIZE, 0.92) < 1) {
|
|
151
|
+
withoutTabs.push(i);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
expect(withoutTabs).toEqual([]);
|
|
155
|
+
});
|
|
156
|
+
it("still varies per challenge", () => {
|
|
157
|
+
const signatures = new Set();
|
|
158
|
+
for (let i = 0; i < SEEDS; i++) {
|
|
159
|
+
const shape = createNotchShape(createPrng(seedAt(i)), SIZE);
|
|
160
|
+
signatures.add([
|
|
161
|
+
coveredFraction(shape, SIZE).toFixed(3),
|
|
162
|
+
protrusionArcs(shape, SIZE, 0.92),
|
|
163
|
+
protrusionArcs(shape, SIZE, 0.78),
|
|
164
|
+
].join(":"));
|
|
165
|
+
}
|
|
166
|
+
expect(signatures.size).toBeGreaterThan(SEEDS * 0.8);
|
|
167
|
+
});
|
|
168
|
+
it("stays inside its bounding box", () => {
|
|
169
|
+
for (let i = 0; i < 60; i++) {
|
|
170
|
+
const shape = createNotchShape(createPrng(seedAt(i)), SIZE);
|
|
171
|
+
for (let t = 0; t < SIZE; t++) {
|
|
172
|
+
for (const [x, y] of [
|
|
173
|
+
[t, 0],
|
|
174
|
+
[t, SIZE - 1],
|
|
175
|
+
[0, t],
|
|
176
|
+
[SIZE - 1, t],
|
|
177
|
+
]) {
|
|
178
|
+
expect(shape.distance(x, y), `seed ${i} at (${x},${y})`).toBeGreaterThan(0);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
it("covers a usable fraction of its box", () => {
|
|
184
|
+
for (let i = 0; i < SEEDS; i++) {
|
|
185
|
+
const covered = coveredFraction(createNotchShape(createPrng(seedAt(i)), SIZE), SIZE);
|
|
186
|
+
expect(covered, `seed ${i}`).toBeGreaterThan(0.18);
|
|
187
|
+
expect(covered, `seed ${i}`).toBeLessThan(0.6);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
it("varies how much of the box it fills", () => {
|
|
191
|
+
const buckets = new Set();
|
|
192
|
+
for (let i = 0; i < SEEDS; i++) {
|
|
193
|
+
buckets.add(coveredFraction(createNotchShape(createPrng(seedAt(i)), SIZE), SIZE).toFixed(2));
|
|
194
|
+
}
|
|
195
|
+
expect(buckets.size).toBeGreaterThan(10);
|
|
196
|
+
});
|
|
197
|
+
it("is reproducible from its seed", () => {
|
|
198
|
+
const a = createNotchShape(createPrng(seedAt(3)), SIZE);
|
|
199
|
+
const b = createNotchShape(createPrng(seedAt(3)), SIZE);
|
|
200
|
+
for (let t = 0; t < SIZE; t += 3) {
|
|
201
|
+
expect(a.distance(t, t)).toBe(b.distance(t, t));
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
const rimAndCore = (piece, shape) => {
|
|
206
|
+
const band = pieceRimGeometry(piece.width);
|
|
207
|
+
let rimTotal = 0;
|
|
208
|
+
let rimCount = 0;
|
|
209
|
+
let coreTotal = 0;
|
|
210
|
+
let coreCount = 0;
|
|
211
|
+
for (let y = 0; y < piece.height; y++) {
|
|
212
|
+
for (let x = 0; x < piece.width; x++) {
|
|
213
|
+
const o = (y * piece.width + x) * 4;
|
|
214
|
+
if ((piece.data[o + 3] ?? 0) < 250)
|
|
215
|
+
continue;
|
|
216
|
+
const luma = relativeLuminance({
|
|
217
|
+
r: piece.data[o] ?? 0,
|
|
218
|
+
g: piece.data[o + 1] ?? 0,
|
|
219
|
+
b: piece.data[o + 2] ?? 0,
|
|
220
|
+
});
|
|
221
|
+
const d = shape.distance(x, y);
|
|
222
|
+
if (d > -band.plateau && d < -0.5) {
|
|
223
|
+
rimTotal += luma;
|
|
224
|
+
rimCount++;
|
|
225
|
+
}
|
|
226
|
+
else if (d < -band.width - 2) {
|
|
227
|
+
coreTotal += luma;
|
|
228
|
+
coreCount++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
rim: rimCount === 0 ? 0 : rimTotal / rimCount,
|
|
234
|
+
core: coreCount === 0 ? 0 : coreTotal / coreCount,
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
describe("the piece's separation cue, swept over seeds", () => {
|
|
238
|
+
const SIZE = 64;
|
|
239
|
+
it("always separates the rim from the body by a visible luminance step", () => {
|
|
240
|
+
const failures = [];
|
|
241
|
+
for (let i = 0; i < 120; i++) {
|
|
242
|
+
const prng = createPrng(seedAt(i));
|
|
243
|
+
const background = generateBackground(prng, 240, 160);
|
|
244
|
+
const shape = createNotchShape(prng, SIZE);
|
|
245
|
+
const { piece } = cutNotch(prng, background, shape, SIZE, { targetX: 120, targetY: 80 }, 0.55);
|
|
246
|
+
const { rim, core } = rimAndCore(piece, shape);
|
|
247
|
+
const ratio = (Math.max(rim, core) + 0.05) / (Math.min(rim, core) + 0.05);
|
|
248
|
+
if (ratio < 1.25) {
|
|
249
|
+
failures.push(`seed ${i}: ${ratio.toFixed(3)}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
expect(failures).toEqual([]);
|
|
253
|
+
});
|
|
254
|
+
it("steps away from the piece rather than in a fixed direction", () => {
|
|
255
|
+
let lighterRim = 0;
|
|
256
|
+
let darkerRim = 0;
|
|
257
|
+
for (let i = 0; i < 120; i++) {
|
|
258
|
+
const prng = createPrng(seedAt(i + 5_000));
|
|
259
|
+
const background = generateBackground(prng, 240, 160);
|
|
260
|
+
const shape = createNotchShape(prng, SIZE);
|
|
261
|
+
const { piece } = cutNotch(prng, background, shape, SIZE, { targetX: 120, targetY: 80 }, 0.55);
|
|
262
|
+
const { rim, core } = rimAndCore(piece, shape);
|
|
263
|
+
if (rim > core) {
|
|
264
|
+
lighterRim++;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
darkerRim++;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
expect(lighterRim).toBeGreaterThan(0);
|
|
271
|
+
expect(darkerRim).toBeGreaterThan(0);
|
|
272
|
+
});
|
|
273
|
+
it("survives being reduced to greyscale", () => {
|
|
274
|
+
for (let i = 0; i < 40; i++) {
|
|
275
|
+
const prng = createPrng(seedAt(i + 9_000));
|
|
276
|
+
const background = generateBackground(prng, 240, 160);
|
|
277
|
+
const shape = createNotchShape(prng, SIZE);
|
|
278
|
+
const { piece } = cutNotch(prng, background, shape, SIZE, { targetX: 120, targetY: 80 }, 0.55);
|
|
279
|
+
const grey = {
|
|
280
|
+
width: piece.width,
|
|
281
|
+
height: piece.height,
|
|
282
|
+
data: Buffer.from(piece.data),
|
|
283
|
+
};
|
|
284
|
+
for (let o = 0; o < grey.data.length; o += 4) {
|
|
285
|
+
const v = Math.round(0.2126 * (grey.data[o] ?? 0) +
|
|
286
|
+
0.7152 * (grey.data[o + 1] ?? 0) +
|
|
287
|
+
0.0722 * (grey.data[o + 2] ?? 0));
|
|
288
|
+
grey.data[o] = v;
|
|
289
|
+
grey.data[o + 1] = v;
|
|
290
|
+
grey.data[o + 2] = v;
|
|
291
|
+
}
|
|
292
|
+
const colour = rimAndCore(piece, shape);
|
|
293
|
+
const mono = rimAndCore(grey, shape);
|
|
294
|
+
const colourRatio = (Math.max(colour.rim, colour.core) + 0.05) /
|
|
295
|
+
(Math.min(colour.rim, colour.core) + 0.05);
|
|
296
|
+
const monoRatio = (Math.max(mono.rim, mono.core) + 0.05) /
|
|
297
|
+
(Math.min(mono.rim, mono.core) + 0.05);
|
|
298
|
+
expect(monoRatio, `seed ${i}`).toBeGreaterThan(1.2);
|
|
299
|
+
expect(Math.abs(monoRatio - colourRatio), `seed ${i}`).toBeLessThan(0.2);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
it("keeps the cue for every dichromacy", () => {
|
|
303
|
+
for (let i = 0; i < 40; i++) {
|
|
304
|
+
const prng = createPrng(seedAt(i + 11_000));
|
|
305
|
+
const background = generateBackground(prng, 240, 160);
|
|
306
|
+
const shape = createNotchShape(prng, SIZE);
|
|
307
|
+
const { piece } = cutNotch(prng, background, shape, SIZE, { targetX: 120, targetY: 80 }, 0.55);
|
|
308
|
+
const { rim, core } = rimAndCore(piece, shape);
|
|
309
|
+
const toGrey = (luminance) => {
|
|
310
|
+
const v = Math.round(255 * luminance ** (1 / 2.2));
|
|
311
|
+
return { r: v, g: v, b: v };
|
|
312
|
+
};
|
|
313
|
+
for (const vision of VISION_TYPES) {
|
|
314
|
+
const ratio = contrastRatio(simulateVision(toGrey(rim), vision), simulateVision(toGrey(core), vision));
|
|
315
|
+
expect(ratio, `seed ${i}, ${vision}`).toBeGreaterThan(1.2);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
//# sourceMappingURL=pieceReadability.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pieceReadability.unit.test.js","sourceRoot":"","sources":["../../src/tests/pieceReadability.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderReplay.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/renderReplay.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { DEFAULT_GEOMETRY, DEFAULT_RENDER_SETTINGS, createBackground, renderPuzzle, } from "../index.js";
|
|
3
|
+
const BACKGROUND_SEED = Buffer.from("00112233445566778899aabbccddeeff", "hex");
|
|
4
|
+
const RENDER_SEED = Buffer.from("ffeeddccbbaa99887766554433221100", "hex");
|
|
5
|
+
const PLACEMENT = { targetX: 191, targetY: 77 };
|
|
6
|
+
const render = (overrides) => {
|
|
7
|
+
const geometry = overrides.geometry ?? DEFAULT_GEOMETRY;
|
|
8
|
+
return renderPuzzle(createBackground(geometry, overrides.backgroundSeed ?? BACKGROUND_SEED), overrides.placement ?? PLACEMENT, geometry, overrides.settings ?? DEFAULT_RENDER_SETTINGS, overrides.renderSeed ?? RENDER_SEED);
|
|
9
|
+
};
|
|
10
|
+
describe("render replay from the stored record", () => {
|
|
11
|
+
it("reproduces the same imagery from the same stored inputs", async () => {
|
|
12
|
+
const served = await render({});
|
|
13
|
+
const replayed = await render({});
|
|
14
|
+
expect(replayed.background.equals(served.background)).toBe(true);
|
|
15
|
+
expect(replayed.piece.equals(served.piece)).toBe(true);
|
|
16
|
+
expect(replayed.pieceSize).toBe(served.pieceSize);
|
|
17
|
+
});
|
|
18
|
+
it("returns the render seed it was given, so the record can store it", async () => {
|
|
19
|
+
const served = await render({});
|
|
20
|
+
expect(served.seed.equals(RENDER_SEED)).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
it("mints a fresh render seed when none is supplied", async () => {
|
|
23
|
+
const first = await renderPuzzle(createBackground(DEFAULT_GEOMETRY, BACKGROUND_SEED), PLACEMENT);
|
|
24
|
+
const second = await renderPuzzle(createBackground(DEFAULT_GEOMETRY, BACKGROUND_SEED), PLACEMENT);
|
|
25
|
+
expect(first.seed.equals(second.seed)).toBe(false);
|
|
26
|
+
expect(first.background.equals(second.background)).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
it("changes the imagery when only the background seed differs", async () => {
|
|
29
|
+
const served = await render({});
|
|
30
|
+
const other = await render({
|
|
31
|
+
backgroundSeed: Buffer.from("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f", "hex"),
|
|
32
|
+
});
|
|
33
|
+
expect(other.background.equals(served.background)).toBe(false);
|
|
34
|
+
});
|
|
35
|
+
it("changes the imagery when only the render seed differs", async () => {
|
|
36
|
+
const served = await render({});
|
|
37
|
+
const other = await render({
|
|
38
|
+
renderSeed: Buffer.from("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f", "hex"),
|
|
39
|
+
});
|
|
40
|
+
expect(other.background.equals(served.background)).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
it("changes the imagery when only the piece size differs", async () => {
|
|
43
|
+
const served = await render({});
|
|
44
|
+
const other = await render({
|
|
45
|
+
geometry: { ...DEFAULT_GEOMETRY, pieceSize: 61 },
|
|
46
|
+
});
|
|
47
|
+
expect(other.pieceSize).not.toBe(served.pieceSize);
|
|
48
|
+
expect(other.piece.equals(served.piece)).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it("changes the imagery when only the notch placement differs", async () => {
|
|
51
|
+
const served = await render({});
|
|
52
|
+
const other = await render({
|
|
53
|
+
placement: {
|
|
54
|
+
targetX: PLACEMENT.targetX + 30,
|
|
55
|
+
targetY: PLACEMENT.targetY,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
expect(other.background.equals(served.background)).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
const settingCases = [
|
|
61
|
+
{ name: "decoyCount", value: DEFAULT_RENDER_SETTINGS.decoyCount + 3 },
|
|
62
|
+
{ name: "decoyEdgeDarkness", value: 90 },
|
|
63
|
+
{ name: "decoyBodyBrightness", value: 40 },
|
|
64
|
+
{ name: "holeDarken", value: 0.2 },
|
|
65
|
+
{ name: "decoyHoleDarken", value: 0.95 },
|
|
66
|
+
];
|
|
67
|
+
for (const { name, value } of settingCases) {
|
|
68
|
+
it(`changes the imagery when only ${name} differs`, async () => {
|
|
69
|
+
const served = await render({});
|
|
70
|
+
const other = await render({
|
|
71
|
+
settings: { ...DEFAULT_RENDER_SETTINGS, [name]: value },
|
|
72
|
+
});
|
|
73
|
+
expect(other.background.equals(served.background)).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=renderReplay.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderReplay.unit.test.js","sourceRoot":"","sources":["../../src/tests/renderReplay.unit.test.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAE9B,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAE9B,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAMlB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAMf,SAAS,EAAE,MAAM,CAAC;IAOlB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,MAAM,WAAW,oBAAoB;IAOpC,UAAU,EAAE,MAAM,CAAC;IAMnB,iBAAiB,EAAE,MAAM,CAAC;IAM1B,mBAAmB,EAAE,MAAM,CAAC;IAM5B,UAAU,EAAE,MAAM,CAAC;IAOnB,eAAe,EAAE,MAAM,CAAC;CACxB"}
|