An open API service indexing awesome lists of open source software.

https://github.com/stivo182/benchmarkonescript

Бенчмаркинг на OneScript
https://github.com/stivo182/benchmarkonescript

benchmark benchmarking bsl onescript oscript tests

Last synced: 20 days ago
JSON representation

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

Awesome Lists containing this project

README

          

# BenchmarkOneScript

[![Release](https://img.shields.io/github/release/Stivo182/BenchmarkOneScript.svg)](https://github.com/Stivo182/BenchmarkOneScript/releases)
[![Тестирование](https://github.com/Stivo182/BenchmarkOneScript/actions/workflows/test.yml/badge.svg)](https://github.com/Stivo182/BenchmarkOneScript/actions/workflows/test.yml)
[![Статус порога качества](https://sonar.openbsl.ru/api/project_badges/measure?project=benchmark&metric=alert_status&token=sqb_3054e7cdc0478fa1fc9ec12e319b76086791667e)](https://sonar.openbsl.ru/dashboard?id=benchmark)
[![Покрытие](https://sonar.openbsl.ru/api/project_badges/measure?project=benchmark&metric=coverage&token=sqb_3054e7cdc0478fa1fc9ec12e319b76086791667e)](https://sonar.openbsl.ru/dashboard?id=benchmark)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)


Быстрый старт
·
Документация
·
Примеры

Библиотека для измерения производительности кода на OneScript, вдохновлённая [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet/), с поддержкой параметризации, мониторинга памяти и гибкой настройки тестов.

## Возможности

- **Гибкая настройка:** конфигурация тестов через аннотации, программный код и CLI.
- **Параметризованные тесты:** запуск одних и тех же тестов с разными входными данными.
- **Мониторинг памяти:** отслеживание аллокации памяти во время выполнения.
- **Мультиверсионное сравнение:** запуск бенчмарков на указанных версиях исполняющей среды OneScript с консолидацией результатов.
- **Метрики:** время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили.
- **Экспорт результатов:** сохранение результатов выполнения бенчмарков в Markdown, JSON, HTML.

## Быстрый старт

## 1. Установка

```bash
opm install benchmark
```

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

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

```bsl
// СборкиСтрок.os

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

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

&ПередКаждым
Процедура ПодготовитьДанные(Контекст) Экспорт

Элементы = Новый Массив();

Для к = 1 По Количество Цикл
Элементы.Добавить("Элемент" + к);
КонецЦикла;

КонецПроцедуры

&Бенчмарк
&Эталон
Процедура КонкатенацияВЦикле() Экспорт

Результат = "";

Для Каждого Элемент Из Элементы Цикл
Результат = Результат + Элемент;
КонецЦикла;

КонецПроцедуры

&Бенчмарк
Процедура ЧерезСтрСоединить() Экспорт

Результат = СтрСоединить(Элементы);

КонецПроцедуры
```

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

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

**CLI:**

```bash
benchos run СборкиСтрок.os
```

**API:**

```bsl
#Использовать benchmark

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

Более подробно про запуск бенчмарков можно почитать в [документации](docs/ЗапускБенчмарков.md).

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

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

```
// Сводка
BenchmarkOneScript v0.7.0, OneScript v2.0.1-rc.2+702, Microsoft Windows NT 10.0.20348.0 \
Intel Core i7-8700 CPU 3.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores

| Method | Количество | Baseline | Mean | StdErr | StdDev | Ratio | Op/s | Allocated |
|--------------------|-----------:|----------|-------------:|-------------:|-------------:|------:|----------:|-------------:|
| КонкатенацияВЦикле | 100 | Yes | 28.782 us | 819.33 ns | 3,173.3 ns | 1.00 | 34,744.1 | 92.524 KB |
| ЧерезСтрСоединить | 100 | No | 4.078 us | 53.84 ns | 208.5 ns | 0.14 | 245,203.4 | 2.672 KB |
| КонкатенацияВЦикле | 1,000 | Yes | 1,139.845 us | 30,999.38 ns | 120,060.1 ns | 1.00 | 877.3 | 9,623.388 KB |
| ЧерезСтрСоединить | 1,000 | No | 24.145 us | 633.03 ns | 2,451.7 ns | 0.02 | 41,416.1 | 20.250 KB |

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