@@ -72,6 +72,7 @@ const declareTabs = [
7272 { name: ' Конвенция' , slot: ' declare-convention' , icon: ' testo-class' },
7373 { name: ' Inline' , slot: ' declare-inline' , icon: ' class' },
7474]
75+
7576</script >
7677
7778<div style =" max-width : 700px ; margin : 48px auto 0 ;" >
@@ -94,8 +95,8 @@ Testo находится в фазе активной разработки и п
9495
9596Функции проверок разбиты на семантические группы:
9697
97- - Фасад ` Assert:: ` — утверждения, выполняются сразу
98- - Фасад ` Expect:: ` — ожидания, откладываются до завершения теста
98+ - Фасад < class >\Testo\ Assert</ class > — утверждения, выполняются сразу
99+ - Фасад < class >\Testo\ Expect</ class > — ожидания, откладываются до завершения теста
99100
100101Пайповый синтаксис с группировкой по типу делает код лаконичным и типобезопасным.
101102
@@ -186,7 +187,7 @@ public function testInvalidInput(): void
186187Пишите тесты так, как удобно вам.
187188
188189- Тестами могут быть классы, функции или даже атрибуты прямо в продуктовом коде (Inline Tests).
189- - Классам не нужно наследование от базового тестового класса. Код остаётся чистым.
190+ - Классы не нужно наследовать от базового тестового класса. Код остаётся чистым.
190191- Обнаружение тестов по соглашениям об именовании или по явным атрибутам.
191192
192193</div >
@@ -299,6 +300,70 @@ final class Calculator
299300</div >
300301</div >
301302
303+ <div class =" home-feature " >
304+
305+ ## Бенчмарки одним атрибутом
306+
307+ <HomeBench code-tab =" Bench.php " result-tab =" Результат " >
308+
309+ <template #description>
310+
311+ Добавьте атрибут <attr >\Testo\Bench</attr > к методу, и Testo покажет, какая из реализаций работает быстрее. Со статистикой, фильтрацией выбросов и рекомендациями по стабильности.
312+
313+ </template >
314+
315+ <template #left>
316+
317+ ``` php
318+ // Эталонный метод с атрибутом #[Bench]
319+ #[Bench(
320+ callables: ['sumInCycle' => [self::class, 'sumInCycle']],
321+ arguments: [1, 5_000],
322+ )]
323+ public static function sumInArray(int $a, int $b): int
324+ {
325+ return \array_sum(\range($a, $b));
326+ }
327+ ```
328+
329+ </template >
330+
331+ <template #right>
332+
333+ ``` php
334+ // Альтернативная реализация
335+ public static function sumInCycle(int $a, int $b): int
336+ {
337+ $result = 0;
338+ for ($i = $a; $i <= $b; ++$i) {
339+ $result += $i;
340+ }
341+ return $result;
342+ }
343+ ```
344+
345+ </template >
346+
347+ <template #result>
348+
349+ ```
350+ Results for sumInArray:
351+ +--------------------------+------------------------------------------------+---------+
352+ | BENCHMARK SETUP | TIME RESULTS | SUMMARY |
353+ | Name | Iters | Calls | Mean | Median | RStDev | Place |
354+ +----------+-------+-------+-------------------+-------------------+--------+---------+
355+ | current | 10 | 1000 | 11.65µs | 11.58µs | ±1.55% | 1st |
356+ | in cycle | 10 | 1000 | 43.80µs (+275.8%) | 44.17µs (+281.5%) | ±1.67% | 2nd |
357+ +----------+-------+-------+-------------------+-------------------+--------+---------+
358+
359+ ```
360+
361+ </template >
362+
363+ </HomeBench >
364+
365+ </div >
366+
302367<div class =" sponsors-section " >
303368 <h2 class =" sponsors-title " >Спонсоры</h2 >
304369 <div class =" sponsors-grid " >
0 commit comments