feat(math6): полоса процента (Гл.2 §1) + фильтр множества (Гл.3 §1)
Math6Anim.barModel — полоса 0..100%, заполняется (easing) к проценту, синхронно %↔десятичная↔дробь; вшита в §2.1 на тот же ползунок, что и сетка 100. Math6Anim.setFilter — числа 1..12 по очереди проходят сквозь «фильтр свойства» (чётные/кратные 3/больше 6), подходящие падают в множество; кнопки смены свойства; вшита в §3.1. Теперь во ВСЕХ 6 главах есть canvas-анимации + stepPlayer везде. Headless-safe. Тесты math6: 20/20. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -203,6 +203,16 @@ test('анимации: canvas-демо монтируются (headless-safe)',
|
||||
r5.doc.defaultView.goTo('p1'); await wait(100);
|
||||
assert.ok(r5.doc.querySelector('#p1-game canvas'), 'canvas «координатный тир» §5.1');
|
||||
assert.deepEqual(r5.errors, [], 'ch5 без ошибок: ' + r5.errors.join(' | '));
|
||||
// Глава 2 §1 — полоса процента
|
||||
const r2 = await loadDom('math_6_ch2.html');
|
||||
r2.doc.defaultView.goTo('p1'); await wait(100);
|
||||
assert.ok(r2.doc.querySelector('#p1-bar canvas'), 'canvas «полоса процента» §2.1');
|
||||
assert.deepEqual(r2.errors, [], 'ch2 без ошибок: ' + r2.errors.join(' | '));
|
||||
// Глава 3 §1 — фильтр множества
|
||||
const r3 = await loadDom('math_6_ch3.html');
|
||||
r3.doc.defaultView.goTo('p1'); await wait(100);
|
||||
assert.ok(r3.doc.querySelector('#p1-filterfig canvas'), 'canvas «фильтр множества» §3.1');
|
||||
assert.deepEqual(r3.errors, [], 'ch3 без ошибок: ' + r3.errors.join(' | '));
|
||||
});
|
||||
|
||||
test('stepPlayer: «Разбор по шагам» становится интерактивным плеером', async () => {
|
||||
|
||||
Reference in New Issue
Block a user