107 lines
7.4 KiB
Plaintext
107 lines
7.4 KiB
Plaintext
|
||
> numberswipe-main@1.0.0 check
|
||
> npm run build && npm test && npm run smoke
|
||
|
||
|
||
> numberswipe-main@1.0.0 build
|
||
> node build.mjs
|
||
|
||
Built campaign-200-r2: 200 levels
|
||
|
||
> numberswipe-main@1.0.0 test
|
||
> node --test *.test.mjs
|
||
|
||
✔ 手机没有浏览器音频接口时,原生播放器仍能播放全部 36 步和六类反馈音 (4.2496ms)
|
||
✔ 关闭音效停止播放;再次开启会试听并保存偏好;后台中断停止所有播放器 (0.4588ms)
|
||
✔ 延迟通关音在静音或进入后台时取消,不在返回后突然播放 (58.1285ms)
|
||
✔ 音频错误可诊断,不再静默吞掉 (1.3962ms)
|
||
✔ 所有音频均为非静音 PCM;原版第13步比第1步高一个八度 (41.1368ms)
|
||
✔ 教学和组合规则用具体动作及奇偶例子解释,没有未解释的术语 (13.1034ms)
|
||
✔ 过关提示同步使用实际播放起点,非请求时间 (0.7765ms)
|
||
✔ 过关和弦收尾持续衰减,不在后半段重新起音 (2.9054ms)
|
||
✔ merged irregular outlines retain holes and never draw internal unit edges (68.7005ms)
|
||
✔ all 200 boards fit four screen budgets with stable safe anchors and real shared entrances (570.0971ms)
|
||
✔ guides through every irregular block stay inside its occupied shape (30.9901ms)
|
||
✔ visited, conflicting and hinted category cells retain their material identity (7.9789ms)
|
||
✔ five font subsets match their manifest and fit the package budget (3.2457ms)
|
||
✔ upstream adapter fails closed if the inspected render seams change (0.7175ms)
|
||
✔ procedural cushion pixels preserve holes and light the upper bevel without a border (15.739ms)
|
||
✔ visible glyph bounds are centered independently of font ascent and side bearings (1.4517ms)
|
||
✔ stage with zero depth casts alpha shadows without painting a solid backing (6.6306ms)
|
||
✔ native width-only TextMetrics still centers the rasterized glyph ink (2.1955ms)
|
||
✔ fixed channels remain anchored at their block centers after number enlargement (780.5029ms)
|
||
✔ checkpoint ribbons trigger on correct arrival only and never duplicate per frame (2.334ms)
|
||
✔ checkpoint pulse is small, centered in time and settles without looping (0.2499ms)
|
||
✔ event batches preserve every landing and sequence but commit only highest audio and haptic (3.9613ms)
|
||
✔ completion waits at most 120ms and ignores late audio callbacks (0.818ms)
|
||
✔ light haptics are limited, checkpoint replaces light, and completion adds only one delayed short pulse (0.7328ms)
|
||
✔ unsupported graded haptic falls back to one short pulse, never long vibration (0.5939ms)
|
||
✔ haptic disable, preview and lifecycle cancellation suppress delayed or expired work (0.5278ms)
|
||
✔ late failed haptic requests cannot revive old pulses and ungraded completion falls back once (0.359ms)
|
||
✔ rectangles, concave shapes and hexagons require geometric inward distance without treating internal seams as walls (1.3903ms)
|
||
✔ one high-speed native move records all intermediate cells and completion without duplicate final node (125.9551ms)
|
||
✔ legal but off-solution moves use public rules, while invalid clues only produce error (65.1831ms)
|
||
✔ drag near a previous-block boundary cannot undo; deeper entry can, and undo button remains immediate (47.9813ms)
|
||
✔ tutorial, redraw, hint and restored saved routes do not generate player feedback (71.153ms)
|
||
✔ pressure and rebound have bounded amplitude and duration (0.3831ms)
|
||
✔ interpolation cannot duplicate the same failed-cell event within one native movement (0.4001ms)
|
||
✔ nodes are driven by explicit events even when multiple arrive before rendering; at most two ribbons survive (24.6483ms)
|
||
✔ audio fast moves merge to latest pitch and completion stops the whole four-channel pool (1.6418ms)
|
||
✔ settings persist haptic preference independently and chapter cards always use three columns (67.065ms)
|
||
✔ original audio is preserved and high pitches lose energy rather than growing sharper (9.7041ms)
|
||
✔ empty, partial and wrong routes reveal the first incomplete full segment (2.5105ms)
|
||
✔ completion hides the hint; repeat clicks cannot skip; undo and restart return to earlier segments (0.6003ms)
|
||
✔ all 200 levels reveal consecutive segments without changing the player path (1327.0448ms)
|
||
✔ hint draws skip player edges and mask visited cells on their own layer; compositing is restored (0.7515ms)
|
||
✔ parity is a segment anchor; colour is not; flow moves continuously across cells (0.3026ms)
|
||
✔ coral teaching ribbon preserves visited masks and offers direction in reduced motion (1.3771ms)
|
||
✔ hint rounds shared guide junctions and keeps separate runs disconnected (0.3138ms)
|
||
✔ 实际教学关动画:basic (4.3763ms)
|
||
✔ 实际教学关动画:walls (0.859ms)
|
||
✔ 实际教学关动画:straight (2.2734ms)
|
||
✔ 实际教学关动画:vertical (3.0943ms)
|
||
✔ 实际教学关动画:corner (0.9779ms)
|
||
✔ 实际教学关动画:colour (0.7234ms)
|
||
✔ 实际教学关动画:parity (0.6127ms)
|
||
✔ 实际教学关动画:rhythm-door (0.9466ms)
|
||
✔ 实际教学关动画:hex (0.8683ms)
|
||
✔ 实际教学关动画:unknown-start (2.3708ms)
|
||
✔ 200关的组合规则均能找到对应真实教学关 (99.1989ms)
|
||
✔ 教学减速,结束停留1秒后自动循环 (3.14ms)
|
||
✔ music loops independently, persists mute and cancels in background (3.5682ms)
|
||
✔ old arrows retain distance, rush to endpoint and fresh arrows move at base speed (1.237ms)
|
||
✔ settings have exactly three independent preferences, and hint has its own cue (126.7275ms)
|
||
✔ actual fixed numeric node uses checkpoint pitch, final cell uses complete chord (101.1832ms)
|
||
✔ two original music loops are quiet, nonempty and have a smooth loop seam (1.4324ms)
|
||
✔ warm gameplay ambient is 32 seconds, softly leveled and free from percussive envelope jumps (12.8053ms)
|
||
✔ gameplay ambient uses lower scene volume and keeps independent mute and resume behavior (0.3121ms)
|
||
✔ all 200 levels: valid numeric, parity and direction arrivals play checkpoint pitch; final arrival only completes (25674.1428ms)
|
||
✔ drag back and undo button both vibrate lightly; disabling vibration suppresses both (48.3745ms)
|
||
✔ haptic cadence is approximately 15 percent denser without changing light or medium grades (1.2116ms)
|
||
✔ regular and special scale settle at 90ms with a larger special peak (0.221ms)
|
||
✔ rendered undo target and nonnumeric checkpoint animate immediately without adding ribbons (5.8198ms)
|
||
✔ quick undo cancels removed node rebound, including last-step removal (2.0522ms)
|
||
✔ first launch goes directly to gameplay (84.5281ms)
|
||
✔ resume unfinished route after exit from gameplay (109.8065ms)
|
||
✔ resume unfinished route after exit from selection (100.4282ms)
|
||
✔ completed level resumes next unfinished, including leaving from cleared screen (67.2269ms)
|
||
✔ replaying a cleared level does not replace the unfinished save (74.6262ms)
|
||
✔ legacy saves, malformed data and full completion have valid startup targets (50.4716ms)
|
||
✔ selection pages expose fifteen cards and fit phone safe areas (225.6503ms)
|
||
✔ hint-only frames reuse static UI, and player input invalidates it (40.9483ms)
|
||
✔ hint curves are cached and distance lookup is stable at boundaries (1.2217ms)
|
||
✔ new-mechanic lesson reuses the board while the continuous cursor advances (38.2212ms)
|
||
ℹ tests 80
|
||
ℹ suites 0
|
||
ℹ pass 80
|
||
ℹ fail 0
|
||
ℹ cancelled 0
|
||
ℹ skipped 0
|
||
ℹ todo 0
|
||
ℹ duration_ms 25971.4086
|
||
|
||
> numberswipe-main@1.0.0 smoke
|
||
> node smoke.mjs
|
||
|
||
PASS 200/200: r2源文件哈希一致、唯一解、微信发布包触摸通关、撤销/重开/指路、存档/音效设置恢复、前后台切换。
|