'use strict'; /* Формирует компактную фикстуру паритета для суиты: /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, 'байт');