feat(math6): Глава 3 — Множество (§1–§5 + финал)

§1 множество/элементы/∅ (∈ или ∉ + счёт элементов);
§2 способы задания (свойство→множество + проверка по свойству);
§3 операции ∩/∪ (наглядно через Math6.venn + счёт результата);
§4 круги Эйлера (задача с числами в областях + формула |A∪B|=|A|+|B|−|A∩B|);
финал — 5 боссов. Добавлен Math6.venn (две окружности с заливкой
областей и числами). Тесты math6: 16/16.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-02 20:03:03 +03:00
parent a7835659d5
commit 203807ada8
3 changed files with 335 additions and 0 deletions
+17
View File
@@ -85,6 +85,23 @@ test('ch2: проценты и пропорции — интерактивы +
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch3: множество — интерактивы + финал', async () => {
const { doc, errors } = await loadDom('math_6_ch3.html');
const win = doc.defaultView;
assert.ok(doc.querySelectorAll('#p1-iv1 [data-v]').length === 2 && doc.querySelector('#p1-cq'), '∈/∉ и счёт §1');
win.goTo('p2'); await wait(80);
assert.ok(doc.querySelector('#p2-opts') && doc.querySelectorAll('#p2-iv2 [data-v]').length === 2, 'способы задания §2');
win.goTo('p3'); await wait(80);
assert.ok(doc.querySelector('#p3-fig svg circle') && doc.querySelectorAll('#p3-iv1 [data-op]').length === 2, 'круги Эйлера/операции §3');
win.goTo('p4'); await wait(80);
assert.ok(doc.querySelector('#p4-fig svg') && doc.querySelector('#p4-fq'), 'задача с кругами Эйлера §4');
win.goTo('final'); await wait(80);
assert.ok(doc.querySelector('#fin-go'), 'арена боссов §3');
win.bumpProgress('final', 100); await wait(20);
assert.ok(win.M6STATE.achievements.has('ch3_done'), 'достижение «Глава 3 пройдена»');
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch5: координатная плоскость — интерактивы §1–§3 + финал', async () => {
const { doc, errors } = await loadDom('math_6_ch5.html');
const win = doc.defaultView;