feat(math6): Глава 1, волна 2 — §4–§6 (сложение/вычитание, сдвиг запятой, умножение)

§4 столбик «запятая под запятой» + ловушка выравнивания;
§5 демонстратор сдвига запятой ×/÷10,100,1000 + тренажёр;
§6 подсчёт знаков после запятой (ползунки) + тренажёр умножения.
Целочисленные мантиссы вместо float. Шпаргалки/типсы/глоссарий. Тесты 10/10.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-02 14:58:44 +03:00
parent 653d3564df
commit dd0d63d25a
2 changed files with 228 additions and 4 deletions
+15
View File
@@ -89,6 +89,21 @@ test('ch1 Волна 1: интерактивы §1–§3 монтируются
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch1 Волна 2: интерактивы §4–§6 монтируются без ошибок', async () => {
const { doc, errors } = await loadDom('math_6_ch1.html');
const win = doc.defaultView;
win.goTo('p4'); await wait(80);
assert.ok(doc.querySelector('#p4-fig'), 'столбик §4');
assert.ok(doc.querySelectorAll('#p4-eopts').length === 1, 'варианты §4');
win.goTo('p5'); await wait(80);
assert.ok(doc.querySelector('#p5-iv1 [data-op]'), 'кнопки сдвига запятой §5');
assert.ok(doc.querySelector('#p5-out').textContent.length > 0 || doc.querySelector('#p5-out'), 'демонстратор §5');
win.goTo('p6'); await wait(80);
assert.ok(doc.querySelector('#p6-asl') && doc.querySelector('#p6-bsl'), 'ползунки множителей §6');
assert.ok(doc.querySelector('#p6-q'), 'тренажёр умножения §6');
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('навигация и прогресс: переход на § и отметка прочтения', async () => {
const { doc, errors } = await loadDom('math_6_ch1.html');
const win = doc.defaultView;