Skip to content

Бенчмаркинг на OneScript

License

Notifications You must be signed in to change notification settings

Stivo182/BenchmarkOneScript

Repository files navigation

BenchmarkOneScript

Release Покрытие


Библиотека для измерения производительности кода на OneScript, вдохновлённая BenchmarkDotNet, с поддержкой параметризации, мониторинга памяти и гибкой настройки тестов.

Возможности

  • Гибкая настройка: конфигурация тестов через аннотации или программный код.
  • Параметризованные тесты: запуск одних и тех же тестов с разными входными данными.
  • Мониторинг памяти: отслеживание аллокации памяти во время выполнения.
  • Метрики: время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили.
  • Отчеты в Markdown: автоматическая генерация таблицы с результатами.

🚀 Быстрый старт

1. Установка

opm install benchmark

2. Создание бенчмарка

Создайте класс с методами, помеченными аннотацией &Бенчмарк, где каждый метод реализует тестируемую логику. В следующем примере мы сравниваем алгоритмы конкатенации строк через оператор + и метод СтрСоединить:

// КонкатенацияСтрок.os

&Параметры(100, 1000)
Перем Количество Экспорт;
Перем Подстрока;

&МониторингПамяти
Процедура ПриСозданииОбъекта()
	Подстрока = "Просто текст";
КонецПроцедуры

&Бенчмарк
&Эталон
Процедура ОператорСложения() Экспорт
	Текст = "";
	Для НомерПодстроки = 1 По Количество Цикл
		Текст = Текст + Подстрока;
	КонецЦикла;
КонецПроцедуры

&Бенчмарк
Процедура МассивПодстрок() Экспорт
	МассивПодстрок = Новый Массив();
	Для НомерПодстроки = 1 По Количество Цикл
		МассивПодстрок.Добавить(Подстрока);
	КонецЦикла;

	Текст = СтрСоединить(МассивПодстрок);
КонецПроцедуры

3. Запуск бенчмарков

Запустите бенчмарки одним из следующих способов:

CLI:

benchos run [FILE]

FILE - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему

API:

#Использовать benchmark
#Использовать "."

Результат = Бенчмаркинг.Запустить(Тип("КонкатенацияСтрок"));

4. Просмотр результатов

После завершения тестов в консоли будет отображена подробная сводная таблица, оформленная в формате Markdown:

BenchmarkOneScript v0.1.0, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \
Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores

| Method           | Количество | Baseline |       Mean |      StdErr |   StdDev | Ratio |     Median |     Op/s |   Allocated |
|------------------|-----------:|----------|-----------:|------------:|---------:|------:|-----------:|---------:|------------:|
| МассивПодстрок   |        100 | false    |   79.07 us |  1,546.5 ns | 8.470 us | 1.768 |   75.92 us | 12,647.5 |    17.77 KB |
| ОператорСложения |        100 | true     |   44.76 us |    277.0 ns | 1.517 us |     1 |   44.28 us | 22,339.9 |    126.5 KB |
| МассивПодстрок   |      1,000 | false    |   731.8 us | 16,281.8 ns | 89.18 us | 0.564 |   692.9 us |  1,366.4 |    165.4 KB |
| ОператорСложения |      1,000 | true     | 1,303.4 us | 16,174.6 ns | 88.59 us |     1 | 1,260.5 us |    767.2 | 11,809.0 KB |

// Легенда
Количество : Значение параметра 'Количество'
Mean       : Арифметическое среднее всех измерений
StdErr     : Стандартная ошибка всех измерений
StdDev     : Стандартное отклонение всех измерений
Ratio      : Среднее коэффициентов отношений ([Mean] / [Baseline Mean])
Median     : Значение, разделяющее упорядоченные измерения на две равные части
Op/s       : Операций в секунду
Allocated  : Выделяемая память на одну операцию
1 us       : 1 Микросекунда
1 ns       : 1 Наносекунда