From 46599709a52b30532fc13b1cef611a38c4044fba Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 22 Oct 2026 23:43:51 +0300 Subject: [PATCH 1/3] =?UTF-8?q?docs:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 06307078..12e2d787 100644 --- a/README.md +++ b/README.md @@ -15,16 +15,19 @@
-Библиотека для измерения производительности кода на OneScript, вдохновлённая [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet/), с поддержкой параметризации, мониторинга памяти и гибкой настройки тестов. +Библиотека для измерения и анализа производительности кода на OneScript, вдохновлённая [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet/). Позволяет сравнивать реализации алгоритмов и версии OneScript, выявлять различия в производительности и оценивать достоверность результатов. ## Возможности -- **Гибкая настройка:** конфигурация тестов через аннотации, программный код и CLI. -- **Параметризованные тесты:** запуск одних и тех же тестов с разными входными данными. -- **Мониторинг памяти:** отслеживание аллокации памяти во время выполнения. -- **Мультиверсионное сравнение:** запуск бенчмарков на указанных версиях исполняющей среды OneScript с консолидацией результатов. -- **Метрики:** время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили. -- **Экспорт результатов:** сохранение результатов выполнения бенчмарков в Markdown, JSON, HTML. +- **Гибкая настройка:** аннотации, программный API, CLI и JSON-конфигурация. +- **Параметризация:** выполнение бенчмарков с различными наборами входных данных. +- **Мониторинг памяти:** измерение выделяемой памяти на операцию. +- **Сравнение версий OneScript:** запуск бенчмарков в разных исполняющих средах с объединением результатов. +- **Подробная статистика:** время выполнения, пропускная способность, стандартное отклонение, квартили, процентили и доверительные интервалы. +- **Адаптивные измерения:** автоматическое завершение замеров при достижении заданной точности. +- **Анализ результатов:** обнаружение выбросов, статистическое сравнение с эталоном и диагностика качества измерений. +- **Контроль производительности:** программная проверка метрик и допустимых порогов. +- **Экспорт отчётов:** Markdown, JSON и HTML. ## Быстрый старт From 0d9eb34595fa420c76251ae9b11b8c6bc5a199ae Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Fri, 23 Oct 2026 11:06:47 +0300 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B0=D0=B4=D0=B0=D0=BF=D1=82=D0=B8=D0=B2?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=B8=D1=82=D0=B5=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Адаптивный режим включен по умолчанию для временных измерений. Значение IterationCount=0 означает, что число замеров определяется целевой погрешностью, а положительное значение задает точное число временных итераций и имеет приоритет над адаптивным режимом. Мониторинг памяти вынесен в одну отдельную итерацию на кейс после измерений времени. Обновлены валидация, JSON-объединение настроек, представление конфигурации, документация и тесты для обычного и холодного запуска. --- docs/CLI.md | 4 +- ...20\260\321\200\320\272\320\276\320\262.md" | 28 ++++++- ...21\202\320\260\321\206\320\270\320\270.md" | 9 -- ...20\260\320\274\321\217\321\202\320\270.md" | 2 +- ...20\276\320\262\320\260\320\274\320\270.md" | 10 +-- ...20\277\321\203\321\201\320\272\320\260.md" | 10 ++- ...21\200\320\260\321\206\320\270\320\271.os" | 4 +- ...20\260\321\200\320\272\320\276\320\262.os" | 62 +++++++++++--- ...20\260\321\200\320\272\320\276\320\262.os" | 5 +- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 25 +++--- ...20\260\321\200\320\272\320\276\320\262.os" | 4 +- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 21 +++-- ...20\260\321\200\320\272\320\276\320\262.os" | 28 +++++-- ...20\260\321\200\320\272\320\276\320\262.os" | 8 +- ...20\260\321\200\320\272\320\276\320\262.os" | 80 +++++++++++++++++- ...20\260\321\200\320\272\320\276\320\262.os" | 83 +++++++++++++++++-- ...20\277\321\203\321\201\320\272\320\260.os" | 4 +- 19 files changed, 305 insertions(+), 86 deletions(-) diff --git a/docs/CLI.md b/docs/CLI.md index a923dda9..8021c7a6 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -31,7 +31,7 @@ benchos run [OPTIONS] [FILE] | Опция | Описание | По умолчанию | Пример | | --- | --- | --- | --- | -| `--iterationCount` | Количество измерительных итераций | `15` | `--iterationCount 10` | +| `--iterationCount` | Точное количество временных измерительных итераций | `0` | `--iterationCount 10` | | `--maxRelativeError` | Включает адаптивные итерации и задаёт целевую относительную погрешность | `0.1`* | `--maxRelativeError 0.1` | | `--minAdaptiveIterationCount` | Включает адаптивные итерации и задаёт минимальное количество измерений | `15`* | `--minAdaptiveIterationCount 15` | | `--maxAdaptiveIterationCount` | Включает адаптивные итерации и задаёт максимальное количество измерений | `100`* | `--maxAdaptiveIterationCount 100` | @@ -64,7 +64,7 @@ benchos run [OPTIONS] [FILE] - Опции `--throughput` и `--coldstart` взаимно исключают друг друга. - Значение `--invocationCount 0` включает автоматический расчёт количества вызовов за итерацию. - Опции `--warmupCount`, `--invocationCount`, `--iterationTime` игнорируются при стратегии `--coldstart`. -- Любая из опций адаптивных итераций включает адаптивный режим; в нём ограничение задаёт `--maxAdaptiveIterationCount`, а не `--iterationCount`. +- При `--iterationCount` число временных измерений фиксировано; без него адаптивный режим действует по умолчанию, а его ограничение задаёт `--maxAdaptiveIterationCount`. - Любая из опций статистического сравнения включает его. - Опция `-e` / `--exporters` заменяет экспортеры из `--settings` и аннотаций бенчмарка. - Повторяйте `-p` / `--param`, чтобы передать несколько общих параметров. diff --git "a/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" "b/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" index fc58f150..a1cba2e7 100644 --- "a/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" +++ "b/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" @@ -19,7 +19,8 @@ | Свойство | Значение | | -- | -- | | Стратегия | `СтратегииЗапускаБенчмарка.ПропускнаяСпособность()` | -| КоличествоИтераций | `15` | +| КоличествоИтераций | `0` - определяется адаптивным режимом | +| АдаптивныеИтерации | `Истина` | | КоличествоВызововЗаИтерацию | `0` - рассчитывать автоматически | | КоличествоПрогревочныхИтераций | `6` | | МинимальноеВремяИтерации | `100` мс | @@ -32,6 +33,7 @@ [УстановитьКоличествоИтераций](#установитьколичествоитераций)
[КоличествоИтераций](#количествоитераций)
+[ИспользуютсяАдаптивныеИтерации](#используютсяадаптивныеитерации)
[УстановитьКоличествоВызововЗаИтерацию](#установитьколичествовызововзаитерацию)
[КоличествоВызововЗаИтерацию](#количествовызововзаитерацию)
[УстановитьКоличествоПрогревочныхИтераций](#установитьколичествопрогревочныхитераций)
@@ -89,7 +91,7 @@ | Имя | Тип | Описание | | -- | -- | -- | -| КоличествоИтераций | Число | Количество измерительных итераций. | +| КоличествоИтераций | Число | Точное число временных измерительных итераций. | **Возвращаемое значение:** @@ -97,7 +99,7 @@ **Описание:** -Устанавливает число измерительных итераций. +Устанавливает точное число временных измерительных итераций. ## КоличествоИтераций @@ -113,7 +115,25 @@ **Описание:** -Возвращает число измерительных итераций. +Возвращает заданное число временных измерительных итераций. Значение `0` +означает, что число итераций определяет адаптивный режим. + +## ИспользуютсяАдаптивныеИтерации + +**Синтаксис:** + +```bsl +ИспользуютсяАдаптивныеИтерации() +``` + +**Возвращаемое значение:** + +Тип: Булево. + +**Описание:** + +Возвращает `Истина`, если адаптивный режим применяется к временным измерениям: +адаптивные итерации включены, а `КоличествоИтераций` равно `0`. ## УстановитьКоличествоВызововЗаИтерацию diff --git "a/docs/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" "b/docs/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" index c4546084..bbd5add0 100644 --- "a/docs/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" +++ "b/docs/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" @@ -187,7 +187,6 @@ ```bsl &СтратегияПропускнаяСпособность -&КоличествоИтераций(15) &КоличествоПрогревочныхИтераций(6) &МинимальноеВремяИтерации(200) &АдаптивныеИтерации( @@ -203,14 +202,6 @@ КонецПроцедуры ``` -Примечания: - -- `&КоличествоПрогревочныхИтераций`, `&КоличествоВызововЗаИтерацию`, - `&МинимальноеВремяИтерации` и - `&МинимальноеКоличествоВызововЗаИтерацию` игнорируются в `ХолодныйЗапуск`. -- Если `&КоличествоВызововЗаИтерацию(0)`, число вызовов рассчитывается автоматически. -- У `&АдаптивныеИтерации` и `&СтатистическоеСравнение` параметры задаются по именам; их можно не указывать, чтобы использовать значения по умолчанию. - Подробнее: [Стратегии запуска](СтратегииЗапуска.md), [Управление итерациями и вызовами](УправлениеИтерациямиИВызовами.md). ### Отчет и экспорт diff --git "a/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" "b/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" index 7aee6f56..5ae5098f 100644 --- "a/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" +++ "b/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" @@ -1,6 +1,6 @@ # Мониторинг памяти -Включает дополнительный этап измерения аллокаций памяти. При его использовании в отчёте появляется колонка `Allocated` - объём памяти, выделяемый на одну операцию. Полезно для выявления избыточных аллокаций и сравнения алгоритмов по потреблению памяти. +Включает дополнительный этап измерения аллокаций памяти. При его использовании в отчёте появляется колонка `Allocated` - объём памяти, выделяемый на одну операцию. Полезно для выявления избыточных аллокаций и сравнения алгоритмов по потреблению памяти. Для каждого кейса после временных измерений выполняется ровно одна итерация памяти. ## Конфигурирование diff --git "a/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" "b/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" index 84c94fb3..01389425 100644 --- "a/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" +++ "b/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" @@ -2,7 +2,7 @@ ## Количество итераций -Контролирует количество измерительных итераций для основных этапов (измерение и память). +Задаёт точное число временных измерительных итераций. Если количество не задано, используется адаптивный режим. ### Аннотация @@ -27,7 +27,7 @@ benchos run --iterationCount 25 [FILE] ## Адаптивные итерации -По умолчанию количество измерений фиксировано. Чтобы завершать этап измерения после достижения заданной погрешности, включите адаптивный режим одним из способов ниже. +Адаптивный режим включен по умолчанию. Пока `КоличествоИтераций` не задано, число временных измерений определяется по целевой погрешности. Положительное значение `КоличествоИтераций` задаёт их точное число и имеет приоритет над адаптивным режимом. ### Аннотация @@ -55,7 +55,7 @@ benchos run --iterationCount 25 [FILE] .УстановитьМинимальноеКоличествоАдаптивныхИтераций(15); // выполнить не менее 15 измерений ``` -Если цель не достигнута к максимуму, запуск завершается и отчёт получает предупреждение. В фиксированном режиме это же значение служит ориентиром предупреждения о высокой относительной погрешности. Адаптивный режим применяется только к измерениям времени; фиксированный `КоличествоИтераций` остаётся режимом по умолчанию. +Если цель не достигнута к максимуму, запуск завершается и отчёт получает предупреждение. В фиксированном режиме это же значение служит ориентиром предупреждения о высокой относительной погрешности. ### CLI @@ -79,8 +79,8 @@ benchos run --maxRelativeError 0.1 --minAdaptiveIterationCount 15 --maxAdaptiveI ### Когда выбирать режим -- Фиксированное число итераций выбирайте для воспроизводимого бюджета измерений. -- Адаптивные итерации - когда важнее завершить замеры после достижения целевой погрешности. +- Укажите количество итераций для воспроизводимого бюджета временных измерений. +- Адаптивные итерации выбирайте, когда допустим переменный бюджет измерений и важнее завершить замеры после достижения целевой погрешности; этот режим включен по умолчанию. - Статистическое сравнение включайте при наличии эталона и не менее `15` измерений в каждой выборке. ### Доверительный интервал и погрешность diff --git "a/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index 5ab0e67e..2672206b 100644 --- "a/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -64,8 +64,8 @@ benchos run --settings settings.json ./benchmarks | Поле | JSON-тип | По умолчанию | Допустимые значения и смысл | | --- | --- | --- | --- | -| `IterationCount` | Число | `15` | Больше `0`. | -| `AdaptiveIterations` | Булево | `false` | Включает остановку измерений по целевой погрешности. | +| `IterationCount` | Число | `0` | `0` означает, что число временных измерений не задано; положительное целое задаёт их точное число. | +| `AdaptiveIterations` | Булево | `true` | Включает остановку измерений по целевой погрешности. | | `MaxRelativeError` | Число | `0.1` | Цель адаптивного режима: `Error / Mean`, больше `0`. | | `MinAdaptiveIterationCount` | Число | `15` | Минимум измерений до проверки погрешности, не меньше `2`; при статистическом сравнении - не меньше `15`. | | `MaxAdaptiveIterationCount` | Число | `100` | Максимум измерений в адаптивном режиме, не меньше минимума. | @@ -140,7 +140,11 @@ benchos run --settings settings.json ./benchmarks 3. Аннотации класса бенчмарка. 4. Значения по умолчанию. -Значение из `--settings` переопределяет аннотацию, только если отличается от библиотечного значения по умолчанию. Поэтому `"IterationCount": 15` не переопределяет `&КоличествоИтераций(10)`. Чтобы переопределить аннотацию через `--settings`, задайте значение, отличное от значения по умолчанию. +### Особые случаи + +Для отдельных типов настроек действуют уточнения к этому порядку. + +Значение из `--settings` переопределяет аннотацию, только если отличается от библиотечного значения по умолчанию. Исключение — положительное `IterationCount` и `AdaptiveIterations`: их присутствие в JSON значимо. Поэтому `"IterationCount": 15` переопределяет `&КоличествоИтераций(10)`, а `"IterationCount": 0` не переопределяет его. Для коллекций правило применяется к каждой отдельно: изменённый непустой массив `Parameters`, `ParameterSources`, `Handlers`, `Columns`, `Exporters` или `RuntimeVersions` из `--settings` полностью заменяет одноимённую коллекцию, полученную из аннотаций. Явное `[]` совпадает с библиотечным значением по умолчанию, не считается изменением и потому не очищает коллекцию из аннотаций. diff --git "a/src/BenchmarkOneScript/core/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" "b/src/BenchmarkOneScript/core/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" index 1606e604..8589f155 100644 --- "a/src/BenchmarkOneScript/core/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" +++ "b/src/BenchmarkOneScript/core/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" @@ -1,4 +1,4 @@ -// Задает количество итераций для основных этапов (ЭтапыБенчмарка.Измерение(), ЭтапыБенчмарка.Память()). +// Задает количество временных измерительных итераций. // // Используется для тонкой настройки баланса между точностью измерений и временем выполнения теста. // Увеличение итераций повышает стабильность результатов, но увеличивает общее время прогона. @@ -6,7 +6,7 @@ // Применяется только к методу ПриСозданииОбъекта // // Параметры: -// Значение - Число - Количество итераций для этапов измерения и мониторинга памяти. +// Значение - Число - Количество временных измерительных итераций. // // Примеры: // &КоличествоИтераций(20) diff --git "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 060f5822..ed2d3cd8 100644 --- "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -134,7 +134,7 @@ Процедура ПриСозданииОбъекта(Тип = Неопределено) СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность(); - КоличествоИтерацийПоУмолчанию = 15; + КоличествоИтерацийПоУмолчанию = 0; МаксимальнаяОтносительнаяПогрешностьПоУмолчанию = 0.1; МинимальноеКоличествоАдаптивныхИтерацийПоУмолчанию = 15; МаксимальноеКоличествоАдаптивныхИтерацийПоУмолчанию = 100; @@ -155,10 +155,10 @@ _ИсполняющиеСреды = Новый Массив(); _МодифицированныеПоля = Новый Соответствие(); _Рефлектор = Новый Рефлектор(); + _КоличествоИтераций = КоличествоИтерацийПоУмолчанию; УдалитьМониторингПамяти(); УстановитьСтратегию(СтратегияПоУмолчанию); - УстановитьКоличествоИтераций(КоличествоИтерацийПоУмолчанию); УстановитьКоличествоВызововЗаИтерацию(КоличествоВызововЗаИтерациюПоУмолчанию); УстановитьКоличествоПрогревочныхИтераций(КоличествоПрогревочныхИтерацийПоУмолчанию); УстановитьМинимальноеВремяИтерации(МинимальноеВремяИтерацииПоУмолчанию); @@ -170,7 +170,7 @@ УстановитьМинимальноеКоличествоАдаптивныхИтераций(МинимальноеКоличествоАдаптивныхИтерацийПоУмолчанию); УстановитьОтносительныйПорогПрактическойЗначимости(ОтносительныйПорогПрактическойЗначимостиПоУмолчанию); УстановитьУровеньЗначимостиСтатистическогоСравнения(УровеньЗначимостиСтатистическогоСравненияПоУмолчанию); - ОтключитьАдаптивныеИтерации(); + ВключитьАдаптивныеИтерации(); ОтключитьСтатистическоеСравнениеСЭталоном(); _МодифицированныеПоля.Очистить(); @@ -189,7 +189,16 @@ Подстроки = Новый Массив(); Подстроки.Добавить(СтрШаблон("Стратегия = ""%1""", Стратегия())); - Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); + + Если ИспользуютсяАдаптивныеИтерации() Тогда + Подстроки.Добавить(СтрШаблон( + "Измерительных итераций = адаптивно (%1–%2)", + МинимальноеКоличествоАдаптивныхИтераций(), + МаксимальноеКоличествоАдаптивныхИтераций() + )); + Иначе + Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); + КонецЕсли; Если Стратегия() = СтратегииЗапускаБенчмарка.ПропускнаяСпособность() Тогда @@ -229,10 +238,11 @@ #Область СвойстваКонфигурации -// Устанавливает количество итераций для основных этапов (ЭтапыБенчмарка.Измерение(), ЭтапыБенчмарка.Память()) +// Устанавливает количество временных измерений. // // Используется для тонкой настройки баланса между точностью измерений и временем выполнения теста. // Увеличение итераций повышает стабильность результатов, но увеличивает общее время прогона. +// Положительное значение имеет приоритет над адаптивными итерациями. // // Параметры: // КоличествоИтераций - Число @@ -241,8 +251,7 @@ // ЭтотОбъект Функция УстановитьКоличествоИтераций(КоличествоИтераций) Экспорт - Ожидаем.Что(КоличествоИтераций, "Количество итераций").ИмеетТип("Число"); - Ожидаем.Что(КоличествоИтераций, "Количество итераций не может быть меньше 1").Больше(0); + ПроверитьКоличествоИтераций(КоличествоИтераций); _КоличествоИтераций = КоличествоИтераций; УстановитьМодифицированность(ИмяПоля_КоличествоИтераций()); @@ -251,7 +260,7 @@ КонецФункции -// Количество итераций для основных этапов (ЭтапыБенчмарка.Измерение(), ЭтапыБенчмарка.Память()) +// Количество временных измерений. Ноль означает, что число определяется адаптивным режимом. // // Возвращаемое значение: // Число @@ -359,6 +368,16 @@ КонецФункции +// Возвращает признак применения адаптивного режима для временных измерений. +// +// Возвращаемое значение: +// Булево +Функция ИспользуютсяАдаптивныеИтерации() Экспорт + + Возврат _АдаптивныеИтерацииВключены И _КоличествоИтераций = 0; + +КонецФункции + // Целевая относительная погрешность адаптивного измерения. // // Возвращаемое значение: @@ -634,7 +653,7 @@ КонецФункции -// Устанавливает стратегию запуска бенчмарков +// Устанавливает стратегию запуска бенчмарков. // // Параметры: // Стратегия - см. СтратегииЗапускаБенчмарка @@ -1520,8 +1539,15 @@ Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт ДесериализоватьЭкспортеры(ПрочитанныеСвойства); - ОпределитьМодифицированныеПоля(); + + // Явное true совпадает со значением по умолчанию, поэтому не отмечается автоматически. + // Повторный вызов сохраняет присутствие поля для приоритетного объединения с аннотациями. + Если ПрочитанныеСвойства.Свойство("AdaptiveIterations") + И _АдаптивныеИтерацииВключены Тогда + ВключитьАдаптивныеИтерации(); + КонецЕсли; + Валидировать(); КонецПроцедуры @@ -1571,12 +1597,18 @@ ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); КонецЕсли; - Если _АдаптивныеИтерацииВключены Тогда + Если _КоличествоИтераций <> 0 Тогда + ПроверитьКоличествоИтераций(_КоличествоИтераций); + КонецЕсли; + + Если ИспользуютсяАдаптивныеИтерации() Тогда ПроверитьНастройкиАдаптивныхИтераций( _МаксимальнаяОтносительнаяПогрешность, _МинимальноеКоличествоАдаптивныхИтераций, _МаксимальноеКоличествоАдаптивныхИтераций ); + Иначе + Ожидаем.Что(_КоличествоИтераций, "Количество итераций при отключенных адаптивных итерациях").Больше(0); КонецЕсли; Если _СтатистическоеСравнениеВключено Тогда @@ -1588,6 +1620,14 @@ КонецПроцедуры +Процедура ПроверитьКоличествоИтераций(КоличествоИтераций) + + Ожидаем.Что(КоличествоИтераций, "Количество итераций").ИмеетТип("Число"); + Ожидаем.Что(КоличествоИтераций, "Количество итераций не может быть меньше 1").Больше(0); + Ожидаем.Что(КоличествоИтераций = Цел(КоличествоИтераций), "Количество итераций должно быть целым").ЭтоИстина(); + +КонецПроцедуры + Процедура ПроверитьНастройкиАдаптивныхИтераций(МаксимальнаяОтносительнаяПогрешность, МинимальноеКоличествоИтераций, МаксимальноеКоличествоИтераций) Ожидаем.Что(МаксимальнаяОтносительнаяПогрешность, "Максимальная относительная погрешность").ИмеетТип("Число"); diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index ed3a5d5b..73c03fd8 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -97,7 +97,10 @@ // Проверяет границы адаптивного измерения и его совместимость со статистическим сравнением. Процедура ПроверитьНастройкиАдаптивныхИтераций() - Если Не _Конфигурация.АдаптивныеИтерацииВключены() Тогда + Если Не _Конфигурация.ИспользуютсяАдаптивныеИтерации() Тогда + Если _Конфигурация.КоличествоИтераций() <= 0 Тогда + ДобавитьОшибку("При выключенных адаптивных итерациях требуется указать количество итераций."); + КонецЕсли; Возврат; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index abf18b51..1593f772 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -266,7 +266,7 @@ Функция ДостигнутаЦелеваяОтносительнаяПогрешность(РезультатЗапускаКейса, ЭтапТекущегоЗамера) - Если Не _Конфигурация.АдаптивныеИтерацииВключены() + Если Не _Конфигурация.ИспользуютсяАдаптивныеИтерации() Или ЭтапТекущегоЗамера <> ЭтапыБенчмарка.Измерение() Тогда Возврат Ложь; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index b769203f..1feab7ed 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\320\270\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -272,7 +272,7 @@ Процедура ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, РезультатЗапускаКейса) МаксимальноеКоличествоИтераций = ?( - _Конфигурация.АдаптивныеИтерацииВключены(), + _Конфигурация.ИспользуютсяАдаптивныеИтерации(), _Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций(), _Конфигурация.КоличествоИтераций() ); @@ -290,7 +290,7 @@ РезультатЗапускаКейса.Замеры.Добавить(РезультатИтерации); ВызватьСобытиеПослеИтерации(ЭтапыБенчмарка.Измерение(), НомерИтерации, РезультатИтерации); - Если _Конфигурация.АдаптивныеИтерацииВключены() + Если _Конфигурация.ИспользуютсяАдаптивныеИтерации() И РезультатЗапускаКейса.Замеры.Количество() >= _Конфигурация.МинимальноеКоличествоАдаптивныхИтераций() Тогда РезультатЗапускаКейса.ПересчитатьСтатистику(); Если РезультатЗапускаКейса.Статистика.ОтносительнаяПогрешность <> Неопределено @@ -309,20 +309,17 @@ Возврат; КонецЕсли; - Для НомерИтерации = 1 По _Конфигурация.КоличествоИтераций() Цикл - - ПроверитьИСоздатьЧекпоинт(РезультатЗапускаКейса.Кейс, ЭтапыБенчмарка.Память(), НомерИтерации); - - Если ТребуетсяПропуститьИтерацию(ЭтапыБенчмарка.Память(), НомерИтерации) Тогда - Продолжить; - КонецЕсли; + НомерИтерации = 1; + ПроверитьИСоздатьЧекпоинт(РезультатЗапускаКейса.Кейс, ЭтапыБенчмарка.Память(), НомерИтерации); - ВызватьСобытиеПередИтерацией(ЭтапыБенчмарка.Память(), НомерИтерации); - РезультатИтерации = ВыполнитьИтерацию(Делегат, ЭтапыБенчмарка.Память(), НомерИтерации, КоличествоВызововЗаИтерацию); - РезультатЗапускаКейса.Замеры.Добавить(РезультатИтерации); - ВызватьСобытиеПослеИтерации(ЭтапыБенчмарка.Память(), НомерИтерации, РезультатИтерации); + Если ТребуетсяПропуститьИтерацию(ЭтапыБенчмарка.Память(), НомерИтерации) Тогда + Возврат; + КонецЕсли; - КонецЦикла; + ВызватьСобытиеПередИтерацией(ЭтапыБенчмарка.Память(), НомерИтерации); + РезультатИтерации = ВыполнитьИтерацию(Делегат, ЭтапыБенчмарка.Память(), НомерИтерации, КоличествоВызововЗаИтерацию); + РезультатЗапускаКейса.Замеры.Добавить(РезультатИтерации); + ВызватьСобытиеПослеИтерации(ЭтапыБенчмарка.Память(), НомерИтерации, РезультатИтерации); КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\206\320\265\320\275\321\211\320\270\320\272\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\206\320\265\320\275\321\211\320\270\320\272\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 16046a81..2f5789f4 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\206\320\265\320\275\321\211\320\270\320\272\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\206\320\265\320\275\321\211\320\270\320\272\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -86,7 +86,7 @@ ОтносительнаяПогрешность = РезультатЗапуска.Статистика.ОтносительнаяПогрешность; Если ОтносительнаяПогрешность = Неопределено Тогда - Если _Конфигурация.АдаптивныеИтерацииВключены() + Если _Конфигурация.ИспользуютсяАдаптивныеИтерации() И РезультатЗапуска.Статистика.КоличествоИтераций >= _Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций() Тогда ДобавитьДиагностическоеСобытие( РезультатЗапуска, @@ -101,7 +101,7 @@ // Диагностика погрешности использует точность до сотых процента. ОтносительнаяПогрешность = Окр(ОтносительнаяПогрешность, 4); - Если _Конфигурация.АдаптивныеИтерацииВключены() Тогда + Если _Конфигурация.ИспользуютсяАдаптивныеИтерации() Тогда Если РезультатЗапуска.Статистика.КоличествоИтераций < _Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций() Или ОтносительнаяПогрешность <= _Конфигурация.ЦелеваяОтносительнаяПогрешность() Тогда Возврат; diff --git "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 5a14c138..884c91ce 100644 --- "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -79,4 +79,4 @@ Возврат Лев(Новый СистемнаяИнформация().Версия, 2) = "1."; КонецФункции -_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ТестированиеБенчмарков"); \ No newline at end of file +_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ТестированиеБенчмарков"); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 5ee3b3b0..f39fab03 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -105,9 +105,10 @@ // Подготовка Тип = Тип("ПустойБенчмарк"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(1000) @@ -128,9 +129,10 @@ // Подготовка Тип = Тип("БенчмаркСНестабильнымВременем"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.0001) @@ -151,9 +153,10 @@ // Подготовка Тип = Тип("ПустойБенчмарк"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(1000) diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 1110f02c..d6195231 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -44,8 +44,10 @@ Процедура ТестДолжен_ЗавершитьАдаптивныеИтерацииПослеМинимума() Экспорт // Подготовка - Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию() - .ВключитьАдаптивныеИтерации() + Конфигурация = Новый КонфигурацияБенчмарков() + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьЦелевуюОтносительнуюПогрешность(1000000) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2); @@ -63,8 +65,7 @@ Процедура ТестДолжен_ЗапретитьАдаптивныеИтерацииСОбратнымиГраницами() Экспорт // Подготовка - Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию() - .ВключитьАдаптивныеИтерации() + Конфигурация = Новый КонфигурацияБенчмарков() .УстановитьМинимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(2); Исполнитель = Новый ИсполнительБенчмарков(Тип("ПустойБенчмарк"), Конфигурация); @@ -78,8 +79,7 @@ Процедура ТестДолжен_ЗапретитьАдаптивныеИтерацииСНедостаточнымМинимумомДляСтатистическогоСравнения() Экспорт // Подготовка - Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию() - .ВключитьАдаптивныеИтерации() + Конфигурация = Новый КонфигурацияБенчмарков() .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(15) .ВключитьСтатистическоеСравнениеСЭталоном(); @@ -90,6 +90,22 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_ЗапретитьВыключенныйАдаптивныйРежимБезКоличестваИтераций() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков() + .ОтключитьАдаптивныеИтерации(); + Исполнитель = Новый ИсполнительБенчмарков(Тип("ПустойБенчмарк"), Конфигурация); + + // Действие и Проверка + Ожидаем + .Что(Исполнитель) + .Метод("Запустить") + .ВыбрасываетИсключение("При выключенных адаптивных итерациях требуется указать количество итераций."); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ЗапуститьБенчмаркиИзКаталога() Экспорт diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index ae5e8c88..aa85c743 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -314,10 +314,10 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ОбъединитьКонфигурацииСДефолтнымиЗначениями() Экспорт +Процедура ТестДолжен_ОбъединитьКонфигурацииСЯвноУстановленнымиЗначениями() Экспорт // Подготовка - КоличествоИтерацийПоУмолчанию = 15; + КоличествоИтераций = 15; КонфигурацияПриемник = Новый КонфигурацияБенчмарков() .УстановитьКоличествоИтераций(111) @@ -325,14 +325,14 @@ .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); КонфигурацияИсточник = Новый КонфигурацияБенчмарков() - .УстановитьКоличествоИтераций(КоличествоИтерацийПоУмолчанию) + .УстановитьКоличествоИтераций(КоличествоИтераций) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность()); // Действие КонфигурацияПриемник.Объединить(КонфигурацияИсточник); // Проверка - Ожидаем.Что(КонфигурацияПриемник.КоличествоИтераций(), "Количество итераций").Равно(КоличествоИтерацийПоУмолчанию); + Ожидаем.Что(КонфигурацияПриемник.КоличествоИтераций(), "Количество итераций").Равно(КоличествоИтераций); Ожидаем.Что(КонфигурацияПриемник.КоличествоВызововЗаИтерацию(), "Количество вызовов за итерацию").Равно(111); Ожидаем.Что(КонфигурацияПриемник.Стратегия(), "Стратегия").Равно(СтратегииЗапускаБенчмарка.ПропускнаяСпособность()); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 1091035a..2d0f5bf8 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -10,17 +10,89 @@ #Область Тесты &Тест -Процедура ТестДолжен_ИспользоватьФиксированноеКоличествоИтерацийПоУмолчанию() Экспорт +Процедура ТестДолжен_ИспользоватьАдаптивныеИтерацииПоУмолчанию() Экспорт // Подготовка и Действие Конфигурация = Новый КонфигурацияБенчмарков(); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(0); + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); КонецПроцедуры +&Тест +Процедура ТестДолжен_ПоказыватьАдаптивныйРежимВПредставленииКонфигурации() Экспорт + + // Подготовка и Действие + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Проверка + Ожидаем.Что(Строка(Конфигурация), "Представление конфигурации").Содержит("Измерительных итераций = адаптивно (15–100)"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СохранитьАдаптивныеИтерацииПриЯвномКоличестве() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Действие + Конфигурация.УстановитьКоличествоИтераций(15); + + // Проверка + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ИспользоватьФиксированныеИтерацииПослеЯвногоОтключенияАдаптивных() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков() + .ОтключитьАдаптивныеИтерации(); + + // Действие + Конфигурация.УстановитьКоличествоИтераций(15); + + // Проверка + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ИспользоватьАдаптивныеИтерацииПоУмолчаниюДляХолодногоЗапуска() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Действие + Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); + + // Проверка + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СохранитьАдаптивныеИтерацииПриУстановкеХолодногоЗапуска() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков() + .ВключитьАдаптивныеИтерации(); + + // Действие + Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); + + // Проверка + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ИспользоватьПрофильДостоверностиСтатистикиПоУмолчанию() Экспорт @@ -50,7 +122,7 @@ .УстановитьМинимальноеКоличествоАдаптивныхИтераций(МинимальноеКоличествоИтераций); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(МаксимальнаяОтносительнаяПогрешность); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(МинимальноеКоличествоИтераций); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(МаксимальноеКоличествоИтераций); @@ -68,7 +140,7 @@ Конфигурация.УстановитьОтносительныйПорогПрактическойЗначимости(0.05); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); // Действие diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 9be4b16d..36a2f053 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -69,10 +69,10 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_НеПереопределятьНастройкуЗначениемПоУмолчаниюИзJson() Экспорт +Процедура ТестДолжен_СчитатьНулевоеКоличествоИтерацийИзJsonНезаданным() Экспорт // Подготовка - Json = "{""Configuration"": {""IterationCount"": 15}}"; + Json = "{""Configuration"": {""IterationCount"": 0}}"; Конфигурация = Новый КонфигурацияБенчмарков() .УстановитьКоличествоИтераций(10); @@ -82,6 +82,46 @@ // Проверка Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(10); + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПрименитьЯвноеПоложительноеКоличествоИтерацийИзJson() Экспорт + + // Подготовка + Json = "{""Configuration"": {""IterationCount"": 15}}"; + Конфигурация = Новый КонфигурацияБенчмарков() + .УстановитьКоличествоИтераций(10); + + // Действие + Настройки = ПрочитатьПримерНастроек(Json); + Конфигурация.Объединить(Настройки.Конфигурация); + + // Проверка + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(15); + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + +КонецПроцедуры + +&Параметры(-1) +&Параметры(1.5) +&Тест +Процедура ТестДолжен_ОтклонитьНекорректноеКоличествоИтерацийИзJson(КоличествоИтераций) Экспорт + + // Подготовка + Json = СтрШаблон("{""Configuration"": {""IterationCount"": %1}}", КоличествоИтераций); + ОшибкаПроверки = Ложь; + + // Действие + Попытка + ПрочитатьПримерНастроек(Json); + Исключение + ОшибкаПроверки = Истина; + КонецПопытки; + + // Проверка + Ожидаем.Что(ОшибкаПроверки).ЭтоИстина(); КонецПроцедуры @@ -103,10 +143,10 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_НеПереопределятьРежимыЗначениямиПоУмолчаниюИзJson() Экспорт +Процедура ТестДолжен_ПрименитьЯвныйРежимАдаптивныхИтерацийИзJson() Экспорт // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": false, ""StatisticalComparison"": false, ""Memory"": false}}"; + Json = "{""Configuration"": {""IterationCount"": 15, ""AdaptiveIterations"": false, ""StatisticalComparison"": false, ""Memory"": false}}"; Конфигурация = Новый КонфигурацияБенчмарков() .ВключитьАдаптивныеИтерации() .ВключитьСтатистическоеСравнениеСЭталоном() @@ -117,12 +157,30 @@ Конфигурация.Объединить(Настройки.Конфигурация); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); КонецПроцедуры +&Тест +Процедура ТестДолжен_ВключитьАдаптивныеИтерацииПриЯвномЗначенииИзJson() Экспорт + + // Подготовка + Json = "{""Configuration"": {""AdaptiveIterations"": true}}"; + Конфигурация = Новый КонфигурацияБенчмарков() + .ОтключитьАдаптивныеИтерации() + .УстановитьКоличествоИтераций(15); + + // Действие + Настройки = ПрочитатьПримерНастроек(Json); + Конфигурация.Объединить(Настройки.Конфигурация); + + // Проверка + Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + +КонецПроцедуры + &Параметры(-0.01) &Параметры(1) &Параметры(1.01) @@ -145,6 +203,21 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_СохранитьАдаптивныеИтерацииПриХолодномЗапускеИзJson() Экспорт + + // Подготовка + Json = "{""Configuration"": {""Strategy"": ""ХолодныйЗапуск""}}"; + + // Действие + Настройки = ПрочитатьПримерНастроек(Json); + + // Проверка + Ожидаем.Что(Настройки.Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); + Ожидаем.Что(Настройки.Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ПрочитатьНастройкиАдаптивныхИтераций() Экспорт diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" index f86d9d3d..452ec51e 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -93,10 +93,10 @@ // Проверка Ожидаем.Что(Результат.Запуски, "Запуски").ИмеетДлину(1); - Ожидаем.Что(Результат.Запуски[0].Замеры, "Замеры").ИмеетДлину(6); + Ожидаем.Что(Результат.Запуски[0].Замеры, "Замеры").ИмеетДлину(4); ПроверитьЗамеры(Результат.Запуски[0].Замеры, 1, 3, ЭтапыБенчмарка.Измерение()); - ПроверитьЗамеры(Результат.Запуски[0].Замеры, 4, 6, ЭтапыБенчмарка.Память()); + ПроверитьЗамеры(Результат.Запуски[0].Замеры, 4, 4, ЭтапыБенчмарка.Память()); КонецПроцедуры From dd6004da505e1de95db010d555d1c3f3457dda7a Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Fri, 23 Oct 2026 15:26:44 +0300 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=D1=83=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=82=D1=8C=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D0=BF=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Определять режим только значением КоличествоИтераций: ноль включает адаптивное завершение, положительное число задает фиксированный режим. Удалить отдельный флаг и JSON-свойство AdaptiveIterations, а также связанный API, логику объединения и недостижимую проверку валидатора. Сохранить аннотации и CLI-параметры для настройки порогов адаптивного режима. Обновить сериализацию, фикстуры, тесты и документацию. --- ...20\260\321\200\320\272\320\276\320\262.md" | 8 +-- ...20\276\320\262\320\260\320\274\320\270.md" | 7 +- ...20\277\321\203\321\201\320\272\320\260.md" | 5 +- ...20\277\321\203\321\201\320\272\320\260.os" | 6 -- ...20\260\321\200\320\272\320\276\320\262.os" | 1 - ...20\260\321\200\320\272\320\276\320\262.os" | 69 +------------------ ...20\260\321\200\320\272\320\276\320\262.os" | 3 - tests/fixtures/verified-report.json | 1 - ...20\260\321\200\320\272\320\276\320\262.os" | 32 ++++----- ...20\260\321\200\320\272\320\276\320\262.os" | 3 - ...20\260\321\200\320\272\320\276\320\262.os" | 7 +- ...20\260\321\200\320\272\320\276\320\262.os" | 16 ----- ...20\260\321\200\320\272\320\276\320\262.os" | 7 +- ...20\260\321\200\320\272\320\276\320\262.os" | 35 ++-------- ...0\265\320\275\320\270\321\217OneScript.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 57 ++++----------- ...20\260\321\200\320\272\320\276\320\262.os" | 2 - 17 files changed, 51 insertions(+), 210 deletions(-) diff --git "a/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" "b/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" index a1cba2e7..ad822498 100644 --- "a/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" +++ "b/docs/api/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" @@ -20,7 +20,6 @@ | -- | -- | | Стратегия | `СтратегииЗапускаБенчмарка.ПропускнаяСпособность()` | | КоличествоИтераций | `0` - определяется адаптивным режимом | -| АдаптивныеИтерации | `Истина` | | КоличествоВызововЗаИтерацию | `0` - рассчитывать автоматически | | КоличествоПрогревочныхИтераций | `6` | | МинимальноеВремяИтерации | `100` мс | @@ -91,7 +90,7 @@ | Имя | Тип | Описание | | -- | -- | -- | -| КоличествоИтераций | Число | Точное число временных измерительных итераций. | +| КоличествоИтераций | Число | Точное число временных измерительных итераций; `0` возвращает адаптивный режим. | **Возвращаемое значение:** @@ -99,7 +98,7 @@ **Описание:** -Устанавливает точное число временных измерительных итераций. +Устанавливает точное число временных измерительных итераций. Значение `0` возвращает адаптивный режим. ## КоличествоИтераций @@ -132,8 +131,7 @@ **Описание:** -Возвращает `Истина`, если адаптивный режим применяется к временным измерениям: -адаптивные итерации включены, а `КоличествоИтераций` равно `0`. +Возвращает `Истина`, если `КоличествоИтераций` равно `0` и для временных измерений применяется адаптивный режим. ## УстановитьКоличествоВызововЗаИтерацию diff --git "a/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" "b/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" index 01389425..945c8e61 100644 --- "a/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" +++ "b/docs/\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\217\320\274\320\270\320\230\320\222\321\213\320\267\320\276\320\262\320\260\320\274\320\270.md" @@ -27,11 +27,11 @@ benchos run --iterationCount 25 [FILE] ## Адаптивные итерации -Адаптивный режим включен по умолчанию. Пока `КоличествоИтераций` не задано, число временных измерений определяется по целевой погрешности. Положительное значение `КоличествоИтераций` задаёт их точное число и имеет приоритет над адаптивным режимом. +Адаптивный режим включен по умолчанию. Пока `КоличествоИтераций` не задано, число временных измерений определяется по целевой погрешности. Положительное значение `КоличествоИтераций` задаёт их точное число и имеет приоритет над адаптивным режимом; `УстановитьКоличествоИтераций(0)` возвращает адаптивный режим. ### Аннотация -`&АдаптивныеИтерации` применяется к `ПриСозданииОбъекта`, включает адаптивный режим и принимает необязательные именованные параметры: `МаксимальнаяОтносительнаяПогрешность`, `МинимальноеКоличествоИтераций` и `МаксимальноеКоличествоИтераций`. +`&АдаптивныеИтерации` применяется к `ПриСозданииОбъекта` и задаёт необязательные параметры адаптивного режима: `МаксимальнаяОтносительнаяПогрешность`, `МинимальноеКоличествоИтераций` и `МаксимальноеКоличествоИтераций`. ```bsl &АдаптивныеИтерации( @@ -49,7 +49,6 @@ benchos run --iterationCount 25 [FILE] ```bsl Конфигурация - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.1) // не более 10%: погрешность среднего / среднее при доверительной вероятности 99,9% .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(100) // не выполнять более 100 измерений .УстановитьМинимальноеКоличествоАдаптивныхИтераций(15); // выполнить не менее 15 измерений @@ -59,7 +58,7 @@ benchos run --iterationCount 25 [FILE] ### CLI -В CLI передача любой из опций адаптивного режима включает его: +В CLI эти опции задают параметры адаптивного режима: ```bash benchos run --maxRelativeError 0.1 --minAdaptiveIterationCount 15 --maxAdaptiveIterationCount 100 [FILE] diff --git "a/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index 2672206b..fb6e85ff 100644 --- "a/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\244\320\276\321\200\320\274\320\260\321\202\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -64,8 +64,7 @@ benchos run --settings settings.json ./benchmarks | Поле | JSON-тип | По умолчанию | Допустимые значения и смысл | | --- | --- | --- | --- | -| `IterationCount` | Число | `0` | `0` означает, что число временных измерений не задано; положительное целое задаёт их точное число. | -| `AdaptiveIterations` | Булево | `true` | Включает остановку измерений по целевой погрешности. | +| `IterationCount` | Число | `0` | `0` включает адаптивное определение числа временных измерений; положительное целое задаёт их точное число. | | `MaxRelativeError` | Число | `0.1` | Цель адаптивного режима: `Error / Mean`, больше `0`. | | `MinAdaptiveIterationCount` | Число | `15` | Минимум измерений до проверки погрешности, не меньше `2`; при статистическом сравнении - не меньше `15`. | | `MaxAdaptiveIterationCount` | Число | `100` | Максимум измерений в адаптивном режиме, не меньше минимума. | @@ -144,7 +143,7 @@ benchos run --settings settings.json ./benchmarks Для отдельных типов настроек действуют уточнения к этому порядку. -Значение из `--settings` переопределяет аннотацию, только если отличается от библиотечного значения по умолчанию. Исключение — положительное `IterationCount` и `AdaptiveIterations`: их присутствие в JSON значимо. Поэтому `"IterationCount": 15` переопределяет `&КоличествоИтераций(10)`, а `"IterationCount": 0` не переопределяет его. +Значение из `--settings` переопределяет аннотацию, только если отличается от библиотечного значения по умолчанию. Исключение — положительное `IterationCount`: его присутствие в JSON значимо. Поэтому `"IterationCount": 15` переопределяет `&КоличествоИтераций(10)`, а `"IterationCount": 0` не переопределяет его. Для коллекций правило применяется к каждой отдельно: изменённый непустой массив `Parameters`, `ParameterSources`, `Handlers`, `Columns`, `Exporters` или `RuntimeVersions` из `--settings` полностью заменяет одноимённую коллекцию, полученную из аннотаций. Явное `[]` совпадает с библиотечным значением по умолчанию, не считается изменением и потому не очищает коллекцию из аннотаций. diff --git "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" index 7cd4c829..5c432d20 100644 --- "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -185,12 +185,6 @@ Конфигурация.УстановитьКоличествоИтераций(_КоличествоИтераций); КонецЕсли; - Если ЭтоЧисло(_МаксимальнаяОтносительнаяПогрешность) - Или ЭтоЧисло(_МаксимальноеКоличествоАдаптивныхИтераций) - Или ЭтоЧисло(_МинимальноеКоличествоАдаптивныхИтераций) Тогда - Конфигурация.ВключитьАдаптивныеИтерации(); - КонецЕсли; - Если ЭтоЧисло(_МаксимальнаяОтносительнаяПогрешность) Тогда Конфигурация.УстановитьЦелевуюОтносительнуюПогрешность(_МаксимальнаяОтносительнаяПогрешность); КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 2251d28e..423c9a24 100644 --- "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -229,7 +229,6 @@ Возврат; КонецЕсли; - Конфигурация.ВключитьАдаптивныеИтерации(); Конфигурация.УстановитьЦелевуюОтносительнуюПогрешность( РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации( Аннотация, diff --git "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index ed2d3cd8..4f4ad5f6 100644 --- "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -12,11 +12,6 @@ &Геттер("КоличествоИтераций") Перем _КоличествоИтераций; // Число -&Сериализуемое("AdaptiveIterations") -&Тип("Булево") -&Геттер("АдаптивныеИтерацииВключены") -Перем _АдаптивныеИтерацииВключены; // Булево - &Сериализуемое("MaxRelativeError") &Тип("Число") &Геттер("ЦелеваяОтносительнаяПогрешность") @@ -170,7 +165,6 @@ УстановитьМинимальноеКоличествоАдаптивныхИтераций(МинимальноеКоличествоАдаптивныхИтерацийПоУмолчанию); УстановитьОтносительныйПорогПрактическойЗначимости(ОтносительныйПорогПрактическойЗначимостиПоУмолчанию); УстановитьУровеньЗначимостиСтатистическогоСравнения(УровеньЗначимостиСтатистическогоСравненияПоУмолчанию); - ВключитьАдаптивныеИтерации(); ОтключитьСтатистическоеСравнениеСЭталоном(); _МодифицированныеПоля.Очистить(); @@ -242,7 +236,7 @@ // // Используется для тонкой настройки баланса между точностью измерений и временем выполнения теста. // Увеличение итераций повышает стабильность результатов, но увеличивает общее время прогона. -// Положительное значение имеет приоритет над адаптивными итерациями. +// Положительное значение имеет приоритет над адаптивными итерациями, ноль возвращает адаптивный режим. // // Параметры: // КоличествоИтераций - Число @@ -332,49 +326,13 @@ КонецФункции -// Включает адаптивное завершение измерений. -// -// Возвращаемое значение: -// ЭтотОбъект -Функция ВключитьАдаптивныеИтерации() Экспорт - - _АдаптивныеИтерацииВключены = Истина; - УстановитьМодифицированность(ИмяПоля_АдаптивныеИтерацииВключены()); - - Возврат ЭтотОбъект; - -КонецФункции - -// Отключает адаптивное завершение измерений. -// -// Возвращаемое значение: -// ЭтотОбъект -Функция ОтключитьАдаптивныеИтерации() Экспорт - - _АдаптивныеИтерацииВключены = Ложь; - УстановитьМодифицированность(ИмяПоля_АдаптивныеИтерацииВключены()); - - Возврат ЭтотОбъект; - -КонецФункции - -// Признак включения адаптивного завершения измерений. -// -// Возвращаемое значение: -// Булево -Функция АдаптивныеИтерацииВключены() Экспорт - - Возврат _АдаптивныеИтерацииВключены; - -КонецФункции - // Возвращает признак применения адаптивного режима для временных измерений. // // Возвращаемое значение: // Булево Функция ИспользуютсяАдаптивныеИтерации() Экспорт - Возврат _АдаптивныеИтерацииВключены И _КоличествоИтераций = 0; + Возврат _КоличествоИтераций = 0; КонецФункции @@ -1340,13 +1298,6 @@ ЗначенияМодифицированныхПолей ); - ПрименитьМодифицированныйРежим( - ИмяПоля_АдаптивныеИтерацииВключены(), - "ВключитьАдаптивныеИтерации", - "ОтключитьАдаптивныеИтерации", - ЗначенияМодифицированныхПолей - ); - ПрименитьМодифицированныйРежим( ИмяПоля_СтатистическоеСравнениеВключено(), "ВключитьСтатистическоеСравнениеСЭталоном", @@ -1540,14 +1491,6 @@ ДесериализоватьЭкспортеры(ПрочитанныеСвойства); ОпределитьМодифицированныеПоля(); - - // Явное true совпадает со значением по умолчанию, поэтому не отмечается автоматически. - // Повторный вызов сохраняет присутствие поля для приоритетного объединения с аннотациями. - Если ПрочитанныеСвойства.Свойство("AdaptiveIterations") - И _АдаптивныеИтерацииВключены Тогда - ВключитьАдаптивныеИтерации(); - КонецЕсли; - Валидировать(); КонецПроцедуры @@ -1607,8 +1550,6 @@ _МинимальноеКоличествоАдаптивныхИтераций, _МаксимальноеКоличествоАдаптивныхИтераций ); - Иначе - Ожидаем.Что(_КоличествоИтераций, "Количество итераций при отключенных адаптивных итерациях").Больше(0); КонецЕсли; Если _СтатистическоеСравнениеВключено Тогда @@ -1623,7 +1564,7 @@ Процедура ПроверитьКоличествоИтераций(КоличествоИтераций) Ожидаем.Что(КоличествоИтераций, "Количество итераций").ИмеетТип("Число"); - Ожидаем.Что(КоличествоИтераций, "Количество итераций не может быть меньше 1").Больше(0); + Ожидаем.Что(КоличествоИтераций, "Количество итераций не может быть меньше 0").БольшеИлиРавно(0); Ожидаем.Что(КоличествоИтераций = Цел(КоличествоИтераций), "Количество итераций должно быть целым").ЭтоИстина(); КонецПроцедуры @@ -1781,10 +1722,6 @@ Возврат "КоличествоИтераций"; КонецФункции -Функция ИмяПоля_АдаптивныеИтерацииВключены() - Возврат "АдаптивныеИтерацииВключены"; -КонецФункции - Функция ИмяПоля_МаксимальнаяОтносительнаяПогрешность() Возврат "МаксимальнаяОтносительнаяПогрешность"; КонецФункции diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 73c03fd8..2d39a927 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -98,9 +98,6 @@ Процедура ПроверитьНастройкиАдаптивныхИтераций() Если Не _Конфигурация.ИспользуютсяАдаптивныеИтерации() Тогда - Если _Конфигурация.КоличествоИтераций() <= 0 Тогда - ДобавитьОшибку("При выключенных адаптивных итерациях требуется указать количество итераций."); - КонецЕсли; Возврат; КонецЕсли; diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index d330aeb8..50665392 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -11,7 +11,6 @@ "Configuration": { "Strategy": "ПропускнаяСпособность", "IterationCount": 10, - "AdaptiveIterations": false, "MaxRelativeError": 0.1, "MinAdaptiveIterationCount": 15, "MaxAdaptiveIterationCount": 100, diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index e8ce14b3..04529745 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -12,26 +12,22 @@ Процедура ТестДолжен_ВыброситьИсключениеПриНевалидномКоличествеИтераций() Экспорт // Подготовка - НевалидныеЗначения = Новый Массив(); - НевалидныеЗначения.Добавить(0); - НевалидныеЗначения.Добавить(-10); - - ТекстОшибки = "Количество итераций не может быть меньше 1"; - Конфигурация = Новый КонфигурацияБенчмарков(); - Для Каждого НевалидноеЗначение Из НевалидныеЗначения Цикл - - Параметры = Новый Массив(); - Параметры.Добавить(НевалидноеЗначение); - - // Действие и Проверка - Ожидаем - .Что(Конфигурация) - .Метод("УстановитьКоличествоИтераций", Параметры) - .ВыбрасываетИсключение(ТекстОшибки); - - КонецЦикла; + // Действие и Проверка + Параметры = Новый Массив(); + Параметры.Добавить(-10); + Ожидаем + .Что(Конфигурация) + .Метод("УстановитьКоличествоИтераций", Параметры) + .ВыбрасываетИсключение("Количество итераций не может быть меньше 0"); + + // Действие и Проверка + Параметры[0] = 1.5; + Ожидаем + .Что(Конфигурация) + .Метод("УстановитьКоличествоИтераций", Параметры) + .ВыбрасываетИсключение("Количество итераций должно быть целым"); КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index f39fab03..1bd6b90f 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -110,7 +110,6 @@ .УстановитьКоличествоПрогревочныхИтераций(1) .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(1000) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3); @@ -134,7 +133,6 @@ .УстановитьКоличествоПрогревочныхИтераций(1) .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.0001) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3); @@ -158,7 +156,6 @@ .УстановитьКоличествоПрогревочныхИтераций(1) .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(1000) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index a3e32b96..b85a7e0a 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\224\320\276\321\201\321\202\320\276\320\262\320\265\321\200\320\275\320\276\321\201\321\202\320\270\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -448,7 +448,6 @@ // Подготовка Конфигурация = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.01) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2); @@ -483,7 +482,6 @@ // Подготовка Конфигурация = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.01) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2); @@ -510,7 +508,6 @@ // Подготовка Конфигурация = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.01) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2); @@ -541,6 +538,7 @@ РезультатЗапускаКейса = РезультатСЗамерами(10, 15); РезультатЗапускаКейса.Статистика.ОтносительнаяПогрешность = 0.1053; Результаты = Новый РезультатЗапускаБенчмарков(); + Результаты.Конфигурация.УстановитьКоличествоИтераций(15); Результаты.Запуски.Добавить(РезультатЗапускаКейса); // Действие @@ -562,6 +560,7 @@ РезультатЗапускаКейса = РезультатСЗамерами(10, 15); РезультатЗапускаКейса.Статистика.ОтносительнаяПогрешность = 0.10004; Результаты = Новый РезультатЗапускаБенчмарков(); + Результаты.Конфигурация.УстановитьКоличествоИтераций(15); Результаты.Запуски.Добавить(РезультатЗапускаКейса); // Действие @@ -582,6 +581,7 @@ РезультатЗапускаКейса = РезультатСЗамерами(10, 15); РезультатЗапускаКейса.Статистика.ОтносительнаяПогрешность = 0.10005; Результаты = Новый РезультатЗапускаБенчмарков(); + Результаты.Конфигурация.УстановитьКоличествоИтераций(15); Результаты.Запуски.Добавить(РезультатЗапускаКейса); // Действие @@ -602,6 +602,7 @@ РезультатЗапускаКейса = РезультатСЗамерами(10, 15); РезультатЗапускаКейса.Статистика.ОтносительнаяПогрешность = 86.64; Результаты = Новый РезультатЗапускаБенчмарков(); + Результаты.Конфигурация.УстановитьКоличествоИтераций(15); Результаты.Запуски.Добавить(РезультатЗапускаКейса); // Действие diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index d6195231..a02549b1 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -90,22 +90,6 @@ КонецПроцедуры -&Тест -Процедура ТестДолжен_ЗапретитьВыключенныйАдаптивныйРежимБезКоличестваИтераций() Экспорт - - // Подготовка - Конфигурация = Новый КонфигурацияБенчмарков() - .ОтключитьАдаптивныеИтерации(); - Исполнитель = Новый ИсполнительБенчмарков(Тип("ПустойБенчмарк"), Конфигурация); - - // Действие и Проверка - Ожидаем - .Что(Исполнитель) - .Метод("Запустить") - .ВыбрасываетИсключение("При выключенных адаптивных итерациях требуется указать количество итераций."); - -КонецПроцедуры - &Тест Процедура ТестДолжен_ЗапуститьБенчмаркиИзКаталога() Экспорт diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index aa85c743..13861c87 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\320\261\321\212\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -19,7 +19,6 @@ .УстановитьКоличествоПрогревочныхИтераций(111) .УстановитьМинимальноеВремяИтерации(111) .УстановитьМинимальноеКоличествоВызововЗаИтерацию(111) - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.01) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(200) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(20) @@ -52,7 +51,6 @@ Ожидаем.Что(НоваяКонфигурация.КоличествоПрогревочныхИтераций(), "Количество прогревочных итераций").Равно(111); Ожидаем.Что(НоваяКонфигурация.МинимальноеВремяИтерации(), "Минимальное время итерации").Равно(111); Ожидаем.Что(НоваяКонфигурация.МинимальноеКоличествоВызововЗаИтерацию(), "Минимальное количество вызовов за итерацию").Равно(111); - Ожидаем.Что(НоваяКонфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(НоваяКонфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); Ожидаем.Что(НоваяКонфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); Ожидаем.Что(НоваяКонфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(200); @@ -77,16 +75,14 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ОтключитьРежимыИМониторингПамятиПриОбъединенииКонфигураций() Экспорт +Процедура ТестДолжен_ОтключитьСтатистическоеСравнениеИМониторингПамятиПриОбъединенииКонфигураций() Экспорт // Подготовка КонфигурацияПриемник = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации() .ВключитьСтатистическоеСравнениеСЭталоном() .ДобавитьМониторингПамяти(); КонфигурацияИсточник = Новый КонфигурацияБенчмарков() - .ОтключитьАдаптивныеИтерации() .ОтключитьСтатистическоеСравнениеСЭталоном() .УдалитьМониторингПамяти(); @@ -94,7 +90,6 @@ КонфигурацияПриемник.Объединить(КонфигурацияИсточник); // Проверка - Ожидаем.Что(КонфигурацияПриемник.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(КонфигурацияПриемник.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); Ожидаем.Что(КонфигурацияПриемник.ТребуетсяМониторингПамяти()).ЭтоЛожь(); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 2d0f5bf8..aed305fb 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\236\321\201\320\275\320\276\320\262\320\275\321\213\321\205\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -17,7 +17,6 @@ // Проверка Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(0); - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); @@ -44,23 +43,23 @@ Конфигурация.УстановитьКоличествоИтераций(15); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоЛожь(); КонецПроцедуры &Тест -Процедура ТестДолжен_ИспользоватьФиксированныеИтерацииПослеЯвногоОтключенияАдаптивных() Экспорт +Процедура ТестДолжен_ВернутьАдаптивныйРежимПриУстановкеНулевогоКоличестваИтераций() Экспорт // Подготовка Конфигурация = Новый КонфигурацияБенчмарков() - .ОтключитьАдаптивныеИтерации(); + .УстановитьКоличествоИтераций(15); // Действие - Конфигурация.УстановитьКоличествоИтераций(15); + Конфигурация.УстановитьКоличествоИтераций(0); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(0); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); КонецПроцедуры @@ -74,22 +73,7 @@ Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); - -КонецПроцедуры - -&Тест -Процедура ТестДолжен_СохранитьАдаптивныеИтерацииПриУстановкеХолодногоЗапуска() Экспорт - - // Подготовка - Конфигурация = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации(); - - // Действие - Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); - - // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); КонецПроцедуры @@ -122,7 +106,6 @@ .УстановитьМинимальноеКоличествоАдаптивныхИтераций(МинимальноеКоличествоИтераций); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(МаксимальнаяОтносительнаяПогрешность); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(МинимальноеКоличествоИтераций); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(МаксимальноеКоличествоИтераций); @@ -140,23 +123,18 @@ Конфигурация.УстановитьОтносительныйПорогПрактическойЗначимости(0.05); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); // Действие - Конфигурация.ВключитьАдаптивныеИтерации(); Конфигурация.ВключитьСтатистическоеСравнениеСЭталоном(); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоИстина(); // Действие - Конфигурация.ОтключитьАдаптивныеИтерации(); Конфигурация.ОтключитьСтатистическоеСравнениеСЭталоном(); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); КонецПроцедуры @@ -393,7 +371,6 @@ Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300); Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400); Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500); - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(200); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\265\321\200\320\265\320\267\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\265\321\200\320\265\320\267\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217OneScript.os" index fad4e9d8..06007f42 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\265\321\200\320\265\320\267\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\265\321\200\320\265\320\267\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217OneScript.os" @@ -510,7 +510,7 @@ ); Конфигурация = РезультатЗапуска.Конфигурация; - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.02); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(15); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(15); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 36a2f053..e377434c 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -82,7 +82,6 @@ // Проверка Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(10); - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); КонецПроцедуры @@ -100,7 +99,6 @@ // Проверка Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(15); - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); КонецПроцедуры @@ -143,12 +141,11 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ПрименитьЯвныйРежимАдаптивныхИтерацийИзJson() Экспорт +Процедура ТестДолжен_НеПрименитьНемодифицированныеРежимыСтатистическогоСравненияИМониторингаПамятиИзJson() Экспорт // Подготовка - Json = "{""Configuration"": {""IterationCount"": 15, ""AdaptiveIterations"": false, ""StatisticalComparison"": false, ""Memory"": false}}"; + Json = "{""Configuration"": {""IterationCount"": 15, ""StatisticalComparison"": false, ""Memory"": false}}"; Конфигурация = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации() .ВключитьСтатистическоеСравнениеСЭталоном() .ДобавитьМониторингПамяти(); @@ -157,30 +154,11 @@ Конфигурация.Объединить(Настройки.Конфигурация); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); КонецПроцедуры -&Тест -Процедура ТестДолжен_ВключитьАдаптивныеИтерацииПриЯвномЗначенииИзJson() Экспорт - - // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": true}}"; - Конфигурация = Новый КонфигурацияБенчмарков() - .ОтключитьАдаптивныеИтерации() - .УстановитьКоличествоИтераций(15); - - // Действие - Настройки = ПрочитатьПримерНастроек(Json); - Конфигурация.Объединить(Настройки.Конфигурация); - - // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); - -КонецПроцедуры - &Параметры(-0.01) &Параметры(1) &Параметры(1.01) @@ -214,43 +192,37 @@ // Проверка Ожидаем.Что(Настройки.Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); - Ожидаем.Что(Настройки.Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); + Ожидаем.Что(Настройки.Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); КонецПроцедуры &Тест -Процедура ТестДолжен_ПрочитатьНастройкиАдаптивныхИтераций() Экспорт - +Процедура ТестДолжен_НеСериализоватьПризнакАдаптивныхИтераций() Экспорт // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": true, ""MaxRelativeError"": 0.01, ""MinAdaptiveIterationCount"": 20, ""MaxAdaptiveIterationCount"": 50}}"; + Конфигурация = Новый КонфигурацияБенчмарков(); // Действие - Настройки = ПрочитатьПримерНастроек(Json); + Json = СериализацияОбъектовБенчмаркинга.ВJson(Конфигурация); // Проверка - Конфигурация = Настройки.Конфигурация; - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); - Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); - Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); - Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(50); - + Ожидаем.Что(Json).Не_().Содержит("""AdaptiveIterations"""); КонецПроцедуры &Тест -Процедура ТестДолжен_ВключитьАдаптивныеИтерацииСоЗначениямиПоУмолчанию() Экспорт +Процедура ТестДолжен_ПрочитатьНастройкиАдаптивныхИтераций() Экспорт // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": true}}"; + Json = "{""Configuration"": {""MaxRelativeError"": 0.01, ""MinAdaptiveIterationCount"": 20, ""MaxAdaptiveIterationCount"": 50}}"; // Действие Настройки = ПрочитатьПримерНастроек(Json); // Проверка Конфигурация = Настройки.Конфигурация; - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); - Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.1); - Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(15); - Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(100); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); + Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); + Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(50); КонецПроцедуры @@ -326,7 +298,7 @@ КонецЕсли; ПроверитьДопустимыеКлючи(Конфигурация, - "Strategy,IterationCount,AdaptiveIterations,MaxRelativeError,MinAdaptiveIterationCount,MaxAdaptiveIterationCount,StatisticalComparison,StatisticalComparisonRelativeThreshold,StatisticalComparisonSignificanceLevel,InvocationCount,WarmupCount,MinIterationTime,MinInvocationCount,ReportSorting,Memory,ArtifactsDirectory,Parameters,ParameterSources,Handlers,Columns,Exporters,RuntimeVersions", + "Strategy,IterationCount,MaxRelativeError,MinAdaptiveIterationCount,MaxAdaptiveIterationCount,StatisticalComparison,StatisticalComparisonRelativeThreshold,StatisticalComparisonSignificanceLevel,InvocationCount,WarmupCount,MinIterationTime,MinInvocationCount,ReportSorting,Memory,ArtifactsDirectory,Parameters,ParameterSources,Handlers,Columns,Exporters,RuntimeVersions", "Configuration"); ПроверитьКлючиЭлементов(Конфигурация["Parameters"], "Name,Value,TextValue,IsMethodParameter", "Parameters"); ПроверитьКлючиЭлементов(Конфигурация["ParameterSources"], "FieldName,Source", "ParameterSources"); @@ -399,7 +371,6 @@ Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300); Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400); Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500); - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(200); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index fc226ab4..206c8dd0 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -167,7 +167,6 @@ // Действие Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация); Результат.Конфигурация - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.01) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) @@ -290,7 +289,6 @@ Ожидаем.Что(ИсполняющиеСреды[0].Версия, "Исполняющая среда 1").Заполнено(); Ожидаем.Что(ИсполняющиеСреды[0].Наименование, "Исполняющая среда 1").Равно("develop"); Ожидаем.Что(ИсполняющиеСреды[0].ЭтоЭталон, "Исполняющая среда 1").ЭтоЛожь(); - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(2); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(3);