diff --git a/.bsl-language-server.json b/.bsl-language-server.json index 2a786ce..a748b4f 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,7 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас" + "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас" } } } diff --git a/docs/README.md b/docs/README.md index 1f1dfb1..99c2874 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,9 +1,11 @@ # Документация -## Статьи +## Начало работы - [Быстрый старт](БыстрыйСтарт.md) - [Запуск бенчмарков](ЗапускБенчмарков.md) -- [CLI](CLI.md) + +## Основные функции +- [Интерфейс командной строки (CLI)](CLI.md) - [Управление итерациями и вызовами](УправлениеИтерациямиИВызовами.md) - [Параметризация](Параметризация.md) - [Эталоны](Эталоны.md) @@ -16,9 +18,8 @@ - [Сортировка отчета](СортировкаОтчета.md) ## Примеры -- [Бенчмарки](../samples/benchmarks/Классы) -- [API](../samples/api) - -## Прочее +- [Примеры бенчмарков](../samples/benchmarks/Классы) +- [Примеры использования API](../samples/api) -- [Аннотации](../src/BenchmarkOneScript/annotations/Классы) \ No newline at end of file +## Технические детали +- [Описания аннотаций](../src/BenchmarkOneScript/annotations/Классы) \ No newline at end of file diff --git "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" index 2ec03f7..94a44ab 100644 --- "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" +++ "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" @@ -4,44 +4,173 @@ ## Конфигурирование -### Аннотация +### Аннотации + +**Параметры для поля класса, заданные напрямую** + +Используйте аннотацию `&Параметры` для указания фиксированного набора значений для поля класса. Можно указать значения в одной аннотации или в нескольких. -1. Параметры для полей класса ```bsl +// Вариант 1: Все значения в одной аннотации &Параметры("MD5", "SHA256") Перем АлгоритмХеширования Экспорт; + +// Вариант 2: Отдельные аннотации для каждого значения +&Параметры("MD5") +&Параметры("SHA256") +Перем АлгоритмХеширования Экспорт; ``` -2. Параметры для методов бенчмарка +**Параметры для поля класса, полученные из функции** + +Используйте аннотацию `&ИсточникПараметров` для указания функции, возвращающей коллекцию значений для поля. Функция должна быть определена в классе бенчмарка. + +```bsl +&ИсточникПараметров("ПолучитьАлгоритмыХеширования") +Перем АлгоритмХеширования Экспорт; +``` + +```bsl +Функция ПолучитьАлгоритмыХеширования() Экспорт + Значения = Новый Массив(); + Значения.Добавить("MD5"); + Значения.Добавить("SHA256"); + Возврат Значения; +КонецФункции +``` + +**Параметры для метода бенчмарка, заданные напрямую** + +Используйте аннотацию `&Параметры` для указания фиксированного набора параметров для метода бенчмарка. Каждая аннотация задает новый тестовый случай. + ```bsl -// Каждый &Параметры определяет новый тестовый случай &Параметры(50, 100) // Парам1=50, Парам2=100 &Параметры(75, 150) // Парам1=75, Парам2=150 +&Бенчмарк Процедура Бенчмарк(Парам1, Парам2) Экспорт + // Логика бенчмарка +КонецПроцедуры +``` + +**Параметры для метода бенчмарка, полученные из функции** + +Используйте аннотацию `&ИсточникПараметров` для указания функции, возвращающей коллекцию наборов параметров. Функция должна возвращать массив или таблицу значений, где каждая строка соответствует набору параметров. + +```bsl +&ИсточникПараметров("ПолучитьПараметрыБенчмарка") +&Бенчмарк +Процедура Бенчмарк(Парам1, Парам2) Экспорт + // Логика бенчмарка +КонецПроцедуры +``` + +```bsl +// Вариант 1: Таблица значений +Функция ПолучитьПараметрыБенчмарка() Экспорт + Наборы = Новый ТаблицаЗначений; + Наборы.Колонки.Добавить("Парам1"); + Наборы.Колонки.Добавить("Парам2"); + + Набор = Наборы.Добавить(); + Набор.Парам1 = 50; + Набор.Парам2 = 100; + + Набор = Наборы.Добавить(); + Набор.Парам1 = 75; + Набор.Парам2 = 150; + + Возврат Наборы; +КонецФункции + +// Вариант 2: Массив массивов +Функция ПолучитьПараметрыБенчмарка() Экспорт + Наборы = Новый Массив; + + Набор = Новый Массив; + Набор.Добавить(50); + Набор.Добавить(100); + Наборы.Добавить(Набор); + + Набор = Новый Массив; + Набор.Добавить(75); + Набор.Добавить(150); + Наборы.Добавить(Набор); + + Возврат Наборы; +КонецФункции + +// Вариант 3: Массив структур +Функция ПолучитьПараметрыБенчмарка() Экспорт + Наборы = Новый Массив; + Наборы.Добавить(Новый Структура("Парам1, Парам2", 50, 100)); + Наборы.Добавить(Новый Структура("Парам1, Парам2", 75, 150)); + Возврат Наборы; +КонецФункции ``` ### API -1. Параметры для полей класса +**Добавление параметров для поля класса** + ```bsl -// Добавление значений для конкретного поля Конфигурация .ДобавитьПараметр("АлгоритмХеширования", "MD5") .ДобавитьПараметр("АлгоритмХеширования", "SHA256"); ``` -2. Параметры для методов бенчмарка +**Указание источника параметров для поля класса по имени функции** + ```bsl -// Создание набора параметров для метода +Конфигурация.ДобавитьИсточникПараметров("АлгоритмХеширования", "ПолучитьАлгоритмыХеширования"); +``` + +Функция `ПолучитьАлгоритмыХеширования` должна быть определена в классе бенчмарка и возвращать коллекцию значений. + +**Указание источника параметров для поля класса через делегат** + +```bsl +#Использовать delegate + +Делегат = Новый Делегат(ЭтотОбъект, "ПолучитьАлгоритмыХеширования"); +Конфигурация.ДобавитьИсточникПараметров("АлгоритмХеширования", Делегат); +``` + +**Добавление параметров для метода бенчмарка** + +```bsl +// Набор 1 НаборПараметров = Новый Массив(); +НаборПараметров.Добавить(50); НаборПараметров.Добавить(100); -НаборПараметров.Добавить(200); +ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров); -// Регистрация набора +// Набор 2 +НаборПараметров = Новый Массив(); +НаборПараметров.Добавить(75); +НаборПараметров.Добавить(150); ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров); ``` -## Пример +**Указание источника параметров для метода бенчмарка по имени функции** + +```bsl +ДескрипторБенчмарка.ДобавитьИсточникПараметров("ПолучитьПараметрыБенчмарка"); +``` + +Функция `ПолучитьПараметрыБенчмарка` должна быть определена в классе бенчмарка и возвращать коллекцию значений. + +**Указание источника параметров для метода бенчмарка через делегат** + +```bsl +#Использовать delegate + +Делегат = Новый Делегат(ЭтотОбъект, "ПолучитьПараметрыБенчмарка"); +ДескрипторБенчмарка.ДобавитьИсточникПараметров(Делегат); +``` + +## Примеры + +### Пример 1: Использование аннотации `&Параметры` ```bsl &Параметры(5, 0) @@ -57,15 +186,100 @@ КонецПроцедуры ``` -### Результаты выполнения - -| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s | -|----------|--------------------:|----------:|----------:|---------:|--------:|----------:|---------:|------:| -| Бенчмарк | 0 | 100 | 10 | 110.8 ms | 39.2 us | 151.77 us | 110.9 ms | 9.022 | -| Бенчмарк | 0 | 100 | 20 | 120.9 ms | 32.3 us | 124.97 us | 120.9 ms | 8.273 | -| Бенчмарк | 0 | 200 | 10 | 210.9 ms | 30.2 us | 116.98 us | 210.9 ms | 4.742 | -| Бенчмарк | 0 | 200 | 20 | 220.9 ms | 32.9 us | 127.50 us | 220.9 ms | 4.527 | -| Бенчмарк | 5 | 100 | 10 | 115.9 ms | 19.0 us | 73.58 us | 115.9 ms | 8.627 | -| Бенчмарк | 5 | 100 | 20 | 125.8 ms | 29.4 us | 114.00 us | 125.8 ms | 7.946 | -| Бенчмарк | 5 | 200 | 10 | 215.9 ms | 26.6 us | 103.01 us | 215.9 ms | 4.632 | -| Бенчмарк | 5 | 200 | 20 | 225.9 ms | 31.2 us | 121.02 us | 226.0 ms | 4.427 | +#### Результаты выполнения + +| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Op/s | +|----------|--------------------:|----------:|----------:|---------:|---------:|----------:|------:| +| Бенчмарк | 0 | 100 | 10 | 110.9 ms | 20.43 us | 79.13 us | 9.017 | +| Бенчмарк | 0 | 100 | 20 | 120.9 ms | 25.94 us | 100.45 us | 8.273 | +| Бенчмарк | 0 | 200 | 10 | 210.8 ms | 32.87 us | 127.32 us | 4.743 | +| Бенчмарк | 0 | 200 | 20 | 220.9 ms | 21.70 us | 84.04 us | 4.527 | +| Бенчмарк | 5 | 100 | 10 | 115.8 ms | 22.05 us | 85.41 us | 8.632 | +| Бенчмарк | 5 | 100 | 20 | 125.9 ms | 23.00 us | 89.07 us | 7.941 | +| Бенчмарк | 5 | 200 | 10 | 215.9 ms | 17.41 us | 67.43 us | 4.631 | +| Бенчмарк | 5 | 200 | 20 | 225.9 ms | 28.13 us | 108.95 us | 4.427 | + +### Пример 2: Использование аннотации `&ИсточникПараметров` + +```bsl +&ИсточникПараметров("ПолучитьМножители") +Перем Множитель Экспорт; + +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +&Бенчмарк +&ИсточникПараметров("ПолучитьПараметрыБенчмарка") +Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт + + Если ТипАлгоритма = "Итеративный" Тогда + Результат = ФакториалИтеративный(Число) * Множитель; + ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда + Результат = ФакториалРекурсивный(Число) * Множитель; + КонецЕсли; + +КонецПроцедуры + +// Итеративный алгоритм вычисления факториала +Функция ФакториалИтеративный(Число) + Результат = 1; + Для Сч = 1 По Число Цикл + Результат = Результат * Сч; + КонецЦикла; + Возврат Результат; +КонецФункции + +// Рекурсивный алгоритм вычисления факториала +Функция ФакториалРекурсивный(Число) + Если Число <= 1 Тогда + Возврат 1; + КонецЕсли; + Возврат Число * ФакториалРекурсивный(Число - 1); +КонецФункции + +// Метод, возвращающий коллекцию множителей +Функция ПолучитьМножители() Экспорт + Множители = Новый Массив(); + Множители.Добавить(1); + Множители.Добавить(100); + Возврат Множители; +КонецФункции + +// Метод, возвращающий наборы параметров для бенчмарка +Функция ПолучитьПараметрыБенчмарка() Экспорт + + Наборы = Новый ТаблицаЗначений(); + Наборы.Колонки.Добавить("Число"); + Наборы.Колонки.Добавить("ТипАлгоритма"); + + // Набор 1: Маленькое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 10; + Набор.ТипАлгоритма = "Итеративный"; + + // Набор 2: Среднее число, рекурсивный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 15; + Набор.ТипАлгоритма = "Рекурсивный"; + + // Набор 3: Большое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 20; + Набор.ТипАлгоритма = "Итеративный"; + + Возврат Наборы; + +КонецФункции +``` + +#### Результаты выполнения + +| Method | Множитель | Число | ТипАлгоритма | Mean | StdErr | StdDev | Op/s | Allocated | +|--------------------|----------:|------:|--------------|----------:|----------:|----------:|--------:|----------:| +| БенчмаркФакториала | 1 | 10 | Итеративный | 6.489 us | 103.42 ns | 400.56 ns | 154,115 | 1.489 KB | +| БенчмаркФакториала | 1 | 15 | Рекурсивный | 11.853 us | 22.26 ns | 86.20 ns | 84,367 | 4.851 KB | +| БенчмаркФакториала | 1 | 20 | Итеративный | 9.746 us | 51.22 ns | 198.37 ns | 102,607 | 2.272 KB | +| БенчмаркФакториала | 100 | 10 | Итеративный | 6.610 us | 142.17 ns | 550.62 ns | 151,295 | 1.489 KB | +| БенчмаркФакториала | 100 | 15 | Рекурсивный | 12.316 us | 198.95 ns | 770.54 ns | 81,192 | 4.850 KB | +| БенчмаркФакториала | 100 | 20 | Итеративный | 9.768 us | 38.11 ns | 147.59 ns | 102,378 | 2.272 KB | \ No newline at end of file diff --git "a/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" new file mode 100644 index 0000000..d982915 --- /dev/null +++ "b/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -0,0 +1,51 @@ +#Использовать benchmark +#Использовать "../benchmarks" + +// Метод, возвращающий коллекцию множителей +Функция ПолучитьМножители() Экспорт + Множители = Новый Массив(); + Множители.Добавить(3); + Множители.Добавить(300); + Возврат Множители; +КонецФункции + +// Метод, возвращающий наборы параметров для бенчмарка +Функция ПолучитьПараметрыБенчмарка() Экспорт + + Наборы = Новый ТаблицаЗначений(); + Наборы.Колонки.Добавить("Число"); + Наборы.Колонки.Добавить("ТипАлгоритма"); + + // Набор 1: Маленькое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 13; + Набор.ТипАлгоритма = "Итеративный"; + + // Набор 2: Среднее число, рекурсивный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 18; + Набор.ТипАлгоритма = "Рекурсивный"; + + // Набор 3: Большое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 23; + Набор.ТипАлгоритма = "Итеративный"; + + Возврат Наборы; + +КонецФункции + +Тип = Тип("БенчмаркИсточникПараметров"); + +// Устанавливаем источник параметров для поля Множитель +Конфигурация = Новый КонфигурацияБенчмарков(Тип); +Конфигурация.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров +Конфигурация.ДобавитьИсточникПараметров("Множитель", Новый Делегат(ЭтотОбъект, "ПолучитьМножители")); + +// Устанавливаем источник параметров для параметров метода бенчмарка +ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); +ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркФакториала"); +ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров +ДескрипторБенчмарка.ДобавитьИсточникПараметров(Новый Делегат(ЭтотОбъект, "ПолучитьПараметрыБенчмарка")); + +Бенчмаркинг.Запустить(ДескрипторБенчмарка, Конфигурация); \ No newline at end of file diff --git "a/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" new file mode 100644 index 0000000..914ddc1 --- /dev/null +++ "b/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -0,0 +1,69 @@ +&ИсточникПараметров("ПолучитьМножители") +Перем Множитель Экспорт; + +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +&Бенчмарк +&ИсточникПараметров("ПолучитьПараметрыБенчмарка") +Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт + + Если ТипАлгоритма = "Итеративный" Тогда + Результат = ФакториалИтеративный(Число) * Множитель; + ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда + Результат = ФакториалРекурсивный(Число) * Множитель; + КонецЕсли; + +КонецПроцедуры + +// Итеративный алгоритм вычисления факториала +Функция ФакториалИтеративный(Число) + Результат = 1; + Для Сч = 1 По Число Цикл + Результат = Результат * Сч; + КонецЦикла; + Возврат Результат; +КонецФункции + +// Рекурсивный алгоритм вычисления факториала +Функция ФакториалРекурсивный(Число) + Если Число <= 1 Тогда + Возврат 1; + КонецЕсли; + Возврат Число * ФакториалРекурсивный(Число - 1); +КонецФункции + +// Метод, возвращающий коллекцию множителей +Функция ПолучитьМножители() Экспорт + Множители = Новый Массив(); + Множители.Добавить(1); + Множители.Добавить(100); + Возврат Множители; +КонецФункции + +// Метод, возвращающий наборы параметров для бенчмарка +Функция ПолучитьПараметрыБенчмарка() Экспорт + + Наборы = Новый ТаблицаЗначений(); + Наборы.Колонки.Добавить("Число"); + Наборы.Колонки.Добавить("ТипАлгоритма"); + + // Набор 1: Маленькое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 10; + Набор.ТипАлгоритма = "Итеративный"; + + // Набор 2: Среднее число, рекурсивный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 15; + Набор.ТипАлгоритма = "Рекурсивный"; + + // Набор 3: Большое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 20; + Набор.ТипАлгоритма = "Итеративный"; + + Возврат Наборы; + +КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/BenchmarkOneScript/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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" new file mode 100644 index 0000000..8d2e599 --- /dev/null +++ "b/src/BenchmarkOneScript/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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -0,0 +1,81 @@ +// Указывает имя экспортного метода класса, который возвращает коллекцию параметров для публичного поля или бенчмарка. +// Позволяет запускать тесты с различными наборами входных данных для обеспечения гибкости тестирования. +// +// Если возвращается коллекция типа Массив или ТаблицаЗначений, каждый элемент коллекции передается +// в набор параметров поля или метода бенчмарка. Для других типов возвращаемое значение передается в набор +// параметров как есть. +// +// Если метод бенчмарка принимает более одного параметра, возвращаемая коллекция должна быть одного из следующих типов: +// * Массив из Произвольный - Элементы передаются в параметры метода по порядку. +// Если количество элементов не совпадает с количеством параметров, +// возникает исключение. +// * Структура или Соответствие - Ключи коллекции сопоставляются с именами параметров метода. +// * СтрокаТаблицыЗначений - Колонки таблицы сопоставляются с именами параметров метода. +// +// Примеры: +// &ИсточникПараметров("ПолучитьВерсии") +// Перем Версии Экспорт; +// +// &ИсточникПараметров("ПолучитьПараметрыКоллекцияСтруктур") +// &ИсточникПараметров("ПолучитьПараметрыСтруктура") +// &ИсточникПараметров("ПолучитьПараметрыКоллекцияМассивов") +// &ИсточникПараметров("ПолучитьПараметрыТаблицаЗначений") +// Процедура Бенчмарк(П1, П2) +// // ... +// КонецПроцедуры +// +// Функция ПолучитьВерсии() Экспорт +// МассивВерсий = Новый Массив(); +// МассивВерсий.Добавить("1.0.0"); +// МассивВерсий.Добавить("1.5.0"); +// МассивВерсий.Добавить("2.0.0"); +// Возврат МассивВерсий; +// КонецФункции +// +// Функция ПолучитьПараметрыКоллекцияСтруктур() Экспорт +// Наборы = Новый Массив(); +// Наборы.Добавить(Новый Структура("П1, П2", 100, "Тест 1")); +// Наборы.Добавить(Новый Структура("П1, П2", 200, "Тест 2")); +// Возврат Наборы; +// КонецФункции +// +// Функция ПолучитьПараметрыСтруктура() Экспорт +// Возврат Новый Структура("П1, П2", 150, "Тест 1"); +// КонецФункции +// +// Функция ПолучитьПараметрыКоллекцияМассивов() Экспорт +// Наборы = Новый Массив(); +// +// Параметры = Новый Массив(); +// Параметры.Добавить(300); +// Параметры.Добавить("Тест 3"); +// Наборы.Добавить(Параметры); +// +// Параметры = Новый Массив(); +// Параметры.Добавить(400); +// Параметры.Добавить("Тест 4"); +// Наборы.Добавить(Параметры); +// +// Возврат Наборы; +// КонецФункции +// +// Функция ПолучитьПараметрыТаблицаЗначений() Экспорт +// Наборы = Новый ТаблицаЗначений(); +// Наборы.Колонки.Добавить("П1"); +// Наборы.Колонки.Добавить("П2"); +// +// СтрокаТаблицы = Наборы.Добавить(); +// СтрокаТаблицы.П1 = 500; +// СтрокаТаблицы.П2 = "Тест 5"; +// Наборы.Добавить(СтрокаТаблицы); +// +// СтрокаТаблицы = Наборы.Добавить(); +// СтрокаТаблицы.П1 = 600; +// СтрокаТаблицы.П2 = "Тест 6"; +// Наборы.Добавить(СтрокаТаблицы); +// +// Возврат Наборы; +// КонецФункции +&Аннотация("ИсточникПараметров") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" index 2af6551..221833d 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" @@ -28,7 +28,7 @@ // Произвольный Функция Значение(СтрокаРезультата, Колонка) Экспорт - ИмяПараметра = ИмяПараметраПоКолонке(Колонка.Имя); + ИмяПараметра = ИмяПараметра(Колонка); Для Каждого Параметр Из СтрокаРезультата.Параметры Цикл Если Параметр.Имя = ИмяПараметра Тогда @@ -42,8 +42,10 @@ Возврат Префикс() + ИмяПараметра; КонецФункции -Функция ИмяПараметраПоКолонке(ИмяКолонки) - Возврат СтрЗаменить(ИмяКолонки, Префикс(), ""); +Функция ИмяПараметра(Колонка) Экспорт + Если СтрНайти(Колонка.Имя, Префикс()) = 1 Тогда + Возврат СтрЗаменить(Колонка.Имя, Префикс(), ""); + КонецЕсли; КонецФункции Функция Префикс() diff --git "a/src/BenchmarkOneScript/core/\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/\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 a7aca7f..523d3b8 100644 --- "a/src/BenchmarkOneScript/core/\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/\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" @@ -133,10 +133,12 @@ Возврат; КонецЕсли; + // Параметры полей Для Каждого Параметр Из _Конфигурация.Параметры() Цикл ПроверитьПараметрНаВозможностьСериализации(Параметр); КонецЦикла; + // Параметры методов Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл Для Каждого НаборыПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл Для Каждого Параметр Из НаборыПараметров Цикл diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index fac6b6f..e3af0d1 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -6,6 +6,9 @@ Перем _Категория; // Строка Перем _НаборыПараметров; // Массив из Массив из ПараметрБенчмарка Перем _ИменаПараметров; // Массив из Строка +Перем _ИсточникиПараметров; // Массив из Строка, Делегат + +#Область Конструктор // Дескриптор бенчмарка // @@ -19,11 +22,16 @@ _НаборыПараметров = Новый Массив(); _ЭтоЭталон = Ложь; _Категория = ""; + _ИсточникиПараметров = Новый Массив(); ИзвлечьИменаПараметров(Объект); КонецПроцедуры +#КонецОбласти + +#Область ПрограммныйИнтерфейс + // Класс бенчмарков // // Возвращаемое значение: @@ -63,7 +71,7 @@ Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); - МассивПараметров.Добавить(Параметр); + МассивПараметров.Добавить(Параметр); КонецЦикла; Иначе @@ -91,6 +99,49 @@ КонецФункции +// Указывает экспортный метода класса, который возвращает коллекцию параметров для бенчмарка. +// +// Если возвращается коллекция типа Массив или ТаблицаЗначений, каждый элемент коллекции передается +// в набор параметров. Для других типов возвращаемое значение передается в набор как есть. +// +// Если метод бенчмарка принимает более одного параметра, возвращаемая коллекция должна быть одного из следующих типов: +// * Массив из Произвольный - Элементы передаются в параметры метода по порядку. +// Если количество элементов не совпадает с количеством параметров, +// возникает исключение. +// * Структура или Соответствие - Ключи коллекции сопоставляются с именами параметров метода. +// * СтрокаТаблицыЗначений - Колонки таблицы сопоставляются с именами параметров метода. +// +// Параметры: +// Источник - Строка - Имя экспортного метода экземпляра класса бенчмарков +// - Делегат - Делегат +// +// Возвращаемое значение: +// ЭтотОбъект +Функция ДобавитьИсточникПараметров(Источник) Экспорт + Если _ИсточникиПараметров.Найти(Источник) = Неопределено Тогда + _ИсточникиПараметров.Добавить(Источник); + КонецЕсли; + Возврат ЭтотОбъект; +КонецФункции + +// Источники параметров, используемые для запуска бенчмарков с разными наборами входных данных. +// +// Возвращаемое значение: +// Массив из Строка - Имя экспортного метода экземпляра класса бенчмарков +// Массив из Делегат - Делегат +Функция ИсточникиПараметров() Экспорт + Возврат Новый Массив(Новый ФиксированныйМассив(_ИсточникиПараметров)); +КонецФункции + +// Очищает источники параметров. +// +// Возвращаемое значение: +// ЭтотОбъект +Функция ОчиститьИсточникиПараметров() Экспорт + _ИсточникиПараметров.Очистить(); + Возврат ЭтотОбъект; +КонецФункции + // Бенчмарк используется в качестве эталонного // // Возвращаемое значение: @@ -161,6 +212,10 @@ Возврат Делегаты.Создать(Объект, _Метод, Параметры); КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура ИзвлечьИменаПараметров(Объект) РефлекторОбъекта = Новый РефлекторОбъекта(Объект); @@ -170,4 +225,6 @@ _ИменаПараметров = СвойстваМетода.Параметры.ВыгрузитьКолонку("Имя"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\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/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\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 2dd7c6d..87b227f 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\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/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\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" @@ -2,6 +2,7 @@ #Использовать asserts #Использовать tempfiles #Использовать logos +#Использовать delegate Перем _ОбъектБенчмарков; // Экземпляр класса с бенчмарками Перем _Конфигурация; // КонфигурацияБенчмарков @@ -318,9 +319,18 @@ ВызватьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, КонтекстСобытия); // Запуск бенчмарков + ПараметрыКонфигурации = _Конфигурация.Параметры(); + ПараметрыКонфигурацииИзИсточников = ПрочитатьИсточникиПараметровПолей(); + Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл - КомбинацииПараметров = КомбинаторПараметровБенчмарка.Комбинировать(ДескрипторБенчмарка, _Конфигурация); + НаборыПараметров = Новый Массив(); + ДополнитьМассив(НаборыПараметров, ПараметрыКонфигурации); + ДополнитьМассив(НаборыПараметров, ПараметрыКонфигурацииИзИсточников); + ДополнитьМассив(НаборыПараметров, ДескрипторБенчмарка.НаборыПараметров()); + ДополнитьМассив(НаборыПараметров, ПрочитатьИсточникиПараметровМетодаБенчмарка(ДескрипторБенчмарка)); + + КомбинацииПараметров = КомбинаторПараметровБенчмарка.Комбинировать(НаборыПараметров); Если КомбинацииПараметров.Количество() = 0 Тогда КомбинацииПараметров.Добавить(Новый Массив()); @@ -642,6 +652,173 @@ КонецПроцедуры +Функция ПрочитатьИсточникиПараметровПолей() + + Результат = Новый Массив(); + + Для Каждого ИсточникПараметров Из _Конфигурация.ИсточникиПараметров() Цикл + Значения = ПрочитатьИсточникПараметров(ИсточникПараметров.Источник); + Для Каждого Значение Из Значения Цикл + Результат.Добавить(Новый ПараметрБенчмарка(ИсточникПараметров.ИмяПоля, Значение, Ложь)); + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПрочитатьИсточникиПараметровМетодаБенчмарка(ДескрипторБенчмарка) + + Результат = Новый Массив(); + + Для Каждого ИсточникПараметров Из ДескрипторБенчмарка.ИсточникиПараметров() Цикл + НаборыПараметров = ПрочитатьИсточникПараметров(ИсточникПараметров); + Для Каждого Параметры Из НаборыПараметров Цикл + Результат.Добавить(ПреобразоватьВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры)); + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) + + ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); + КоличествоПараметровМетода = ИменаПараметров.Количество(); + + Если КоличествоПараметровМетода = 0 Тогда + Возврат Новый Массив(); + КонецЕсли; + + Если КоличествоПараметровМетода = 1 Тогда + Параметр = Новый ПараметрБенчмарка(ИменаПараметров[0], Параметры, Истина); + Результат = Новый Массив(); + Результат.Добавить(Параметр); + Возврат Результат; + КонецЕсли; + + ТипКоллекции = ТипЗнч(Параметры); + + Если ТипКоллекции = Тип("Массив") Тогда + Возврат ПреобразоватьМассивВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); + ИначеЕсли ТипКоллекции = Тип("Структура") Или ТипКоллекции = Тип("Соответствие") Тогда + Возврат ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); + ИначеЕсли ТипКоллекции = Тип("СтрокаТаблицыЗначений") Тогда + Возврат ПреобразоватьСтрокуТаблицыЗначенийВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); + Иначе + ВызватьИсключение СтрШаблон( + "Не поддерживается тип <%1> для передачи параметров в метод бенчмарка <%2>", + ТипКоллекции, + ДескрипторБенчмарка.Метод() + ); + КонецЕсли; + +КонецФункции + +Функция ПреобразоватьМассивВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) + + Результат = Новый Массив(); + ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); + КоличествоПараметровМетода = ИменаПараметров.Количество(); + + Если Параметры.Количество() <> КоличествоПараметровМетода Тогда + ВызватьИсключение СтрШаблон( + "Количество переданных параметров должно совпадать количеству параметров метода бенчмарка <%1>", + ДескрипторБенчмарка.Метод() + ); + КонецЕсли; + + Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл + Параметр = Новый ПараметрБенчмарка(ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); + Результат.Добавить(Параметр); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) + + Результат = Новый Массив(); + ТипКоллекции = ТипЗнч(Параметры); + + Для Каждого ИмяПараметра Из ДескрипторБенчмарка.ИменаПараметров() Цикл + + Если ТипКоллекции = Тип("Структура") Тогда + ОтсутствуетПараметр = Не Параметры.Свойство(ИмяПараметра); + Иначе + ОтсутствуетПараметр = Параметры[ИмяПараметра] = Неопределено; + КонецЕсли; + + Если ОтсутствуетПараметр Тогда + ВызватьИсключение СтрШаблон( + "Отсутствует параметр <%1> метода бенчмарка <%2> в переданной коллекции <%3>", + ИмяПараметра, + ДескрипторБенчмарка.Метод(), + ТипКоллекции + ); + КонецЕсли; + + Параметр = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); + Результат.Добавить(Параметр); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьСтрокуТаблицыЗначенийВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) + + Результат = Новый Массив(); + Колонки = Параметры.Владелец().Колонки; + + Для Каждого ИмяПараметра Из ДескрипторБенчмарка.ИменаПараметров() Цикл + + Если Колонки.Найти(ИмяПараметра) = Неопределено Тогда + ВызватьИсключение СтрШаблон( + "Отсутствует параметр <%1> метода бенчмарка <%2> в переданной таблице", + ИмяПараметра, + ДескрипторБенчмарка.Метод() + ); + КонецЕсли; + + Параметр = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); + Результат.Добавить(Параметр); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПрочитатьИсточникПараметров(Источник) + + Перем Делегат; + + Тип = ТипЗнч(Источник); + Если Тип = Тип("Делегат") Тогда + Делегат = Источник; + ИначеЕсли Тип = Тип("Строка") Тогда + Делегат = Новый Делегат(_ОбъектБенчмарков, Источник); + Иначе + ВызватьИсключение СтрШаблон("Не поддерживается тип <%1> в качестве источника параметров", Тип); + КонецЕсли; + + ПолученноеЗначение = Делегат.Исполнить(); + + Тип = ТипЗнч(ПолученноеЗначение); + Если Не (Тип = Тип("Массив") Или Тип = Тип("ТаблицаЗначений")) Тогда + Результат = Новый Массив(); + Результат.Добавить(ПолученноеЗначение); + Возврат Результат; + Иначе + Возврат ПолученноеЗначение; + КонецЕсли; + +КонецФункции + Функция ПредставлениеРезультатаИтерации(РезультатИтерации) ДлинаЭтапа = Макс( @@ -850,4 +1027,12 @@ КонецФункции +Процедура ДополнитьМассив(Приемник, Источник) + + Для Каждого Значение Из Источник Цикл + Приемник.Добавить(Значение); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\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/\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 0fef5ef..bae77c0 100644 --- "a/src/BenchmarkOneScript/core/\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/\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" @@ -20,6 +20,7 @@ Перем _КаталогАртефактов; // Строка Перем _КаталогАртефактовПоУмолчанию; // Строка Перем _Параметры; // Массив из ПараметрБенчмарка +Перем _ИсточникиПараметров; // ТаблицаЗначений Перем _Обработчики; // Соответствие Перем _Колонки; // Массив из Строка - см. КолонкиОтчетаБенчмарков Перем _Экспортеры; // Массив из см. ЭкспортерыРезультатовБенчмарков @@ -28,6 +29,8 @@ Перем _МодифицированныеПоля; // Соответствие Перем _Рефлектор; // Рефлектор, Неопределено +#Область Конструктор + // Конфигурация бенчмарков // // Параметры: @@ -45,12 +48,12 @@ _ТребуетсяМониторингПамятиПоУмолчанию = Ложь; _Параметры = Новый Массив(); + _ИсточникиПараметров = ПустаяТаблицаИсточникиПараметров(); _Обработчики = Новый Соответствие(); _Колонки = Новый Массив(); _Экспортеры = Новый Массив(); _МодифицированныеПоля = Новый Соответствие(); _ВерсииИсполняющейСреды = ПустаяТаблицаВерсииИсполняющейСреды(); - _ТребуетсяМониторингПамяти = _ТребуетсяМониторингПамятиПоУмолчанию; УстановитьСтратегию(_СтратегияПоУмолчанию); @@ -70,6 +73,8 @@ КонецПроцедуры +#КонецОбласти + #Область ПрограммныйИнтерфейс #Область СвойстваКонфигурации @@ -303,7 +308,6 @@ // // Возвращаемое значение: // Массив из ПараметрБенчмарка - Функция Параметры() Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(_Параметры)); @@ -323,25 +327,59 @@ КонецФункции -// Имена параметров (публичных полей класса) +// Указывает экспортный метода класса, который возвращает коллекцию параметров для поля. +// +// Если возвращается коллекция типа Массив или ТаблицаЗначений, каждый элемент коллекции передается +// в набор параметров поля. Для других типов возвращаемое значение передается в набор как есть. +// +// Параметры: +// ИмяПоля - Строка - Имя поля класса бенчмарков +// Источник - Строка - Имя экспортного метода класса бенчмарков +// - Делегат - Делегат // // Возвращаемое значение: -// Массив из Строка -Функция ИменаПараметров() Экспорт +// ЭтотОбъект +Функция ДобавитьИсточникПараметров(ИмяПоля, Источник) Экспорт + + НайденныеСтроки = _ИсточникиПараметров.НайтиСтроки(Новый Структура("ИмяПоля, Источник", ИмяПоля, Источник)); + Если НайденныеСтроки.Количество() > 0 Тогда + Возврат ЭтотОбъект; + КонецЕсли; - Имена = Новый Массив(); + ИсточникПараметров = _ИсточникиПараметров.Добавить(); + ИсточникПараметров.ИмяПоля = ИмяПоля; + ИсточникПараметров.Источник = Источник; - Для Каждого Параметр Из _Параметры Цикл - Имя = Параметр.Имя; - Если Имена.Найти(Имя) = Неопределено Тогда - Имена.Добавить(Имя); - КонецЕсли; - КонецЦикла; + УстановитьМодифицированность(ИмяПоля_ИсточникиПараметров()); - Возврат Имена; + Возврат ЭтотОбъект; КонецФункции +// Источники параметров, используемые для запуска бенчмарков с разными наборами входных данных. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИмяПоля - Строка - Имя поля класса бенчмарков +// * Источник - Строка - Имя экспортного метода класса бенчмарков +// - Делегат - Делегат +Функция ИсточникиПараметров() Экспорт + Возврат _ИсточникиПараметров.Скопировать(); +КонецФункции + +// Очищает источники параметров. +// +// Возвращаемое значение: +// ЭтотОбъект +Функция ОчиститьИсточникиПараметров() Экспорт + + _ИсточникиПараметров.Очистить(); + УстановитьМодифицированность(ИмяПоля_ИсточникиПараметров()); + + Возврат ЭтотОбъект; + +КонецФункции + // Устанавливает сортировку результатов в отчете // // Параметры: @@ -729,9 +767,9 @@ // // Возвращаемое значение: // ТаблицаЗначений: -// * Версия - Строка - Версия OneScript (x.x.x, stable, dev) или путь к oscript.exe. +// * Версия - Строка - Версия OneScript (x.x.x, stable, dev) или путь к oscript.exe. // * Наименование - Строка - Имя для отчетов. -// * ЭтоЭталон - Булево - Использовать как эталонную среду для сравнения результатов. +// * ЭтоЭталон - Булево - Использовать как эталонную среду для сравнения результатов. Функция ВерсииИсполняющейСреды() Экспорт Возврат _ВерсииИсполняющейСреды.Скопировать(); КонецФункции @@ -857,6 +895,7 @@ КонецЕсли; ПрименитьМодифицированныеПараметры(ЗначенияМодифицированныхПолей); + ПрименитьМодифицированныеИсточникиПараметров(ЗначенияМодифицированныхПолей); ПрименитьМодифицированныеОбработчикиСобытий(ЗначенияМодифицированныхПолей); ПрименитьМодифицированныеКолонки(ЗначенияМодифицированныхПолей); ПрименитьМодифицированныеЭкспортеры(ЗначенияМодифицированныхПолей); @@ -895,6 +934,7 @@ ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КаталогАртефактов(), КаталогАртефактов()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ТребуетсяМониторингПамяти(), ТребуетсяМониторингПамяти()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Параметры(), Параметры()); + ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ИсточникиПараметров(), ИсточникиПараметров()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ОбработчикиСобытий(), ОбработчикиСобытий()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Колонки(), Колонки()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Экспортеры(), Экспортеры()); @@ -992,6 +1032,13 @@ Возврат Таблица; КонецФункции +Функция ПустаяТаблицаИсточникиПараметров() + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("ИмяПоля"); + Таблица.Колонки.Добавить("Источник"); + Возврат Таблица; +КонецФункции + #Область Модифицированность Процедура УстановитьМодифицированность(ИмяПоля_) @@ -1071,6 +1118,20 @@ КонецПроцедуры +Процедура ПрименитьМодифицированныеИсточникиПараметров(ЗначенияМодифицированныхПолей) + + Если ЗначенияМодифицированныхПолей[ИмяПоля_ИсточникиПараметров()] = Неопределено Тогда + Возврат; + КонецЕсли; + + ОчиститьИсточникиПараметров(); + + Для Каждого Параметр Из ЗначенияМодифицированныхПолей[ИмяПоля_ИсточникиПараметров()] Цикл + ДобавитьИсточникПараметров(Параметр.ИмяПоля, Параметр.Источник); + КонецЦикла; + +КонецПроцедуры + Процедура ПрименитьМодифицированныеВерсииИсполняющейСреды(ЗначенияМодифицированныхПолей) Если ЗначенияМодифицированныхПолей[ИмяПоля_ВерсииИсполняющейСреды()] = Неопределено Тогда @@ -1129,6 +1190,10 @@ Возврат "Параметры"; КонецФункции +Функция ИмяПоля_ИсточникиПараметров() + Возврат "ИсточникиПараметров"; +КонецФункции + Функция ИмяПоля_ОбработчикиСобытий() Возврат "ОбработчикиСобытий"; КонецФункции diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\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/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 49d9acf..663fdab 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\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/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -83,13 +83,14 @@ Процедура ДобавитьКолонкиПараметров() - Для Каждого Параметр Из _Конфигурация.Параметры() Цикл - ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя)); - КонецЦикла; - - Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл - Для Каждого Имя Из ДескрипторБенчмарка.ИменаПараметров() Цикл - ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Имя)); + ДобавленныеИмена = Новый Соответствие(); + + Для Каждого Расшифровка Из _РасшифровкаРезультатов Цикл + Для Каждого Параметр Из Расшифровка.Параметры Цикл + Если ДобавленныеИмена[Параметр.Имя] = Неопределено Тогда + ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя)); + ДобавленныеИмена.Вставить(Параметр.Имя, Истина); + КонецЕсли; КонецЦикла; КонецЦикла; @@ -410,11 +411,11 @@ КонецПроцедуры Процедура ДобавитьСортировкуПоПараметрам(Сортировка) - - Для Каждого ИмяПараметра Из _Конфигурация.ИменаПараметров() Цикл - ИмяКолонки = КолонкиОтчетаБенчмарков.Параметр(ИмяПараметра); - Если КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки) Тогда - ДобавитьСортировку(Сортировка, ИмяКолонки); + + Для Каждого Колонка Из _Отчет.Колонки Цикл + ИмяПараметра = КолонкаОтчетаБенчмарковПараметр.ИмяПараметра(Колонка); + Если ЗначениеЗаполнено(ИмяПараметра) И КолонкаСодержитТолькоСериализуемыеЗначения(Колонка.Имя) Тогда + ДобавитьСортировку(Сортировка, Колонка.Имя); КонецЕсли; КонецЦикла; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\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\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/\320\232\320\273\320\260\321\201\321\201\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\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 3da4d47..ed3ab68 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\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\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/\320\232\320\273\320\260\321\201\321\201\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\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" @@ -73,6 +73,8 @@ Значение = КонвертироватьЭкспортеры(СтрокаТаблицы.Значение); ИначеЕсли СтрокаТаблицы.Имя = "ВерсииИсполняющейСреды" Тогда Значение = КонвертироватьВерсииИсполняющейСреды(СтрокаТаблицы.Значение); + ИначеЕсли СтрокаТаблицы.Имя = "ИсточникиПараметров" Тогда + Значение = КонвертироватьИсточникиПараметров(СтрокаТаблицы.Значение); Иначе ВызватьИсключение СтрШаблон("Не реализована конвертация параметра '%1'", СтрокаТаблицы.Имя); КонецЕсли; @@ -110,13 +112,9 @@ Для Каждого Строка Из ОбработчикиСобытий Цикл - Если ТипЗнч(Строка.Обработчик) <> Тип("Строка") Тогда - _Лог.Предупреждение( - "Делегат %1.%2 не будет сериализован", - ТипЗнч(Строка.Обработчик.Объект()), - Строка.Обработчик.ИмяМетода - ); - Продолжить; + Тип = ТипЗнч(Строка.Обработчик); + Если Тип <> Тип("Строка") Тогда + ВызватьИсключение СтрШаблон("Обработчик события типа <%1> не поддерживает сериализацию.", Тип); КонецЕсли; Значение = Новый Структура(); @@ -200,8 +198,35 @@ ); КонецЦикла; + Для Каждого ИсточникПараметров Из Данные.ИсточникиПараметров Цикл + Конфигурация.ДобавитьИсточникПараметров(ИсточникПараметров.ИмяПоля, ИсточникПараметров.Источник); + КонецЦикла; + Возврат Конфигурация; КонецФункции +Функция КонвертироватьИсточникиПараметров(ИсточникиПараметров) + + Результат = Новый Массив(); + + Для Каждого ИсточникПараметров Из ИсточникиПараметров Цикл + + Тип = ТипЗнч(ИсточникПараметров.Источник); + Если Тип <> Тип("Строка") Тогда + ВызватьИсключение СтрШаблон("Источник параметров типа <%1> не поддерживает сериализацию.", Тип); + КонецЕсли; + + Значение = Новый Структура(); + Значение.Вставить("ИмяПоля", ИсточникПараметров.ИмяПоля); + Значение.Вставить("Источник", ИсточникПараметров.Источник); + + Результат.Добавить(Значение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\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 fc08226..d7a5134 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\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" @@ -30,6 +30,7 @@ ПрочитатьАннотациюЭталон(СвойстваМетода, ДескрипторБенчмарка); ПрочитатьАннотациюКатегория(СвойстваМетода, ДескрипторБенчмарка); ПрочитатьАннотациюПараметры(СвойстваМетода, ДескрипторБенчмарка); + ПрочитатьАннотациюИсточникПараметров(СвойстваМетода, ДескрипторБенчмарка); Набор.Добавить(ДескрипторБенчмарка); @@ -85,4 +86,20 @@ КонецПроцедуры +Процедура ПрочитатьАннотациюИсточникПараметров(СвойстваМетода, ДескрипторБенчмарка) + + Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваМетода, "ИсточникПараметров"); + + Для Каждого Аннотация Из Аннотации Цикл + + Параметры = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение"); + + Для Каждого Значение Из Параметры Цикл + ДескрипторБенчмарка.ДобавитьИсточникПараметров(Значение); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\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/\320\234\320\276\320\264\321\203\320\273\320\270/\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 20e6cdb..0d0f52e 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\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/\320\234\320\276\320\264\321\203\320\273\320\270/\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" @@ -44,6 +44,7 @@ Для Каждого СвойстваПоля Из ТаблицаСвойств Цикл ПрочитатьАннотациюПараметры(СвойстваПоля, КонфигурацияБенчмарков); + ПрочитатьАннотациюИсточникПараметров(СвойстваПоля, КонфигурацияБенчмарков); КонецЦикла; ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, Конфигурация); @@ -154,6 +155,22 @@ КонецПроцедуры +Процедура ПрочитатьАннотациюИсточникПараметров(СвойстваПоля, Конфигурация) + + Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваПоля, "ИсточникПараметров"); + + Для Каждого Аннотация Из Аннотации Цикл + + Параметры = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение"); + + Для Каждого Значение Из Параметры Цикл + Конфигурация.ДобавитьИсточникПараметров(СвойстваПоля.Имя, Значение); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + Процедура ПрочитатьАннотациюСортировка(СвойстваКонструктора, Конфигурация) Если РаботаСАннотациямиБенчмарков.ЕстьАннотация(СвойстваКонструктора, "СортировкаПоМетоду") Тогда @@ -223,7 +240,7 @@ Для Каждого Процентиль Из Процентили Цикл Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(Процентиль)); КоличествоДобавлено = КоличествоДобавлено + 1; - КонецЦИкла; + КонецЦикла; КонецЦикла; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index e7c8b9d..ba6d361 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -3,16 +3,11 @@ // Комбинирует параметры бенчмарка // // Параметры: -// ДескрипторБенчмарка - ДескрипторБенчмарка -// Конфигурация - КонфигурацияБенчмарков +// Параметры - Массив из ПараметрБенчмарка // // Возвращаемое значение: // Массив из Массив из ПараметрБенчмарка -Функция Комбинировать(ДескрипторБенчмарка, Конфигурация) Экспорт - - Параметры = Новый Массив(); - ДополнитьПараметры(Параметры, Конфигурация.Параметры()); - ДополнитьПараметры(Параметры, ДескрипторБенчмарка.НаборыПараметров()); +Функция Комбинировать(Параметры) Экспорт ГруппыПараметров = СгруппироватьПараметры(Параметры); КомбинацииПараметров = КомбинироватьГруппы(ГруппыПараметров); @@ -33,6 +28,9 @@ Для Каждого Параметр Из Параметры Цикл Если ТипЗнч(Параметр) = Тип("Массив") Тогда + Если Параметр.Количество() = 0 Тогда + Продолжить; + КонецЕсли; Имя = "_"; ЭтоПараметрМетода = Параметр[0].ЭтоПараметрМетода; @@ -102,8 +100,6 @@ КомбинацииПараметров.Добавить(Комбинация); - ДобавитьПараметрВКомбинацию(Комбинация, Параметр); - КонецЕсли; ДобавитьПараметрВКомбинацию(Комбинация, Параметр); @@ -157,12 +153,4 @@ КонецПроцедуры -Процедура ДополнитьПараметры(Параметры, Источник) - - Для Каждого Параметр Из Источник Цикл - Параметры.Добавить(Параметр); - КонецЦикла; - -КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\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.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\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.os" index 21adc48..85614c2 100644 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\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.os" +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\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.os" @@ -1,4 +1,5 @@ &Параметры(100, 200) +&ИсточникПараметров("ПолучитьЗначения") Перем ОбщееЗначение Экспорт; &СтратегияХолодныйЗапуск diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" new file mode 100644 index 0000000..3e22036 --- /dev/null +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -0,0 +1,150 @@ +&ИсточникПараметров("ПолучитьЧисловыеЗначения") +Перем Поле Экспорт; + +Перем ПолеБезИсточника Экспорт; + +&Бенчмарк +Процедура БенчмаркБезПараметров() Экспорт +КонецПроцедуры + +&Бенчмарк +&ИсточникПараметров("ПолучитьЗначенияПараметровИзБулево") +Процедура БенчмаркОдинПараметр(Парам) Экспорт +КонецПроцедуры + +&Бенчмарк +&ИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииМассивов") +Процедура БенчмаркДваПараметра(Парам1, Парам2) Экспорт +КонецПроцедуры + +Функция ПолучитьЧисловыеЗначения() Экспорт + + Значения = Новый Массив(); + Значения.Добавить(100); + Значения.Добавить(200); + + Возврат Значения; + +КонецФункции + +Функция ПолучитьЗначенияПараметровИзБулево() Экспорт + + Значения = Новый Массив(); + Значения.Добавить(Истина); + Значения.Добавить(Ложь); + + Возврат Значения; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииМассивов() Экспорт + + НаборПараметров = Новый Массив(); + + Параметры = Новый Массив(); + Параметры.Добавить(13); + Параметры.Добавить(14); + НаборПараметров.Добавить(Параметры); + + Параметры = Новый Массив(); + Параметры.Добавить(15); + Параметры.Добавить(16); + НаборПараметров.Добавить(Параметры); + + Возврат НаборПараметров; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСтруктур() Экспорт + + НаборПараметров = Новый Массив(); + НаборПараметров.Добавить(Новый Структура("Парам1, Парам2", 1, 2)); + НаборПараметров.Добавить(Новый Структура("Парам1, Парам2", 3, 4)); + + Возврат НаборПараметров; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСоответствий() Экспорт + + НаборПараметров = Новый Массив(); + + Коллекция = Новый Соответствие(); + Коллекция.Вставить("Парам1", 5); + Коллекция.Вставить("Парам2", 6); + НаборПараметров.Добавить(Коллекция); + + Коллекция = Новый Соответствие(); + Коллекция.Вставить("Парам1", 7); + Коллекция.Вставить("Парам2", 8); + НаборПараметров.Добавить(Коллекция); + + Возврат НаборПараметров; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзТаблицыЗначения() Экспорт + + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Парам1"); + Таблица.Колонки.Добавить("Парам2"); + + Строка = Таблица.Добавить(); + Строка.Парам1 = 9; + Строка.Парам2 = 10; + + Строка = Таблица.Добавить(); + Строка.Парам1 = 11; + Строка.Парам2 = 12; + + Возврат Таблица; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзСтруктуры() Экспорт + + Возврат Новый Структура("Парам1, Парам2", 13, 14); + +КонецФункции + +Функция ПолучитьНевалидныеЗначенияПараметровДляМетодаБенчмаркаСДвумяПараметрами() Экспорт + + Значения = Новый Массив(); + Значения.Добавить("Тест"); + + Возврат Значения; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииМассивовСНевернымКоличеством() Экспорт + + НаборПараметров = Новый Массив(); + + Параметры = Новый Массив(); + Параметры.Добавить(1); + НаборПараметров.Добавить(Параметры); + + Возврат НаборПараметров; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСтруктурБезОдногоПараметра() Экспорт + + НаборПараметров = Новый Массив(); + НаборПараметров.Добавить(Новый Структура("Парам1", 1)); + + Возврат НаборПараметров; + +КонецФункции + +Функция ПолучитьЗначенияПараметровДляБенчмаркаИзТаблицыЗначенияБезОдногоПараметра() Экспорт + + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Парам1"); + + Строка = Таблица.Добавить(); + Строка.Парам1 = 9; + + Возврат Таблица; + +КонецФункции \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 44b796c..25eb804 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,3 +1,4 @@ +// BSLLS:LineLength-off // BSLLS:DuplicateStringLiteral-off // BSLLS:MagicNumber-off @@ -361,22 +362,22 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркБ"); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркВ"); Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Параметр")]).Равно(1); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркВ"); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркА"); Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Параметр")]).Равно(1); - Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркА"); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркБ"); Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Параметр")]).Равно(1); - Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркБ"); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркВ"); Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Параметр")]).Равно(2); - Ожидаем.Что(Результат.Отчет.Таблица[4][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркВ"); + Ожидаем.Что(Результат.Отчет.Таблица[4][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркА"); Ожидаем.Что(Результат.Отчет.Таблица[4][КолонкиОтчетаБенчмарков.Параметр("Параметр")]).Равно(2); - Ожидаем.Что(Результат.Отчет.Таблица[5][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркА"); + Ожидаем.Что(Результат.Отчет.Таблица[5][КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркБ"); Ожидаем.Что(Результат.Отчет.Таблица[5][КолонкиОтчетаБенчмарков.Параметр("Параметр")]).Равно(2); КонецПроцедуры @@ -701,4 +702,476 @@ .Метод("Запустить", ПараметрыМетода) .ВыбрасываетИсключение("Не найдены бенчмарки для запуска"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#Область ИсточникиПараметров + +&Тест +Процедура Тест_ДолженУстановитьИсточникПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркБезПараметров") + .ДобавитьИсточникПараметров("Получить"); + + // Действие + ИсточникиПараметров = Дескриптор.ИсточникиПараметров(); + + // Проверка + Ожидаем.Что(ИсточникиПараметров).ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0]).Равно("Получить"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженОчиститьИсточникПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркБезПараметров") + .ДобавитьИсточникПараметров("Получить") + .ОчиститьИсточникиПараметров(); + + // Действие + ИсточникиПараметров = Дескриптор.ИсточникиПараметров(); + + // Проверка + Ожидаем.Что(ИсточникиПараметров).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровДляОбщегоПоля() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБезПараметров"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(100); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(200); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСНесколькимиИсточникамиПараметровДляОбщегоПоля() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьИсточникПараметров("Поле", "ПолучитьЗначенияПараметровИзБулево"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБезПараметров"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(4); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(100); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(200); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(Ложь); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСНесколькимиИсточникамиПараметровДляОбщегоПоляНеИзКоллекции() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + Конфигурация.ДобавитьИсточникПараметров("Поле", "ПолучитьЗначенияПараметровДляБенчмаркаИзСтруктуры"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБезПараметров"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(1); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")]).ИмеетТип("Структура"); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")].Парам1).Равно(13); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")].Парам2).Равно(14); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаСОднимПараметром() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркОдинПараметр"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(Ложь); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаЧерезМассивы() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркДваПараметра"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(13); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(14); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(15); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(16); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаЧерезСтруктуры() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСтруктур"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(1); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(2); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(3); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(4); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаЧерезСоответствия() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСоответствий"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(5); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(6); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(7); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(8); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаИзТаблицы() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзТаблицыЗначения"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(9); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(10); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(11); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(12); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСНесколькимиИсточникамиПараметровМетодаБенчмарка() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСтруктур") + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСоответствий"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(4); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(1); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(2); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(3); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(4); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(5); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(6); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(7); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(8); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаЧерезДелегат() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + Делегат = Новый Делегат(ЭтотОбъект, "ПолучитьВалидныеЗначенияПараметровДляМетодаБенчмаркаСОднимПараметром"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркОдинПараметр") + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров(Делегат); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(100); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно("Тест"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускСИсточникомПараметровМетодаБенчмаркаНеИзКоллекции() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ОчиститьИсточникиПараметров(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзСтруктуры"); + + // Действие + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(1); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(13); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(14); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьВыбрасываниеИсключенияСНевернымТипомКоллекцииИсточникаПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация.ДобавитьИсточникПараметров("Поле", Новый Структура()); // Неверный тип Структура + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Тип); + ПараметрыМетода.Добавить(Конфигурация); + + // Действие и Проверка + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Не поддерживается тип <Структура> в качестве источника параметров"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьВыбрасываниеИсключенияСНевернымТипомЭлементаКоллекцииИсточникаПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ДобавитьИсточникПараметров("ПолучитьНевалидныеЗначенияПараметровДляМетодаБенчмаркаСДвумяПараметрами"); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Дескриптор); + ПараметрыМетода.Добавить(Конфигурация); + + // Действие и Проверка + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Не поддерживается тип <Строка> для передачи параметров в метод бенчмарка <БенчмаркДваПараметра>"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьВыбрасываниеИсключенияСНевернымКоличествомПараметровИзКоллекцииИсточникаПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииМассивовСНевернымКоличеством"); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Дескриптор); + ПараметрыМетода.Добавить(Конфигурация); + + // Действие и Проверка + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Количество переданных параметров должно совпадать количеству параметров метода бенчмарка <БенчмаркДваПараметра>"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьВыбрасываниеИсключенияСОтсутствующимПараметромВСтруктуреИсточникаПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзКоллекцииСтруктурБезОдногоПараметра"); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Дескриптор); + ПараметрыМетода.Добавить(Конфигурация); + + // Действие и Проверка + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Отсутствует параметр <Парам2> метода бенчмарка <БенчмаркДваПараметра> в переданной коллекции <Структура>"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьВыбрасываниеИсключенияСОтсутствующимПараметромВТаблицеИсточникаПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСИсточникамиПараметров"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков + .НайтиПоИмени("БенчмаркДваПараметра") + .ДобавитьИсточникПараметров("ПолучитьЗначенияПараметровДляБенчмаркаИзТаблицыЗначенияБезОдногоПараметра"); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Дескриптор); + ПараметрыМетода.Добавить(Конфигурация); + + // Действие и Проверка + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Отсутствует параметр <Парам2> метода бенчмарка <БенчмаркДваПараметра> в переданной таблице"); + +КонецПроцедуры + +Функция ПолучитьВалидныеЗначенияПараметровДляМетодаБенчмаркаСОднимПараметром() Экспорт + + Значения = Новый Массив(); + Значения.Добавить("Тест"); + Значения.Добавить(100); + + Возврат Значения; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 23845e7..5a40d0f 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -596,6 +596,38 @@ КонецПроцедуры +&Тест +Процедура Тест_УстановкаИсточникаПараметров() Экспорт + + Тип = Тип("БенчмаркСАннотациямиКонфигурации"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .ОчиститьИсточникиПараметров() + .ДобавитьИсточникПараметров("ОбщееЗначение", "Получить"); + + ИсточникиПараметров = Конфигурация.ИсточникиПараметров(); + + Ожидаем.Что(ИсточникиПараметров).ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0].ИмяПоля).Равно("ОбщееЗначение"); + Ожидаем.Что(ИсточникиПараметров[0].Источник).Равно("Получить"); + +КонецПроцедуры + +&Тест +Процедура Тест_ОчисткаИсточниковПараметров() Экспорт + + Тип = Тип("БенчмаркСАннотациямиКонфигурации"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .ДобавитьИсточникПараметров("ОбщееЗначение", "Получить") + .ОчиститьИсточникиПараметров(); + + ИсточникиПараметров = Конфигурация.ИсточникиПараметров(); + + Ожидаем.Что(ИсточникиПараметров).ИмеетДлину(0); + +КонецПроцедуры + &Тест Процедура Тест_ОбъединениеКонфигурацииПустойСПолностьюЗаполненной() Экспорт @@ -619,7 +651,8 @@ .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html) .ДобавитьВерсиюИсполняющейСреды("dev") - .ДобавитьВерсиюИсполняющейСреды("1.9.3"); + .ДобавитьВерсиюИсполняющейСреды("1.9.3") + .ДобавитьИсточникПараметров("col1", "ПолучитьЗначения"); НоваяКонфигурация = Новый КонфигурацияБенчмарков().Объединить(ПередаваемаяКонфигурация); @@ -641,6 +674,7 @@ Ожидаем.Что(НоваяКонфигурация.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Html); Ожидаем.Что(НоваяКонфигурация.ВерсииИсполняющейСреды()[0].Версия, "Исполняющая среда (dev)").Равно("dev"); Ожидаем.Что(НоваяКонфигурация.ВерсииИсполняющейСреды()[1].Версия, "Исполняющая среда (1.9.3)").Равно("1.9.3"); + Ожидаем.Что(НоваяКонфигурация.ИсточникиПараметров()[0].ИмяПоля, "Источники параметров").Равно("col1"); КонецПроцедуры @@ -651,15 +685,19 @@ .УстановитьКоличествоИтераций(111) .УстановитьКоличествоВызововЗаИтерацию(111) .ДобавитьКолонку(КолонкиОтчетаБенчмарков.НижнийКвартиль) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, "Обработчик1"); + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, "Обработчик1") + .ДобавитьИсточникПараметров("col1", "ПолучитьМассив"); КонфигурацияИсточник = Новый КонфигурацияБенчмарков() .УстановитьКоличествоИтераций(222) .ДобавитьКолонку(КолонкиОтчетаБенчмарков.ВерхнийКвартиль) .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, "Обработчик2"); + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, "Обработчик2") + .ДобавитьИсточникПараметров("col1", "ПолучитьТаблицуЗначений"); КонфигурацияПриемник.Объединить(КонфигурацияИсточник); + + ИсточникиПараметров = КонфигурацияПриемник.ИсточникиПараметров(); ОбработчикиСобытий = КонфигурацияПриемник.ОбработчикиСобытий(); ОбработчикСобытияПередВсеми = ОбработчикиСобытий.Найти(СобытияБенчмарков.ПередВсеми, "Событие"); ОбработчикСобытияПослеВсех = ОбработчикиСобытий.Найти(СобытияБенчмарков.ПослеВсех, "Событие"); @@ -672,7 +710,8 @@ Ожидаем.Что(КонфигурацияПриемник.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Html); Ожидаем.Что(ОбработчикСобытияПередВсеми, "Обработчики событий").ЭтоНеопределено(); Ожидаем.Что(ОбработчикСобытияПослеВсех.Обработчик, "Обработчики событий").Равно("Обработчик2"); - + Ожидаем.Что(ИсточникиПараметров[0].Источник, "Источники параметров").Равно("ПолучитьТаблицуЗначений"); + КонецПроцедуры &Тест @@ -742,6 +781,7 @@ ВерсииИсполняющейСреды = Конфигурация.ВерсииИсполняющейСреды(); Колонки = Конфигурация.Колонки(); Параметры = Конфигурация.Параметры(); + ИсточникиПараметров = Конфигурация.ИсточникиПараметров(); ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")"; @@ -771,7 +811,11 @@ Ожидаем.Что(ВерсииИсполняющейСреды[3].ЭтоЭталон, "Исполняющая среда версии 2.0.0 - эталонная").ЭтоИстина(); Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); + Ожидаем.Что(Параметры, "Параметры").ИмеетДлину(2); Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); + Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0].ИмяПоля, "Источники параметров").Равно("ОбщееЗначение"); + Ожидаем.Что(ИсточникиПараметров[0].Источник, "Источники параметров").Равно("ПолучитьЗначения"); КонецПроцедуры \ No newline at end of file