feat(math6): Глава 2 — Проценты и пропорции (§1–§9 + финал)

§1 процент наглядно (сетка 100) + конвертер %↔дробь↔десятичная;
§2 три типа задач (классификатор + тренажёр % от числа);
§3 пропорция (найди член крест-накрест + проверка свойства);
§4 прямая/обратная зависимость (классификатор + таблица);
§5 решение пропорцией (прямые и обратные задачи);
§6 масштаб (карта↔местность); §7 круговые диаграммы (Math6.pie +
%↔градусы); §9 прикладной; финал — 5 боссов. Тесты math6: 15/15.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-02 19:58:48 +03:00
parent c5a7803e34
commit a7835659d5
3 changed files with 545 additions and 0 deletions
+17
View File
@@ -68,6 +68,23 @@ for (const ch of CHAPTERS) {
});
}
test('ch2: проценты и пропорции — интерактивы + финал', async () => {
const { doc, errors } = await loadDom('math_6_ch2.html');
const win = doc.defaultView;
assert.ok(doc.querySelector('#p1-fig svg rect') && doc.querySelector('#p1-q'), 'сетка 100 и конвертер §1');
win.goTo('p2'); await wait(80);
assert.ok(doc.querySelectorAll('#p2-iv1 [data-t]').length === 3 && doc.querySelector('#p2-cq'), 'типы задач §2');
win.goTo('p3'); await wait(80);
assert.ok(doc.querySelector('#p3-q') && doc.querySelectorAll('#p3-iv2 [data-v]').length === 2, 'пропорция §3');
win.goTo('p7'); await wait(80);
assert.ok(doc.querySelector('#p7-fig svg') && doc.querySelector('#p7-pick [data-k]'), 'круговая диаграмма §7');
win.goTo('final'); await wait(80);
assert.ok(doc.querySelector('#fin-go'), 'арена боссов §2');
win.bumpProgress('final', 100); await wait(20);
assert.ok(win.M6STATE.achievements.has('ch2_done'), 'достижение «Глава 2 пройдена»');
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch5: координатная плоскость — интерактивы §1–§3 + финал', async () => {
const { doc, errors } = await loadDom('math_6_ch5.html');
const win = doc.defaultView;