- index.html: реальная персистентность (loadSave/applySave/persist/freshSave, SAVE_VERSION=1, форма сейва v1, base64-поле, миграции), резюм незавершённой партии после reload, авто-пауза при visibilitychange без перезаписи сейва; полировка: modeForState вместо мёртвого mode, валидация FIELD_SIZES, setFieldSize игнорирует чужие значения, согласованный дефолт fieldH, сброс hoverCell на pointerup/cancel, актуализирован комментарий mode. - tests/test.js: расширена 65 -> 123 проверок (резюм R1/R2/R3, миграция/битый сейв, настройки, resize, клики DOM-кнопок, applyIntent, паритет сохранён). - tools/old-ref/: harness паритета перенесён в репозиторий (old_ref.cpp, reference*.json, генераторы, diff-our.js, ref-*.txt, ce1.txt, README). - AGENTS.md/README.md: форма сейва, миграции, резюм, harness, структура. - .gitignore: секрет .gitea_token и бинарники/логи harness. - Прогоны: check: OK; npm test — ИТОГ 123/123; паритет clean 273/273. - Ревью-гейт 4 (Oracle): PASS; minor/mit закрыты.
37 lines
1.8 KiB
JavaScript
37 lines
1.8 KiB
JavaScript
'use strict';
|
|
/* Формирует компактную фикстуру паритета для суиты:
|
|
<repo>/tests/parity-fixture.json
|
|
Источники: reference.json (proto) и reference-clean.json (clean).
|
|
Кейсы: классика (clean==proto) + плотные смешанные двухцветные + минимальный
|
|
контрпример бага parent[] (cc_3x3_stale).
|
|
Запуск: node gen-fixture.js
|
|
*/
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const DIR = __dirname;
|
|
const OUT = path.join(DIR, '..', '..', 'tests', 'parity-fixture.json');
|
|
|
|
const proto = JSON.parse(fs.readFileSync(path.join(DIR, 'reference.json'), 'utf8'));
|
|
const clean = JSON.parse(fs.readFileSync(path.join(DIR, 'reference-clean.json'), 'utf8'));
|
|
const cleanByName = new Map(clean.map(c => [c.name, c]));
|
|
|
|
const SELECT = [
|
|
'block2x2_5x5', // классика: неподвижный блок
|
|
'blinker_h_5x5', // классика: блинкер
|
|
'glider_8x8', // классика: глайдер
|
|
'rnd_6x6_s1', // плотное смешанное двухцветное
|
|
'rnd_8x8_s2', // плотное смешанное двухцветное (много расхождений proto)
|
|
'cc_3x3_stale', // минимальный контрпример бага parent[]
|
|
];
|
|
|
|
const out = SELECT.map(name => {
|
|
const p = proto.find(c => c.name === name);
|
|
const cl = cleanByName.get(name);
|
|
if (!p || !cl) throw new Error('нет кейса ' + name);
|
|
return { name, w: p.w, h: p.h, clean: cl.steps, proto: p.steps };
|
|
});
|
|
|
|
fs.writeFileSync(OUT, JSON.stringify(out, null, 1) + '\n');
|
|
console.log('фикстура записана:', OUT, '| кейсов:', out.length,
|
|
'| размер:', fs.statSync(OUT).size, 'байт');
|