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. ## Быстрый старт 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..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" @@ -19,7 +19,7 @@ | Свойство | Значение | | -- | -- | | Стратегия | `СтратегииЗапускаБенчмарка.ПропускнаяСпособность()` | -| КоличествоИтераций | `15` | +| КоличествоИтераций | `0` - определяется адаптивным режимом | | КоличествоВызововЗаИтерацию | `0` - рассчитывать автоматически | | КоличествоПрогревочныхИтераций | `6` | | МинимальноеВремяИтерации | `100` мс | @@ -32,6 +32,7 @@ [УстановитьКоличествоИтераций](#установитьколичествоитераций)
[КоличествоИтераций](#количествоитераций)
+[ИспользуютсяАдаптивныеИтерации](#используютсяадаптивныеитерации)
[УстановитьКоличествоВызововЗаИтерацию](#установитьколичествовызововзаитерацию)
[КоличествоВызововЗаИтерацию](#количествовызововзаитерацию)
[УстановитьКоличествоПрогревочныхИтераций](#установитьколичествопрогревочныхитераций)
@@ -89,7 +90,7 @@ | Имя | Тип | Описание | | -- | -- | -- | -| КоличествоИтераций | Число | Количество измерительных итераций. | +| КоличествоИтераций | Число | Точное число временных измерительных итераций; `0` возвращает адаптивный режим. | **Возвращаемое значение:** @@ -97,7 +98,7 @@ **Описание:** -Устанавливает число измерительных итераций. +Устанавливает точное число временных измерительных итераций. Значение `0` возвращает адаптивный режим. ## КоличествоИтераций @@ -113,7 +114,24 @@ **Описание:** -Возвращает число измерительных итераций. +Возвращает заданное число временных измерительных итераций. Значение `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..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" @@ -2,7 +2,7 @@ ## Количество итераций -Контролирует количество измерительных итераций для основных этапов (измерение и память). +Задаёт точное число временных измерительных итераций. Если количество не задано, используется адаптивный режим. ### Аннотация @@ -27,11 +27,11 @@ benchos run --iterationCount 25 [FILE] ## Адаптивные итерации -По умолчанию количество измерений фиксировано. Чтобы завершать этап измерения после достижения заданной погрешности, включите адаптивный режим одним из способов ниже. +Адаптивный режим включен по умолчанию. Пока `КоличествоИтераций` не задано, число временных измерений определяется по целевой погрешности. Положительное значение `КоличествоИтераций` задаёт их точное число и имеет приоритет над адаптивным режимом; `УстановитьКоличествоИтераций(0)` возвращает адаптивный режим. ### Аннотация -`&АдаптивныеИтерации` применяется к `ПриСозданииОбъекта`, включает адаптивный режим и принимает необязательные именованные параметры: `МаксимальнаяОтносительнаяПогрешность`, `МинимальноеКоличествоИтераций` и `МаксимальноеКоличествоИтераций`. +`&АдаптивныеИтерации` применяется к `ПриСозданииОбъекта` и задаёт необязательные параметры адаптивного режима: `МаксимальнаяОтносительнаяПогрешность`, `МинимальноеКоличествоИтераций` и `МаксимальноеКоличествоИтераций`. ```bsl &АдаптивныеИтерации( @@ -49,17 +49,16 @@ benchos run --iterationCount 25 [FILE] ```bsl Конфигурация - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.1) // не более 10%: погрешность среднего / среднее при доверительной вероятности 99,9% .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(100) // не выполнять более 100 измерений .УстановитьМинимальноеКоличествоАдаптивныхИтераций(15); // выполнить не менее 15 измерений ``` -Если цель не достигнута к максимуму, запуск завершается и отчёт получает предупреждение. В фиксированном режиме это же значение служит ориентиром предупреждения о высокой относительной погрешности. Адаптивный режим применяется только к измерениям времени; фиксированный `КоличествоИтераций` остаётся режимом по умолчанию. +Если цель не достигнута к максимуму, запуск завершается и отчёт получает предупреждение. В фиксированном режиме это же значение служит ориентиром предупреждения о высокой относительной погрешности. ### CLI -В CLI передача любой из опций адаптивного режима включает его: +В CLI эти опции задают параметры адаптивного режима: ```bash benchos run --maxRelativeError 0.1 --minAdaptiveIterationCount 15 --maxAdaptiveIterationCount 100 [FILE] @@ -79,8 +78,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..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` | Число | `15` | Больше `0`. | -| `AdaptiveIterations` | Булево | `false` | Включает остановку измерений по целевой погрешности. | +| `IterationCount` | Число | `0` | `0` включает адаптивное определение числа временных измерений; положительное целое задаёт их точное число. | | `MaxRelativeError` | Число | `0.1` | Цель адаптивного режима: `Error / Mean`, больше `0`. | | `MinAdaptiveIterationCount` | Число | `15` | Минимум измерений до проверки погрешности, не меньше `2`; при статистическом сравнении - не меньше `15`. | | `MaxAdaptiveIterationCount` | Число | `100` | Максимум измерений в адаптивном режиме, не меньше минимума. | @@ -140,7 +139,11 @@ benchos run --settings settings.json ./benchmarks 3. Аннотации класса бенчмарка. 4. Значения по умолчанию. -Значение из `--settings` переопределяет аннотацию, только если отличается от библиотечного значения по умолчанию. Поэтому `"IterationCount": 15` не переопределяет `&КоличествоИтераций(10)`. Чтобы переопределить аннотацию через `--settings`, задайте значение, отличное от значения по умолчанию. +### Особые случаи + +Для отдельных типов настроек действуют уточнения к этому порядку. + +Значение из `--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/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\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 060f5822..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") &Тип("Число") &Геттер("ЦелеваяОтносительнаяПогрешность") @@ -134,7 +129,7 @@ Процедура ПриСозданииОбъекта(Тип = Неопределено) СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность(); - КоличествоИтерацийПоУмолчанию = 15; + КоличествоИтерацийПоУмолчанию = 0; МаксимальнаяОтносительнаяПогрешностьПоУмолчанию = 0.1; МинимальноеКоличествоАдаптивныхИтерацийПоУмолчанию = 15; МаксимальноеКоличествоАдаптивныхИтерацийПоУмолчанию = 100; @@ -155,10 +150,10 @@ _ИсполняющиеСреды = Новый Массив(); _МодифицированныеПоля = Новый Соответствие(); _Рефлектор = Новый Рефлектор(); + _КоличествоИтераций = КоличествоИтерацийПоУмолчанию; УдалитьМониторингПамяти(); УстановитьСтратегию(СтратегияПоУмолчанию); - УстановитьКоличествоИтераций(КоличествоИтерацийПоУмолчанию); УстановитьКоличествоВызововЗаИтерацию(КоличествоВызововЗаИтерациюПоУмолчанию); УстановитьКоличествоПрогревочныхИтераций(КоличествоПрогревочныхИтерацийПоУмолчанию); УстановитьМинимальноеВремяИтерации(МинимальноеВремяИтерацииПоУмолчанию); @@ -170,7 +165,6 @@ УстановитьМинимальноеКоличествоАдаптивныхИтераций(МинимальноеКоличествоАдаптивныхИтерацийПоУмолчанию); УстановитьОтносительныйПорогПрактическойЗначимости(ОтносительныйПорогПрактическойЗначимостиПоУмолчанию); УстановитьУровеньЗначимостиСтатистическогоСравнения(УровеньЗначимостиСтатистическогоСравненияПоУмолчанию); - ОтключитьАдаптивныеИтерации(); ОтключитьСтатистическоеСравнениеСЭталоном(); _МодифицированныеПоля.Очистить(); @@ -189,7 +183,16 @@ Подстроки = Новый Массив(); Подстроки.Добавить(СтрШаблон("Стратегия = ""%1""", Стратегия())); - Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); + + Если ИспользуютсяАдаптивныеИтерации() Тогда + Подстроки.Добавить(СтрШаблон( + "Измерительных итераций = адаптивно (%1–%2)", + МинимальноеКоличествоАдаптивныхИтераций(), + МаксимальноеКоличествоАдаптивныхИтераций() + )); + Иначе + Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); + КонецЕсли; Если Стратегия() = СтратегииЗапускаБенчмарка.ПропускнаяСпособность() Тогда @@ -229,10 +232,11 @@ #Область СвойстваКонфигурации -// Устанавливает количество итераций для основных этапов (ЭтапыБенчмарка.Измерение(), ЭтапыБенчмарка.Память()) +// Устанавливает количество временных измерений. // // Используется для тонкой настройки баланса между точностью измерений и временем выполнения теста. // Увеличение итераций повышает стабильность результатов, но увеличивает общее время прогона. +// Положительное значение имеет приоритет над адаптивными итерациями, ноль возвращает адаптивный режим. // // Параметры: // КоличествоИтераций - Число @@ -241,8 +245,7 @@ // ЭтотОбъект Функция УстановитьКоличествоИтераций(КоличествоИтераций) Экспорт - Ожидаем.Что(КоличествоИтераций, "Количество итераций").ИмеетТип("Число"); - Ожидаем.Что(КоличествоИтераций, "Количество итераций не может быть меньше 1").Больше(0); + ПроверитьКоличествоИтераций(КоличествоИтераций); _КоличествоИтераций = КоличествоИтераций; УстановитьМодифицированность(ИмяПоля_КоличествоИтераций()); @@ -251,7 +254,7 @@ КонецФункции -// Количество итераций для основных этапов (ЭтапыБенчмарка.Измерение(), ЭтапыБенчмарка.Память()) +// Количество временных измерений. Ноль означает, что число определяется адаптивным режимом. // // Возвращаемое значение: // Число @@ -323,39 +326,13 @@ КонецФункции -// Включает адаптивное завершение измерений. -// -// Возвращаемое значение: -// ЭтотОбъект -Функция ВключитьАдаптивныеИтерации() Экспорт - - _АдаптивныеИтерацииВключены = Истина; - УстановитьМодифицированность(ИмяПоля_АдаптивныеИтерацииВключены()); - - Возврат ЭтотОбъект; - -КонецФункции - -// Отключает адаптивное завершение измерений. -// -// Возвращаемое значение: -// ЭтотОбъект -Функция ОтключитьАдаптивныеИтерации() Экспорт - - _АдаптивныеИтерацииВключены = Ложь; - УстановитьМодифицированность(ИмяПоля_АдаптивныеИтерацииВключены()); - - Возврат ЭтотОбъект; - -КонецФункции - -// Признак включения адаптивного завершения измерений. +// Возвращает признак применения адаптивного режима для временных измерений. // // Возвращаемое значение: // Булево -Функция АдаптивныеИтерацииВключены() Экспорт +Функция ИспользуютсяАдаптивныеИтерации() Экспорт - Возврат _АдаптивныеИтерацииВключены; + Возврат _КоличествоИтераций = 0; КонецФункции @@ -634,7 +611,7 @@ КонецФункции -// Устанавливает стратегию запуска бенчмарков +// Устанавливает стратегию запуска бенчмарков. // // Параметры: // Стратегия - см. СтратегииЗапускаБенчмарка @@ -1321,13 +1298,6 @@ ЗначенияМодифицированныхПолей ); - ПрименитьМодифицированныйРежим( - ИмяПоля_АдаптивныеИтерацииВключены(), - "ВключитьАдаптивныеИтерации", - "ОтключитьАдаптивныеИтерации", - ЗначенияМодифицированныхПолей - ); - ПрименитьМодифицированныйРежим( ИмяПоля_СтатистическоеСравнениеВключено(), "ВключитьСтатистическоеСравнениеСЭталоном", @@ -1520,7 +1490,6 @@ Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт ДесериализоватьЭкспортеры(ПрочитанныеСвойства); - ОпределитьМодифицированныеПоля(); Валидировать(); @@ -1571,7 +1540,11 @@ ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); КонецЕсли; - Если _АдаптивныеИтерацииВключены Тогда + Если _КоличествоИтераций <> 0 Тогда + ПроверитьКоличествоИтераций(_КоличествоИтераций); + КонецЕсли; + + Если ИспользуютсяАдаптивныеИтерации() Тогда ПроверитьНастройкиАдаптивныхИтераций( _МаксимальнаяОтносительнаяПогрешность, _МинимальноеКоличествоАдаптивныхИтераций, @@ -1588,6 +1561,14 @@ КонецПроцедуры +Процедура ПроверитьКоличествоИтераций(КоличествоИтераций) + + Ожидаем.Что(КоличествоИтераций, "Количество итераций").ИмеетТип("Число"); + Ожидаем.Что(КоличествоИтераций, "Количество итераций не может быть меньше 0").БольшеИлиРавно(0); + Ожидаем.Что(КоличествоИтераций = Цел(КоличествоИтераций), "Количество итераций должно быть целым").ЭтоИстина(); + +КонецПроцедуры + Процедура ПроверитьНастройкиАдаптивныхИтераций(МаксимальнаяОтносительнаяПогрешность, МинимальноеКоличествоИтераций, МаксимальноеКоличествоИтераций) Ожидаем.Что(МаксимальнаяОтносительнаяПогрешность, "Максимальная относительная погрешность").ИмеетТип("Число"); @@ -1741,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 ed3a5d5b..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" @@ -97,7 +97,7 @@ // Проверяет границы адаптивного измерения и его совместимость со статистическим сравнением. Процедура ПроверитьНастройкиАдаптивныхИтераций() - Если Не _Конфигурация.АдаптивныеИтерацииВключены() Тогда + Если Не _Конфигурация.ИспользуютсяАдаптивныеИтерации() Тогда Возврат; КонецЕсли; 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/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/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\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 5ee3b3b0..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" @@ -105,11 +105,11 @@ // Подготовка Тип = Тип("ПустойБенчмарк"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(1000) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3); @@ -128,11 +128,11 @@ // Подготовка Тип = Тип("БенчмаркСНестабильнымВременем"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()) - .ВключитьАдаптивныеИтерации() .УстановитьЦелевуюОтносительнуюПогрешность(0.0001) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3); @@ -151,11 +151,11 @@ // Подготовка Тип = Тип("ПустойБенчмарк"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(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 1110f02c..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" @@ -44,8 +44,10 @@ Процедура ТестДолжен_ЗавершитьАдаптивныеИтерацииПослеМинимума() Экспорт // Подготовка - Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию() - .ВключитьАдаптивныеИтерации() + Конфигурация = Новый КонфигурацияБенчмарков() + .УстановитьКоличествоВызововЗаИтерацию(1) + .УстановитьКоличествоПрогревочныхИтераций(1) + .УстановитьМинимальноеВремяИтерации(10) .УстановитьЦелевуюОтносительнуюПогрешность(1000000) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2); @@ -63,8 +65,7 @@ Процедура ТестДолжен_ЗапретитьАдаптивныеИтерацииСОбратнымиГраницами() Экспорт // Подготовка - Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию() - .ВключитьАдаптивныеИтерации() + Конфигурация = Новый КонфигурацияБенчмарков() .УстановитьМинимальноеКоличествоАдаптивныхИтераций(3) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(2); Исполнитель = Новый ИсполнительБенчмарков(Тип("ПустойБенчмарк"), Конфигурация); @@ -78,8 +79,7 @@ Процедура ТестДолжен_ЗапретитьАдаптивныеИтерацииСНедостаточнымМинимумомДляСтатистическогоСравнения() Экспорт // Подготовка - Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию() - .ВключитьАдаптивныеИтерации() + Конфигурация = Новый КонфигурацияБенчмарков() .УстановитьМинимальноеКоличествоАдаптивныхИтераций(2) .УстановитьМаксимальноеКоличествоАдаптивныхИтераций(15) .ВключитьСтатистическоеСравнениеСЭталоном(); 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..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 @@ КонфигурацияПриемник.Объединить(КонфигурацияИсточник); // Проверка - Ожидаем.Что(КонфигурацияПриемник.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(КонфигурацияПриемник.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); Ожидаем.Что(КонфигурацияПриемник.ТребуетсяМониторингПамяти()).ЭтоЛожь(); @@ -314,10 +309,10 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ОбъединитьКонфигурацииСДефолтнымиЗначениями() Экспорт +Процедура ТестДолжен_ОбъединитьКонфигурацииСЯвноУстановленнымиЗначениями() Экспорт // Подготовка - КоличествоИтерацийПоУмолчанию = 15; + КоличествоИтераций = 15; КонфигурацияПриемник = Новый КонфигурацияБенчмарков() .УстановитьКоличествоИтераций(111) @@ -325,14 +320,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..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" @@ -10,17 +10,73 @@ #Область Тесты &Тест -Процедура ТестДолжен_ИспользоватьФиксированноеКоличествоИтерацийПоУмолчанию() Экспорт +Процедура ТестДолжен_ИспользоватьАдаптивныеИтерацииПоУмолчанию() Экспорт // Подготовка и Действие Конфигурация = Новый КонфигурацияБенчмарков(); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(0); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); КонецПроцедуры +&Тест +Процедура ТестДолжен_ПоказыватьАдаптивныйРежимВПредставленииКонфигурации() Экспорт + + // Подготовка и Действие + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Проверка + Ожидаем.Что(Строка(Конфигурация), "Представление конфигурации").Содержит("Измерительных итераций = адаптивно (15–100)"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СохранитьАдаптивныеИтерацииПриЯвномКоличестве() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Действие + Конфигурация.УстановитьКоличествоИтераций(15); + + // Проверка + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ВернутьАдаптивныйРежимПриУстановкеНулевогоКоличестваИтераций() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков() + .УстановитьКоличествоИтераций(15); + + // Действие + Конфигурация.УстановитьКоличествоИтераций(0); + + // Проверка + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(0); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ИспользоватьАдаптивныеИтерацииПоУмолчаниюДляХолодногоЗапуска() Экспорт + + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Действие + Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); + + // Проверка + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ИспользоватьПрофильДостоверностиСтатистикиПоУмолчанию() Экспорт @@ -50,7 +106,6 @@ .УстановитьМинимальноеКоличествоАдаптивныхИтераций(МинимальноеКоличествоИтераций); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(МаксимальнаяОтносительнаяПогрешность); Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(МинимальноеКоличествоИтераций); Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(МаксимальноеКоличествоИтераций); @@ -68,23 +123,18 @@ Конфигурация.УстановитьОтносительныйПорогПрактическойЗначимости(0.05); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); // Действие - Конфигурация.ВключитьАдаптивныеИтерации(); Конфигурация.ВключитьСтатистическоеСравнениеСЭталоном(); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоИстина(); // Действие - Конфигурация.ОтключитьАдаптивныеИтерации(); Конфигурация.ОтключитьСтатистическоеСравнениеСЭталоном(); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоЛожь(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоЛожь(); КонецПроцедуры @@ -321,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 9be4b16d..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" @@ -69,10 +69,10 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_НеПереопределятьНастройкуЗначениемПоУмолчаниюИзJson() Экспорт +Процедура ТестДолжен_СчитатьНулевоеКоличествоИтерацийИзJsonНезаданным() Экспорт // Подготовка - Json = "{""Configuration"": {""IterationCount"": 15}}"; + Json = "{""Configuration"": {""IterationCount"": 0}}"; Конфигурация = Новый КонфигурацияБенчмарков() .УстановитьКоличествоИтераций(10); @@ -85,6 +85,44 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_ПрименитьЯвноеПоложительноеКоличествоИтерацийИзJson() Экспорт + + // Подготовка + Json = "{""Configuration"": {""IterationCount"": 15}}"; + Конфигурация = Новый КонфигурацияБенчмарков() + .УстановитьКоличествоИтераций(10); + + // Действие + Настройки = ПрочитатьПримерНастроек(Json); + Конфигурация.Объединить(Настройки.Конфигурация); + + // Проверка + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(15); + +КонецПроцедуры + +&Параметры(-1) +&Параметры(1.5) +&Тест +Процедура ТестДолжен_ОтклонитьНекорректноеКоличествоИтерацийИзJson(КоличествоИтераций) Экспорт + + // Подготовка + Json = СтрШаблон("{""Configuration"": {""IterationCount"": %1}}", КоличествоИтераций); + ОшибкаПроверки = Ложь; + + // Действие + Попытка + ПрочитатьПримерНастроек(Json); + Исключение + ОшибкаПроверки = Истина; + КонецПопытки; + + // Проверка + Ожидаем.Что(ОшибкаПроверки).ЭтоИстина(); + +КонецПроцедуры + &Тест Процедура ТестДолжен_НеСчитатьПустойМассивПараметровИзJsonПереопределением() Экспорт @@ -103,12 +141,11 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_НеПереопределятьРежимыЗначениямиПоУмолчаниюИзJson() Экспорт +Процедура ТестДолжен_НеПрименитьНемодифицированныеРежимыСтатистическогоСравненияИМониторингаПамятиИзJson() Экспорт // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": false, ""StatisticalComparison"": false, ""Memory"": false}}"; + Json = "{""Configuration"": {""IterationCount"": 15, ""StatisticalComparison"": false, ""Memory"": false}}"; Конфигурация = Новый КонфигурацияБенчмарков() - .ВключитьАдаптивныеИтерации() .ВключитьСтатистическоеСравнениеСЭталоном() .ДобавитьМониторингПамяти(); @@ -117,7 +154,6 @@ Конфигурация.Объединить(Настройки.Конфигурация); // Проверка - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); Ожидаем.Что(Конфигурация.СтатистическоеСравнениеСЭталономВключено()).ЭтоИстина(); Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); @@ -146,38 +182,47 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ПрочитатьНастройкиАдаптивныхИтераций() Экспорт +Процедура ТестДолжен_СохранитьАдаптивныеИтерацииПриХолодномЗапускеИзJson() Экспорт // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": true, ""MaxRelativeError"": 0.01, ""MinAdaptiveIterationCount"": 20, ""MaxAdaptiveIterationCount"": 50}}"; + Json = "{""Configuration"": {""Strategy"": ""ХолодныйЗапуск""}}"; // Действие Настройки = ПрочитатьПримерНастроек(Json); // Проверка - Конфигурация = Настройки.Конфигурация; - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); - Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); - Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); - Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(50); + Ожидаем.Что(Настройки.Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск()); + Ожидаем.Что(Настройки.Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); КонецПроцедуры &Тест -Процедура ТестДолжен_ВключитьАдаптивныеИтерацииСоЗначениямиПоУмолчанию() Экспорт +Процедура ТестДолжен_НеСериализоватьПризнакАдаптивныхИтераций() Экспорт + // Подготовка + Конфигурация = Новый КонфигурацияБенчмарков(); + + // Действие + Json = СериализацияОбъектовБенчмаркинга.ВJson(Конфигурация); + + // Проверка + Ожидаем.Что(Json).Не_().Содержит("""AdaptiveIterations"""); +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПрочитатьНастройкиАдаптивныхИтераций() Экспорт // Подготовка - Json = "{""Configuration"": {""AdaptiveIterations"": true}}"; + Json = "{""Configuration"": {""MaxRelativeError"": 0.01, ""MinAdaptiveIterationCount"": 20, ""MaxAdaptiveIterationCount"": 50}}"; // Действие Настройки = ПрочитатьПримерНастроек(Json); // Проверка Конфигурация = Настройки.Конфигурация; - Ожидаем.Что(Конфигурация.АдаптивныеИтерацииВключены()).ЭтоИстина(); - Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.1); - Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(15); - Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(100); + Ожидаем.Что(Конфигурация.ИспользуютсяАдаптивныеИтерации()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.ЦелеваяОтносительнаяПогрешность()).Равно(0.01); + Ожидаем.Что(Конфигурация.МинимальноеКоличествоАдаптивныхИтераций()).Равно(20); + Ожидаем.Что(Конфигурация.МаксимальноеКоличествоАдаптивныхИтераций()).Равно(50); КонецПроцедуры @@ -253,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"); @@ -326,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); 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, ЭтапыБенчмарка.Память()); КонецПроцедуры