From 0c3ba6b043c9511be0c94a71580110cbccb8c8db Mon Sep 17 00:00:00 2001 From: Ivanov Dmitry Date: Mon, 8 Sep 2025 11:05:39 +0300 Subject: [PATCH 01/18] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 + ...20\260\321\200\320\272\320\276\320\262.os" | 380 +++++++++++++----- ...20\260\321\200\320\272\320\276\320\262.os" | 63 +++ ...21\200\320\260\321\202\320\276\321\200.os" | 116 ++++++ ...21\200\320\260\321\206\320\270\320\270.os" | 6 +- 5 files changed, 456 insertions(+), 111 deletions(-) create mode 100644 "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" create mode 100644 "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" diff --git a/packagedef b/packagedef index 5052b0b..19f206d 100644 --- a/packagedef +++ b/packagedef @@ -32,6 +32,8 @@ .ЗависитОт("tempfiles", "1.1.1") .ЗависитОт("packageinfo", "1.0") .ЗависитОт("1commands", "1.5.0") + .ЗависитОт("jason", "0.3.0") + .ЗависитОт("validate", "0.3.0") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("coverage") .ИсполняемыйФайл("src/BenchmarkOneScript/cmd/main.os", "benchos") \ 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 bae77c0..8e56200 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" @@ -1,33 +1,96 @@ #Использовать asserts #Использовать delegate +#Использовать validate +&Сериализуемое("Стратегия") +&Тип("Строка") +&Геттер("Стратегия") Перем _Стратегия; // см. СтратегииЗапускаБенчмарка -Перем _СтратегияПоУмолчанию; // см. СтратегииЗапускаБенчмарка + +&Сериализуемое("КоличествоИтераций") +&Тип("Число") +&Геттер("КоличествоИтераций") Перем _КоличествоИтераций; // Число -Перем _КоличествоИтерацийПоУмолчанию; // Число + +&Сериализуемое("КоличествоВызововЗаИтерацию") +&Тип("Число") +&Геттер("КоличествоВызововЗаИтерацию") Перем _КоличествоВызововЗаИтерацию; // Число -Перем _КоличествоВызововЗаИтерациюПоУмолчанию; // Число + +&Сериализуемое("КоличествоПрогревочныхИтераций") +&Тип("Число") +&Геттер("КоличествоПрогревочныхИтераций") Перем _КоличествоПрогревочныхИтераций; // Число -Перем _КоличествоПрогревочныхИтерацийПоУмолчанию; // Число + +&Сериализуемое("МинимальноеВремяИтерации") +&Тип("Число") +&Геттер("МинимальноеВремяИтерации") Перем _МинимальноеВремяИтерации; // Число - мс -Перем _МинимальноеВремяИтерацииПоУмолчанию; // Число - мс + +&Сериализуемое("МинимальноеКоличествоВызововЗаИтерацию") +&Тип("Число") +&Геттер("МинимальноеКоличествоВызововЗаИтерацию") Перем _МинимальноеКоличествоВызововЗаИтерацию; // Число -Перем _МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию; // Число + +&Сериализуемое("СортировкаОтчета") +&Тип("Строка") +&Геттер("СортировкаОтчета") Перем _СортировкаОтчета; // см. СортировкиОтчетаБенчмарков -Перем _СортировкаОтчетаПоУмолчанию; // см. СортировкиОтчетаБенчмарков + +&Сериализуемое("ТребуетсяМониторингПамяти") +&Тип("Булево") +&Геттер("ТребуетсяМониторингПамяти") Перем _ТребуетсяМониторингПамяти; // Булево -Перем _ТребуетсяМониторингПамятиПоУмолчанию; // Булево + +&Сериализуемое("КаталогАртефактов") +&Тип("Строка") +&Геттер("КаталогАртефактов") Перем _КаталогАртефактов; // Строка -Перем _КаталогАртефактовПоУмолчанию; // Строка + +&Сериализуемое("Параметры") +&Тип("Массив") +&Геттер("Параметры") Перем _Параметры; // Массив из ПараметрБенчмарка + +&Сериализуемое("ИсточникиПараметров") +&Тип("ТаблицаЗначений") +&Геттер("ИсточникиПараметров") Перем _ИсточникиПараметров; // ТаблицаЗначений -Перем _Обработчики; // Соответствие + +&Сериализуемое("Обработчики") +&Тип("ТаблицаЗначений") +&Геттер("ОбработчикиСобытий") +Перем _Обработчики; // ТаблицаЗначений + +&Сериализуемое("Колонки") +&Тип("Массив") +&Геттер("Колонки") Перем _Колонки; // Массив из Строка - см. КолонкиОтчетаБенчмарков + +&Несериализуемое +&Геттер("Экспортеры") Перем _Экспортеры; // Массив из см. ЭкспортерыРезультатовБенчмарков + +&Сериализуемое("Экспортеры") +&Тип("Массив") +Перем _ЭкспортерыСериализуемое; // Массив из Строка + +&Сериализуемое("ВерсииИсполняющейСреды") +&Тип("ТаблицаЗначений") +&Геттер("ВерсииИсполняющейСреды") Перем _ВерсииИсполняющейСреды; // ТаблицаЗначений +&Несериализуемое +Перем _ЗначенияПолейПоУмолчанию; // Соответствие + +&Несериализуемое Перем _МодифицированныеПоля; // Соответствие -Перем _Рефлектор; // Рефлектор, Неопределено + +&Несериализуемое +Перем _ОписанияПолей; // ТаблицаЗначений, Неопределено + +&Несериализуемое +Перем _Рефлектор; // Рефлектор #Область Конструктор @@ -37,35 +100,37 @@ // ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) - _СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность; - _КоличествоИтерацийПоУмолчанию = 15; - _КоличествоВызововЗаИтерациюПоУмолчанию = 0; - _КоличествоПрогревочныхИтерацийПоУмолчанию = 6; - _МинимальноеВремяИтерацииПоУмолчанию = 100; - _МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию = 4; - _СортировкаОтчетаПоУмолчанию = СортировкиОтчетаБенчмарков.ПоУмолчанию; - _КаталогАртефактовПоУмолчанию = ".\BenchmarkArtifacts"; - _ТребуетсяМониторингПамятиПоУмолчанию = Ложь; + СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность; + КоличествоИтерацийПоУмолчанию = 15; + КоличествоВызововЗаИтерациюПоУмолчанию = 0; + КоличествоПрогревочныхИтерацийПоУмолчанию = 6; + МинимальноеВремяИтерацииПоУмолчанию = 100; + МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию = 4; + СортировкаОтчетаПоУмолчанию = СортировкиОтчетаБенчмарков.ПоУмолчанию; + КаталогАртефактовПоУмолчанию = ".\BenchmarkArtifacts"; + ТребуетсяМониторингПамятиПоУмолчанию = Ложь; _Параметры = Новый Массив(); _ИсточникиПараметров = ПустаяТаблицаИсточникиПараметров(); - _Обработчики = Новый Соответствие(); + _Обработчики = ПустаяТаблицаОбработчикиСобытий(); _Колонки = Новый Массив(); _Экспортеры = Новый Массив(); - _МодифицированныеПоля = Новый Соответствие(); _ВерсииИсполняющейСреды = ПустаяТаблицаВерсииИсполняющейСреды(); - _ТребуетсяМониторингПамяти = _ТребуетсяМониторингПамятиПоУмолчанию; + _ТребуетсяМониторингПамяти = ТребуетсяМониторингПамятиПоУмолчанию; + _МодифицированныеПоля = Новый Соответствие(); + _Рефлектор = Новый Рефлектор(); - УстановитьСтратегию(_СтратегияПоУмолчанию); - УстановитьКоличествоИтераций(_КоличествоИтерацийПоУмолчанию); - УстановитьКоличествоВызововЗаИтерацию(_КоличествоВызововЗаИтерациюПоУмолчанию); - УстановитьКоличествоПрогревочныхИтераций(_КоличествоПрогревочныхИтерацийПоУмолчанию); - УстановитьМинимальноеВремяИтерации(_МинимальноеВремяИтерацииПоУмолчанию); - УстановитьМинимальноеКоличествоВызововЗаИтерацию(_МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию); - УстановитьСортировкуОтчета(_СортировкаОтчетаПоУмолчанию); - УстановитьКаталогАртефактов(_КаталогАртефактовПоУмолчанию); + УстановитьСтратегию(СтратегияПоУмолчанию); + УстановитьКоличествоИтераций(КоличествоИтерацийПоУмолчанию); + УстановитьКоличествоВызововЗаИтерацию(КоличествоВызововЗаИтерациюПоУмолчанию); + УстановитьКоличествоПрогревочныхИтераций(КоличествоПрогревочныхИтерацийПоУмолчанию); + УстановитьМинимальноеВремяИтерации(МинимальноеВремяИтерацииПоУмолчанию); + УстановитьМинимальноеКоличествоВызововЗаИтерацию(МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию); + УстановитьСортировкуОтчета(СортировкаОтчетаПоУмолчанию); + УстановитьКаталогАртефактов(КаталогАртефактовПоУмолчанию); _МодифицированныеПоля.Очистить(); + ЗапомнитьЗначенияПолейПоУмолчанию(); Если Не ИсточникБенчмарков = Неопределено Тогда ИзвлекательКонфигурацииБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); @@ -485,11 +550,15 @@ // ЭтотОбъект Функция ДобавитьОбработчикСобытия(ИмяСобытия, Обработчик) Экспорт - Если _Обработчики[ИмяСобытия] = Неопределено Тогда - _Обработчики[ИмяСобытия] = Новый Соответствие(); + Отбор = Новый Структура("Событие, Обработчик", ИмяСобытия, Обработчик); + Если _Обработчики.НайтиСтроки(Отбор).Количество() > 0 Тогда + Возврат ЭтотОбъект; КонецЕсли; - _Обработчики[ИмяСобытия][Обработчик] = Новый Структура("ЕстьПараметры"); + СтрокаТаблицы = _Обработчики.Добавить(); + СтрокаТаблицы.Событие = ИмяСобытия; + СтрокаТаблицы.Обработчик = Обработчик; + УстановитьМодифицированность(ИмяПоля_ОбработчикиСобытий()); Возврат ЭтотОбъект; @@ -505,9 +574,12 @@ // ЭтотОбъект Функция УдалитьОбработчикиСобытия(ИмяСобытия) Экспорт - Если Не _Обработчики[ИмяСобытия] = Неопределено Тогда - _Обработчики[ИмяСобытия].Очистить(); - КонецЕсли; + НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл + _Обработчики.Удалить(СтрокаТаблицы); + КонецЦикла; + + УстановитьМодифицированность(ИмяПоля_ОбработчикиСобытий()); Возврат ЭтотОбъект; @@ -534,26 +606,7 @@ // * Обработчик - Строка - Экспортный метод экземпляра класса бенчмарков // - Делегат - Делегат Функция ОбработчикиСобытий() Экспорт - - Результат = Новый ТаблицаЗначений(); - Результат.Колонки.Добавить("Событие"); - Результат.Колонки.Добавить("Обработчик"); - - Для Каждого ОбработчикиСобытия Из _Обработчики Цикл - - Событие = ОбработчикиСобытия.Ключ; - Обработчики = ОбработчикиСобытия.Значение; - - Для Каждого КлючЗначение Из Обработчики Цикл - СтрокаТаблицы = Результат.Добавить(); - СтрокаТаблицы.Событие = Событие; - СтрокаТаблицы.Обработчик = КлючЗначение.Ключ; - КонецЦикла; - - КонецЦикла; - - Возврат Результат; - + Возврат _Обработчики.Скопировать(); КонецФункции // Обработчики события @@ -568,13 +621,9 @@ Результат = Новый Массив(); - ОбработчикиСобытия = _Обработчики[ИмяСобытия]; - Если ОбработчикиСобытия = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Для Каждого Строка Из ОбработчикиСобытия Цикл - Результат.Добавить(Строка.Ключ); + НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл + Результат.Добавить(СтрокаТаблицы.Обработчик); КонецЦикла; Возврат Результат; @@ -594,23 +643,12 @@ МассивДелегатов = Новый Массив(); - ОбработчикиСобытия = _Обработчики[ИмяСобытия]; - Если ОбработчикиСобытия = Неопределено Тогда - Возврат МассивДелегатов; - КонецЕсли; - - Для Каждого Строка Из ОбработчикиСобытия Цикл - - Обработчик = Строка.Ключ; - Описание = Строка.Значение; + НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл - Делегат = ДелегатОбработчика(Обработчик, ОбъектБенчмарков); - - Если Описание.ЕстьПараметры = Неопределено Тогда - Описание.ЕстьПараметры = ЕстьПараметрыМетода(Делегат); - КонецЕсли; + Делегат = ДелегатОбработчика(СтрокаТаблицы.Обработчик, ОбъектБенчмарков); - Если Описание.ЕстьПараметры Тогда + Если ЕстьПараметрыМетода(Делегат) Тогда Делегат.УстановитьПараметры(Контекст); КонецЕсли; @@ -653,6 +691,7 @@ Инд = _Колонки.Найти(Колонка); Если Не Инд = Неопределено Тогда _Колонки.Удалить(Инд); + УстановитьМодифицированность(ИмяПоля_Колонки()); КонецЕсли; Возврат ЭтотОбъект; @@ -923,23 +962,13 @@ Таблица.Колонки.Добавить("Значение"); Таблица.Колонки.Добавить("Модифицирован", Новый ОписаниеТипов("Булево")); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Стратегия(), Стратегия()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КоличествоИтераций(), КоличествоИтераций()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КоличествоВызововЗаИтерацию(), КоличествоВызововЗаИтерацию()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КоличествоПрогревочныхИтераций(), КоличествоПрогревочныхИтераций()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_МинимальноеВремяИтерации(), МинимальноеВремяИтерации()); - ДобавитьСтрокуВТаблицу( - Таблица, ИмяПоля_МинимальноеКоличествоВызововЗаИтерацию(), МинимальноеКоличествоВызововЗаИтерацию()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_СортировкаОтчета(), СортировкаОтчета()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КаталогАртефактов(), КаталогАртефактов()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ТребуетсяМониторингПамяти(), ТребуетсяМониторингПамяти()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Параметры(), Параметры()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ИсточникиПараметров(), ИсточникиПараметров()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ОбработчикиСобытий(), ОбработчикиСобытий()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Колонки(), Колонки()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Экспортеры(), Экспортеры()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ВерсииИсполняющейСреды(), ВерсииИсполняющейСреды()); - + Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл + СтрокаТаблицы = Таблица.Добавить(); + СтрокаТаблицы.Имя = ОписаниеПоля.Имя; + СтрокаТаблицы.Значение = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); + СтрокаТаблицы.Модифицирован = _МодифицированныеПоля[ОписаниеПоля.Имя]; + КонецЦикла; + Возврат Таблица; КонецФункции @@ -989,6 +1018,27 @@ #КонецОбласти +#Область Сериализация + +Процедура ОбработатьПередСериализацией() Экспорт + + ПроверитьОбработчикиСобытийПередСериализацией(); + ПроверитьИсточникиПараметровПередСериализацией(); + ОбработатьЭкспортерыПередСериализацией(); + +КонецПроцедуры + +Процедура ОбработатьПослеДесериализации() Экспорт + + ОбработатьПараметрыПослеДесериализации(); + ОбработатьЭкспортерыПослеДесериализации(); + ОпределитьМодифицированныеПоля(); + ВыполнитьВалидациюПослеДесериализации(); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1013,15 +1063,67 @@ КонецФункции -Функция ДобавитьСтрокуВТаблицу(Таблица, Имя, Значение) +Процедура ОпределитьМодифицированныеПоля() + + Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл + Значение = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); + ЗначениеПоУмолчанию = _ЗначенияПолейПоУмолчанию[ОписаниеПоля.Имя]; + + Если Не Компаратор.Совпадают(Значение, ЗначениеПоУмолчанию) Тогда + УстановитьМодифицированность(ОписаниеПоля.Имя); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ЗапомнитьЗначенияПолейПоУмолчанию() + + _ЗначенияПолейПоУмолчанию = Новый Соответствие(); + + Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл + _ЗначенияПолейПоУмолчанию[ОписаниеПоля.Имя] = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); + КонецЦикла; + +КонецПроцедуры + +Функция ОписанияПолей() + + Если Не _ОписанияПолей = Неопределено Тогда + Возврат _ОписанияПолей; + КонецЕсли; + + _ОписанияПолей = Новый ТаблицаЗначений(); + _ОписанияПолей.Колонки.Добавить("Имя"); + _ОписанияПолей.Колонки.Добавить("ИмяВнутреннее"); + _ОписанияПолей.Колонки.Добавить("Геттер"); + + СвойстваОбъекта = _Рефлектор.ПолучитьТаблицуСвойств(ЭтотОбъект, Истина); - Строка = Таблица.Добавить(); - Строка.Имя = Имя; - Строка.Значение = Значение; - Строка.Модифицирован = _МодифицированныеПоля[Имя]; + Для Каждого Свойство Из СвойстваОбъекта Цикл + ИмяПоля = Сред(Свойство.Имя, 2); - Возврат Строка; + АннотацияГеттер = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Геттер"); + Если АннотацияГеттер = Неопределено Тогда + Продолжить; + КонецЕсли; + + Геттер = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияГеттер, "Значение", Свойство.Имя); + + ОписаниеПоля = _ОписанияПолей.Добавить(); + ОписаниеПоля.Имя = ИмяПоля; + ОписаниеПоля.ИмяВнутреннее = Свойство.Имя; + ОписаниеПоля.Геттер = Геттер; + КонецЦикла; + Возврат _ОписанияПолей; + +КонецФункции + +Функция ПустаяТаблицаОбработчикиСобытий() + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Событие"); + Таблица.Колонки.Добавить("Обработчик"); + Возврат Таблица; КонецФункции Функция ПустаяТаблицаВерсииИсполняющейСреды() @@ -1039,18 +1141,80 @@ Возврат Таблица; КонецФункции -#Область Модифицированность +#Область Сериализация + +Процедура ПроверитьОбработчикиСобытийПередСериализацией() Экспорт + + Для Каждого Строка Из _Обработчики Цикл + Тип = ТипЗнч(Строка.Обработчик); + Если Тип <> Тип("Строка") Тогда + ВызватьИсключение СтрШаблон("Обработчик события типа <%1> не поддерживает сериализацию.", Тип); + КонецЕсли; + КонецЦикла; -Процедура УстановитьМодифицированность(ИмяПоля_) - _МодифицированныеПоля[ИмяПоля_] = Истина; КонецПроцедуры -Процедура ПрименитьМодифицированноеПоле(ИмяПоля, МетодУстановки, ЗначенияМодифицированныхПолей) +Процедура ПроверитьИсточникиПараметровПередСериализацией() + + Для Каждого ИсточникПараметров Из _ИсточникиПараметров Цикл + Тип = ТипЗнч(ИсточникПараметров.Источник); + Если Тип <> Тип("Строка") Тогда + ВызватьИсключение СтрШаблон("Источник параметров типа <%1> не поддерживает сериализацию.", Тип); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьЭкспортерыПередСериализацией() + + _ЭкспортерыСериализуемое = Новый Массив; + + Для Каждого Экспортер Из _Экспортеры Цикл + _ЭкспортерыСериализуемое.Добавить(Строка(ТипЗнч(Экспортер))); + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьЭкспортерыПослеДесериализации() + + Для Каждого СтрокаТип Из _ЭкспортерыСериализуемое Цикл + ДобавитьЭкспортер(Новый(СтрокаТип)); + КонецЦикла; + +КонецПроцедуры - Если _Рефлектор = Неопределено Тогда - _Рефлектор = Новый Рефлектор(); +Процедура ОбработатьПараметрыПослеДесериализации() + + Параметры = Новый ФиксированныйМассив(_Параметры); + + ОчиститьПараметры(); + Для Каждого ПараметрДанные Из Параметры Цикл + ДобавитьПараметр(ПараметрДанные.Имя, ПараметрДанные.Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура ВыполнитьВалидациюПослеДесериализации() + + Валидатор = Новый Валидатор; + + Результат = Валидатор.Валидировать(ЭтотОбъект); + Если Результат.Количество() > 0 Тогда + ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область Модифицированность + +Процедура УстановитьМодифицированность(ИмяПоля) + _МодифицированныеПоля[ИмяПоля] = Истина; +КонецПроцедуры + +Процедура ПрименитьМодифицированноеПоле(ИмяПоля, МетодУстановки, ЗначенияМодифицированныхПолей) + Если Не ЗначенияМодифицированныхПолей[ИмяПоля] = Неопределено Тогда Параметры = Новый Массив(); 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\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..7eddd89 --- /dev/null +++ "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,63 @@ +#Использовать logos +#Использовать jason + +Перем _Лог; // Лог + +// Сериализатор конфигурации бенчмарков +Процедура ПриСозданииОбъекта() + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторБенчмарков"); +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Сериализует конфигурацию бенчмарков в JSON-файл +// +// Параметры: +// Дескрипторы - КоллекцияДескрипторовБенчмарков - Коллекция дескрипторов бенчмарков +// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков +// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация +Процедура ЗаписатьВJson(Конфигурация, ИмяФайла) Экспорт + + _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); + + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); + + Сериализатор = Новый СериализаторJson(); + + Конфигурация.ОбработатьПередСериализацией(); + + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); + ЗаписьJSON.ЗаписатьБезОбработки(Сериализатор.Сериализовать(Конфигурация)); + ЗаписьJSON.Закрыть(); + + _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); + +КонецПроцедуры + +// Десериализует конфигурацию бенчмарков из JSON-файла +// +// Параметры: +// ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. +// +// Возвращаемое значение: +// КонфигурацияБенчмарков +Функция ПрочитатьИзJson(ИмяФайла) Экспорт + + _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); + + ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, "UTF-8"); + Строка = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Десериализатор = Новый ДесериализаторJson(); + Конфигурация = Десериализатор.Десериализовать(Строка, Тип("КонфигурацияБенчмарков")); + Конфигурация.ОбработатьПослеДесериализации(); + + _Лог.Отладка("Завершение чтения файла: %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\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" new file mode 100644 index 0000000..0d98075 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" @@ -0,0 +1,116 @@ +#Область ПрограммныйИнтерфейс + +// Определяет, совпадают ли значения двух объектов по их внутреннему содержанию. +// +// Параметры: +// Значение1 - Проивзольный - Первый объект для сравнения +// Значение2 - Проивзольный - Второй объект для сравнения +// +// Возвращаемое значение: +// Булево +Функция Совпадают(Значение1, Значение2) Экспорт + + Тип = ТипЗнч(Значение1); + + Если Тип <> ТипЗнч(Значение2) Тогда + Возврат Ложь; + ИначеЕсли Тип = Тип("Массив") Тогда + Возврат МассивыСовпадают(Значение1, Значение2); + ИначеЕсли Тип = Тип("Соответствие") Тогда + Возврат СоответствияСовпадают(Значение1, Значение2); + ИначеЕсли Тип = Тип("Структура") Тогда + Возврат СтруктурыСовпадают(Значение1, Значение2); + ИначеЕсли Тип = Тип("ТаблицаЗначений") Тогда + Возврат ТаблицыСовпадают(Значение1, Значение2); + Иначе + Возврат Значение1 = Значение2; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция МассивыСовпадают(Массив1, Массив2) + + Если Массив1.Количество() <> Массив2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Инд = 0 По Массив1.ВГраница() Цикл + Если Не Совпадают(Массив1[Инд], Массив2[Инд]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция СоответствияСовпадают(Соответствие1, Соответствие2) + + Если Соответствие1.Количество() <> Соответствие2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого КлючЗначение Из Соответствие1 Цикл + Ключ = КлючЗначение.Ключ; + Если Не Совпадают(Соответствие1[Ключ], Соответствие2[КлючЗначение.Ключ]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция СтруктурыСовпадают(Структура1, Структура2) + + Если Структура1.Количество() <> Структура2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого КлючЗначение Из Структура1 Цикл + Ключ = КлючЗначение.Ключ; + Если Не Структура2.Свойство(Ключ) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не Совпадают(Структура1[Ключ], Структура2[КлючЗначение.Ключ]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ТаблицыСовпадают(Таблица1, Таблица2) + + Если Таблица1.Количество() <> Таблица2.Количество() + Или Таблица1.Колонки.Количество() <> Таблица2.Колонки.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого Колонка Из Таблица1.Колонки Цикл + Если Таблица2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Для Инд = 0 По Таблица1.Количество() - 1 Цикл + СтрокаТаблицы1 = Таблица1[Инд]; + СтрокаТаблицы2 = Таблица2[Инд]; + Для Каждого Колонка Из Таблица1.Колонки Цикл + Если Не Совпадают(СтрокаТаблицы1[Колонка.Имя], СтрокаТаблицы2[Колонка.Имя]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +#КонецОбласти \ 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 5a40d0f..04a690d 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" @@ -766,9 +766,9 @@ ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); - Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); - Сериализатор.СериализоватьВJSON(Конфигурация, ИмяФайла); - КонфигурацияПрочитанная = Сериализатор.ДесериализоватьИзJSON(ИмяФайла); + Сериализатор = Новый СериализаторБенчмарков(); + Сериализатор.ЗаписатьВJson(Конфигурация, ИмяФайла); + КонфигурацияПрочитанная = Сериализатор.ПрочитатьИзJson(ИмяФайла); ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(КонфигурацияПрочитанная); From 3d656981ea586bee0ccf4581db0c8d85520daa86 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Oct 2025 01:29:32 +0300 Subject: [PATCH 02/18] =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F/=D0=B4=D0=B5=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/CLI.md | 2 +- packagedef | 14 +- ...20\277\321\203\321\201\320\272\320\260.os" | 76 +++-- ...20\274\320\260\321\200\320\272\320\260.os" | 70 ++++- ...20\260\321\200\320\272\320\276\320\262.os" | 42 +-- ...20\260\320\273\320\276\320\263\320\260.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 23 +- ...20\260\321\200\320\272\320\276\320\262.os" | 33 +-- ...20\274\320\260\321\200\320\272\320\260.os" | 2 +- ...20\274\320\260\321\200\320\272\320\260.os" | 51 ++++ ...20\260\321\200\320\272\320\276\320\262.os" | 232 --------------- ...20\260\321\200\320\272\320\276\320\262.os" | 34 ++- ...20\260\321\200\320\272\320\276\320\262.os" | 9 +- ...00\320\272\320\276\320\262\320\222Json.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 3 +- ...20\260\321\200\320\272\320\276\320\262.os" | 3 +- ...20\274\320\260\321\200\320\272\320\260.os" | 26 +- ...20\276\320\262\320\224\321\202\320\276.os" | 9 + ...21\203\320\265\320\274\320\276\320\265.os" | 9 + ...21\203\320\265\320\274\320\276\320\265.os" | 18 ++ ...0\260\321\202\320\276\321\200JsonBench.os" | 280 ++++++++++++++++++ ...0\260\321\202\320\276\321\200JsonBench.os" | 197 ++++++++++++ ...21\200\320\260\321\206\320\270\320\270.os" | 5 +- ...20\260\321\200\320\272\320\276\320\262.os" | 14 +- ...21\200\320\260\321\206\320\270\320\270.os" | 33 +-- ...20\260\321\200\320\272\320\276\320\262.os" | 105 +++++++ ...20\273\320\276\320\275\320\276\320\262.os" | 1 + 27 files changed, 907 insertions(+), 388 deletions(-) create mode 100644 "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" delete mode 100644 "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" rename "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" => "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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" (57%) create mode 100644 "src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" create mode 100644 "src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" create mode 100644 "src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" create mode 100644 "src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" create mode 100644 "src/BenchmarkOneScript/jason/\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\200JsonBench.os" create mode 100644 "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" diff --git a/docs/CLI.md b/docs/CLI.md index 0401683..ae60179 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -23,7 +23,7 @@ benchos run [OPTIONS] [FILE] | `-e`, `--exporters` | Форматы [экспорта результатов](ЭкспортРезультатов.md) (`md`, `json`, `xml`, `html`) | `-e json,xml` | | `-a`, `--artifacts` | Каталог для сохранения результатов | `-a path/to/file` | | `-r`, `--recursive` | Рекурсивный поиск в поддиректориях | | -| `-c`, `--config` | Файл конфигурации бенчмарков в формате JSON | `-c path/to/config.json` | +| `--settings` | Файл настроек бенчмарков в формате JSON | `--settings path/to/settings.json` | ## Примеры diff --git a/packagedef b/packagedef index 19f206d..d824de1 100644 --- a/packagedef +++ b/packagedef @@ -1,4 +1,4 @@ -Процедура ПередСборкой(РабочийКаталог) Экспорт +Процедура ПередСборкой(РабочийКаталог) Экспорт ПодготовкаКомпонентов = ЗагрузитьСценарий("build/ПодготовкаКомпонентов.os"); ПодготовкаКомпонентов.Подготовить(); КонецПроцедуры @@ -7,6 +7,7 @@ .Версия("0.6.0") .Автор("Dmitry Ivanov") .АдресАвтора("https://github.com/Stivo182") + .АдресРепозитория("https://github.com/Stivo182/BenchmarkOneScript") .Описание("Бенчмаркинг на OneScript") .ВерсияСреды("1.9.3") .ВключитьФайл("src/BenchmarkOneScript") @@ -17,11 +18,11 @@ .ВключитьФайл("package-loader.os") .ВключитьФайл("README.md") .ВключитьФайл("LICENSE") - .ЗависитОт("cpuinfo", "1.3.0") + .ЗависитОт("cpuinfo", "1.4.0") .ЗависитОт("delegate", "1.0.0") .ЗависитОт("annotations", "1.3.1") - .ЗависитОт("asserts", "1.4.0") - .ЗависитОт("autumn", "4.3.10") + .ЗависитОт("asserts", "1.5.0") + .ЗависитОт("autumn", "4.3.11") .ЗависитОт("autumn-cli", "1.2.0") .ЗависитОт("coloratos", "0.3.0") .ЗависитОт("fluent", "0.6.1") @@ -30,10 +31,11 @@ .ЗависитОт("logos", "1.7.1") .ЗависитОт("fs", "1.2.0") .ЗависитОт("tempfiles", "1.1.1") - .ЗависитОт("packageinfo", "1.0") + .ЗависитОт("packageinfo", "1.1.1") .ЗависитОт("1commands", "1.5.0") - .ЗависитОт("jason", "0.3.0") .ЗависитОт("validate", "0.3.0") + .ЗависитОт("reflector", "0.7.1") + .ЗависитОт("collectionos", "0.8.2") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("coverage") .ИсполняемыйФайл("src/BenchmarkOneScript/cmd/main.os", "benchos") \ No newline at end of file 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 3ce69bf..f0efaf1 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" @@ -44,9 +44,9 @@ &Флаг Перем _ПропускнаяСпособность; // Булево, Неопределено -&Опция(Имя = "c config", Описание = "Файл конфигурации бенчмарков в формате JSON") +&Опция(Имя = "settings", Описание = "Файл настроек бенчмарков в формате JSON") &ТСтрока -Перем _ФайлКонфигурации; // Строка +Перем _ФайлНастроек; // Строка &Опция(Имя = "runtime", Описание = "Версии OneScript через запятую (current, stable, dev, x.x.x)") &ТСтрока @@ -62,8 +62,11 @@ &ТМассивСтрок Перем _МассивФайлов; // Массив из Строка +Перем _Лог; // Лог + &КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков") Процедура ПриСозданииОбъекта() + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark"); КонецПроцедуры &ВыполнениеКоманды @@ -71,32 +74,55 @@ УстановитьРежимВоркер(); - Для Каждого Каталог Из КаталогиБенчмарков() Цикл - Бенчмаркинг.ЗапуститьИзКаталога(Каталог, _Рекурсивно, ПрочитатьКонфигурацию()); - КонецЦикла; + ПодключенныеТипы = ПодключитьТипы(); + Настройки = ПрочитатьНастройки(); + Конфигурация = ПрочитатьКонфигурацию(Настройки); - Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл - Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); - Если Не Тип = Неопределено Тогда - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - Конфигурация.Объединить(ПрочитатьКонфигурацию()); - Бенчмаркинг.Запустить(Тип, Конфигурация); + Для Каждого Тип Из ПодключенныеТипы Цикл + + КонфигурацияТипа = Новый КонфигурацияБенчмарков(Тип); + КонфигурацияТипа.Объединить(Конфигурация); + + Если Не Настройки = Неопределено И Настройки.ДескрипторыБенчмарков.Количество() > 0 Тогда + Источник = Настройки.ДескрипторыБенчмарков; + Иначе + Источник = Тип; КонецЕсли; + + Попытка + Бенчмаркинг.Запустить(Источник, КонфигурацияТипа); + Исключение + _Лог.Ошибка("Возникла ошибка при запуске бенчмарков <%1>: %2", + Тип, + ОписаниеОшибки()); + КонецПопытки; + КонецЦикла; КонецПроцедуры -Функция КаталогиБенчмарков() - - Каталоги = Новый Массив(); +Функция ПрочитатьНастройки() - Для Каждого ИмяФайла Из _МассивФайлов Цикл - Если ФС.КаталогСуществует(ИмяФайла) Тогда - Каталоги.Добавить(ИмяФайла); + Если Не ЗначениеЗаполнено(_ФайлНастроек) Тогда + Возврат Неопределено; + КонецЕсли; + + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Возврат Сериализатор.ПрочитатьИзJson(_ФайлНастроек); + +КонецФункции + +Функция ПодключитьТипы() + + ПодключенныеТипы = Новый Массив(); + Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл + Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); + Если Не Тип = Неопределено Тогда + ПодключенныеТипы.Добавить(Тип); КонецЕсли; КонецЦикла; - Возврат Каталоги; + Возврат ПодключенныеТипы; КонецФункции @@ -105,7 +131,12 @@ Файлы = Новый Массив(); Для Каждого ИмяФайла Из _МассивФайлов Цикл - Если Не ФС.КаталогСуществует(ИмяФайла) Тогда + Если ФС.КаталогСуществует(ИмяФайла) Тогда + Файлы = НайтиФайлы(ИмяФайла, , _Рекурсивно); + Для Каждого ИмяФайлаВКаталоге Из Файлы Цикл + Файлы.Добавить(ИмяФайлаВКаталоге); + КонецЦикла; + Иначе Файлы.Добавить(ПолноеИмяФайлаСценария(ИмяФайла)); КонецЕсли; КонецЦикла; @@ -131,11 +162,10 @@ КонецФункции -Функция ПрочитатьКонфигурацию() +Функция ПрочитатьКонфигурацию(Настройки) - Если ЗначениеЗаполнено(_ФайлКонфигурации) Тогда - Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); - Конфигурация = Сериализатор.ДесериализоватьИзJSON(_ФайлКонфигурации); + Если Настройки <> Неопределено Тогда + Конфигурация = Настройки.Конфигурация; Иначе Конфигурация = Новый КонфигурацияБенчмарков(); КонецЕсли; 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 b2280d6..1e65213 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" @@ -1,21 +1,47 @@ #Использовать delegate +#Использовать validate +#Использовать reflector +#Использовать "../../dto" +&Сериализуемое("Тип") +&Тип("Тип") +&Заполнено Перем _Тип; // Тип - Класс бенчмарков + +&Сериализуемое("Метод") +&Тип("Строка") +&Заполнено Перем _Метод; // Строка - Метод бенчмарка + +&Сериализуемое("ЭтоЭталон") +&Тип("Булево") Перем _ЭтоЭталон; // Булево + +&Сериализуемое("Категория") +&Тип("Строка") Перем _Категория; // Строка -Перем _НаборыПараметров; // Массив из Массив из ПараметрБенчмарка -Перем _ИменаПараметров; // Массив из Строка + +&Сериализуемое("НаборыПараметров") +&Тип("Массив") +&ДляКаждого +&Тип("ПараметрыМетодаБенчмарка") +Перем _НаборыПараметров; // Массив из ПараметрыМетодаБенчмарка + +&Сериализуемое("ИсточникиПараметров") +&Тип("Массив") Перем _ИсточникиПараметров; // Массив из Строка, Делегат +&Несериализуемое +Перем _ИменаПараметров; // Массив из Строка + #Область Конструктор // Дескриптор бенчмарка // // Параметры: -// Объект - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// Объект - Произвольный - Тип или экземпляр класса бенчмарков // Метод - Строка - Метод бенчмарка -Процедура ПриСозданииОбъекта(Объект, Метод) +Процедура ПриСозданииОбъекта(Объект = Неопределено, Метод = "") _Тип = ?(ТипЗнч(Объект) = Тип("Тип"), Объект, ТипЗнч(Объект)); _Метод = Метод; @@ -24,7 +50,9 @@ _Категория = ""; _ИсточникиПараметров = Новый Массив(); - ИзвлечьИменаПараметров(Объект); + Если Не Объект = Неопределено Тогда + ИзвлечьИменаПараметров(Объект); + КонецЕсли; КонецПроцедуры @@ -51,7 +79,7 @@ // Наборы параметров, используемые для запуска бенчмарков с различными входными данными. // // Возвращаемое значение: -// Массив из Массив из ПараметрБенчмарка +// Массив из ПараметрыМетодаБенчмарка Функция НаборыПараметров() Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(_НаборыПараметров)); КонецФункции @@ -67,7 +95,7 @@ // ЭтотОбъект Функция ДобавитьПараметры(Параметры) Экспорт - МассивПараметров = Новый Массив(); + ПараметрыМетода = Новый ПараметрыМетодаБенчмарка(); КоличествоТребуемыхПараметров = _ИменаПараметров.Количество(); Если КоличествоТребуемыхПараметров = 0 Тогда @@ -90,7 +118,7 @@ Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); - МассивПараметров.Добавить(Параметр); + ПараметрыМетода.Добавить(Параметр); КонецЦикла; Иначе @@ -104,11 +132,11 @@ КонецЕсли; Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[0], Параметры, Истина); - МассивПараметров.Добавить(Параметр); + ПараметрыМетода.Добавить(Параметр); КонецЕсли; - _НаборыПараметров.Добавить(МассивПараметров); + _НаборыПараметров.Добавить(ПараметрыМетода); Возврат ЭтотОбъект; @@ -239,6 +267,17 @@ Возврат Делегаты.Создать(Объект, _Метод, Параметры); КонецФункции +#Область Сериализация + +Процедура ПослеДесериализации() Экспорт + + Валидировать(); + ИзвлечьИменаПараметров(Новый(_Тип)); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -254,4 +293,15 @@ КонецПроцедуры +Процедура Валидировать() + + Валидатор = Новый Валидатор; + + Результат = Валидатор.Валидировать(ЭтотОбъект); + Если Результат.Количество() > 0 Тогда + ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ 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 c770a46..9ee96a6 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" @@ -193,8 +193,8 @@ // --worker СтрокаКоманды.Добавить("--worker"); - // --config - СтрокаКоманды.Добавить("--config"); + // --settings + СтрокаКоманды.Добавить("--settings"); СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаКонфигурации)); // FILE @@ -242,8 +242,8 @@ ПутьКФайлу = _МенеджерВременныхФайлов.СоздатьФайл("json"); - Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); - Сериализатор.СериализоватьВJSON(Конфигурация, ПутьКФайлу); + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Сериализатор.ЗаписатьВJson(_ДескрипторыБенчмарков, Конфигурация, ПутьКФайлу); Возврат ПутьКФайлу; @@ -283,7 +283,7 @@ Файлы = НайтиФайлы(Каталог, "*-report.json"); Для Каждого Файл Из Файлы Цикл - Данные = Сериализатор.ДесериализоватьИзJSON(Файл.ПолноеИмя, _Конфигурация); + Данные = Сериализатор.ПрочитатьИзJson(Файл.ПолноеИмя, _Конфигурация); Для Каждого СтрокаРезультата Из Данные.Расшифровка Цикл НоваяСтрокаТаблицы = РасшифровкаРезультатов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицы, СтрокаРезультата); @@ -692,10 +692,10 @@ КонецЕсли; Если КоличествоПараметровМетода = 1 Тогда - Параметр = Новый ПараметрБенчмарка(ИменаПараметров[0], Параметры, Истина); - Результат = Новый Массив(); - Результат.Добавить(Параметр); - Возврат Результат; + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИменаПараметров[0], Параметры, Истина); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); + Возврат ПараметрыМетодаБенчмарка; КонецЕсли; ТипКоллекции = ТипЗнч(Параметры); @@ -718,7 +718,7 @@ Функция ПреобразоватьМассивВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) - Результат = Новый Массив(); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); КоличествоТребуемыхПараметров = ИменаПараметров.Количество(); @@ -732,17 +732,17 @@ КонецЕсли; Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл - Параметр = Новый ПараметрБенчмарка(ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); - Результат.Добавить(Параметр); + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); КонецЦикла; - Возврат Результат; + Возврат ПараметрыМетодаБенчмарка; КонецФункции Функция ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) - Результат = Новый Массив(); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); ТипКоллекции = ТипЗнч(Параметры); Для Каждого ИмяПараметра Из ДескрипторБенчмарка.ИменаПараметров() Цикл @@ -762,18 +762,18 @@ ); КонецЕсли; - Параметр = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); - Результат.Добавить(Параметр); + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); КонецЦикла; - Возврат Результат; + Возврат ПараметрыМетодаБенчмарка; КонецФункции Функция ПреобразоватьСтрокуТаблицыЗначенийВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) - Результат = Новый Массив(); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); Колонки = Параметры.Владелец().Колонки; Для Каждого ИмяПараметра Из ДескрипторБенчмарка.ИменаПараметров() Цикл @@ -786,12 +786,12 @@ ); КонецЕсли; - Параметр = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); - Результат.Добавить(Параметр); + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); КонецЦикла; - Возврат Результат; + Возврат ПараметрыМетодаБенчмарка; КонецФункции 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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" index 4eb6454..b0780c8 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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" @@ -65,7 +65,7 @@ СтрокаРезультата.Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); Исключение СтрокаРезультата.Успешно = Ложь; - _Лог.Ошибка("Возникла ошибка при запуске бенчмарков класса <%1>: %2", + _Лог.Ошибка("Возникла ошибка при запуске бенчмарков <%1>: %2", СтрокаРезультата.ИмяКласса, ОписаниеОшибки()); КонецПопытки; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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 442efb4..352ea9a 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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" @@ -1,17 +1,22 @@ #Использовать fluent +&Сериализуемое("Элементы") +&Тип("Массив") +&ДляКаждого +&Тип("ДескрипторБенчмарка") Перем _ДескрипторыБенчмарков; // Массив из ДескрипторБенчмарка // Коллекция дескрипторов бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков, +// откуда будут прочитаны дескрипторы Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) Экспорт _ДескрипторыБенчмарков = Новый Массив(); Если Не ИсточникБенчмарков = Неопределено Тогда - ИзвлекательДескрипторовБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); + Прочитать(ИсточникБенчмарков); КонецЕсли; КонецПроцедуры @@ -47,6 +52,11 @@ Возврат _ДескрипторыБенчмарков.Количество(); КонецФункции +// Очищает коллекцию +Процедура Очистить() Экспорт + _ДескрипторыБенчмарков.Очистить(); +КонецПроцедуры + // Дескриптор бенчмарка по имени метода // // Параметры: @@ -118,6 +128,15 @@ КонецФункции +// Читает дескрипторы бенчмарков из класса +// +// Параметры: +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков +Процедура Прочитать(ИсточникБенчмарков) Экспорт + Очистить(); + ИзвлекательДескрипторовБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); +КонецПроцедуры + // Массив дескрипторов бенчмарков // // Возвращаемое значение: 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 8e56200..3456d68 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" @@ -1,6 +1,7 @@ #Использовать asserts #Использовать delegate #Использовать validate +#Использовать reflector &Сериализуемое("Стратегия") &Тип("Строка") @@ -48,7 +49,9 @@ Перем _КаталогАртефактов; // Строка &Сериализуемое("Параметры") -&Тип("Массив") +&Тип("Массив") +&ДляКаждого +&Тип("ПараметрБенчмарка") &Геттер("Параметры") Перем _Параметры; // Массив из ПараметрБенчмарка @@ -97,7 +100,7 @@ // Конфигурация бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность; @@ -965,7 +968,7 @@ Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл СтрокаТаблицы = Таблица.Добавить(); СтрокаТаблицы.Имя = ОписаниеПоля.Имя; - СтрокаТаблицы.Значение = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); + СтрокаТаблицы.Значение = ОписаниеПоля.Геттер.Исполнить(); СтрокаТаблицы.Модифицирован = _МодифицированныеПоля[ОписаниеПоля.Имя]; КонецЦикла; @@ -1020,7 +1023,7 @@ #Область Сериализация -Процедура ОбработатьПередСериализацией() Экспорт +Процедура ПередСериализацией() Экспорт ПроверитьОбработчикиСобытийПередСериализацией(); ПроверитьИсточникиПараметровПередСериализацией(); @@ -1028,12 +1031,11 @@ КонецПроцедуры -Процедура ОбработатьПослеДесериализации() Экспорт +Процедура ПослеДесериализации() Экспорт - ОбработатьПараметрыПослеДесериализации(); ОбработатьЭкспортерыПослеДесериализации(); ОпределитьМодифицированныеПоля(); - ВыполнитьВалидациюПослеДесериализации(); + Валидировать(); КонецПроцедуры @@ -1112,7 +1114,7 @@ ОписаниеПоля = _ОписанияПолей.Добавить(); ОписаниеПоля.Имя = ИмяПоля; ОписаниеПоля.ИмяВнутреннее = Свойство.Имя; - ОписаниеПоля.Геттер = Геттер; + ОписаниеПоля.Геттер = Новый Делегат(ЭтотОбъект, Геттер); КонецЦикла; Возврат _ОписанияПолей; @@ -1183,18 +1185,7 @@ КонецПроцедуры -Процедура ОбработатьПараметрыПослеДесериализации() - - Параметры = Новый ФиксированныйМассив(_Параметры); - - ОчиститьПараметры(); - Для Каждого ПараметрДанные Из Параметры Цикл - ДобавитьПараметр(ПараметрДанные.Имя, ПараметрДанные.Значение); - КонецЦикла; - -КонецПроцедуры - -Процедура ВыполнитьВалидациюПослеДесериализации() +Процедура Валидировать() Валидатор = Новый Валидатор; @@ -1359,7 +1350,7 @@ КонецФункции Функция ИмяПоля_ОбработчикиСобытий() - Возврат "ОбработчикиСобытий"; + Возврат "Обработчики"; КонецФункции Функция ИмяПоля_Колонки() diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 28c7fc0..337727a 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -4,7 +4,7 @@ Перем Значение Экспорт; // Произвольный Перем ЭтоПараметрМетода Экспорт; // Булево -Процедура ПриСозданииОбъекта(пИмя, пЗначение, пЭтоПараметрМетода = Ложь) +Процедура ПриСозданииОбъекта(пИмя = "", пЗначение = Неопределено, пЭтоПараметрМетода = Ложь) Имя = пИмя; Значение = пЗначение; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" new file mode 100644 index 0000000..694339d --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -0,0 +1,51 @@ +#Использовать asserts + +&Сериализуемое +&Тип("Массив") +&ДляКаждого +&Тип("ПараметрБенчмарка") +Перем _Параметры; // Массив из ПараметрБенчмарка + +Процедура ПриСозданииОбъекта() + _Параметры = Новый Массив(); +КонецПроцедуры + +// Добавляет параметр бенчмарка в коллекцию +// +// Параметры: +// Параметр - ПараметрБенчмарка +Процедура Добавить(Параметр) Экспорт + + Ожидаем.Что(Параметр).ИмеетТип("ПараметрБенчмарка"); + Ожидаем.Что(Параметр.ЭтоПараметрМетода).ЭтоИстина(); + + _Параметры.Добавить(Параметр); + +КонецПроцедуры + +// Возвращает количество параметров +// +// Возвращаемое значение: +// Число +Функция Количество() Экспорт + Возврат _Параметры.Количество(); +КонецФункции + +// Возвращает параметр метода по индексу +// +// Параметры: +// Индекс - Число +// +// Возвращаемое значение: +// ПараметрБенчмарка +Функция Получить(Индекс) Экспорт + Возврат _Параметры[Индекс]; +КонецФункции + +// Возвращает массив параметров +// +// Возвращаемое значение: +// Массив из ПараметрБенчмарка +Функция ВМассив() Экспорт + Возврат Новый Массив(Новый ФиксированныйМассив(_Параметры)); +КонецФункции \ 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\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" deleted file mode 100644 index ed3ab68..0000000 --- "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" +++ /dev/null @@ -1,232 +0,0 @@ -#Использовать logos -#Использовать asserts - -Перем _Лог; // Лог - -// Сериализатор конфигурации бенчмарков -Процедура ПриСозданииОбъекта() - _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторКонфигурацииБенчмарков"); -КонецПроцедуры - -#Область ПрограммныйИнтерфейс - -// Сериализует конфигурацию бенчмарков в JSON-файл -// -// Параметры: -// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков -// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация. -Процедура СериализоватьВJSON(Конфигурация, ИмяФайла) Экспорт - - _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); - - ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); - - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписатьJSON(ЗаписьJSON, Конвертировать(Конфигурация)); - ЗаписьJSON.Закрыть(); - - _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); - -КонецПроцедуры - -// Десериализует конфигурацию бенчмарков из JSON-файла -// -// Параметры: -// ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. -// -// Возвращаемое значение: -// КонфигурацияБенчмарков -Функция ДесериализоватьИзJSON(ИмяФайла) Экспорт - - _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); - - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8"); - Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); - ЧтениеJSON.Закрыть(); - - _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); - - Возврат СобратьКонфигурацию(Данные); - -КонецФункции - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция Конвертировать(Конфигурация) - - Данные = Новый Структура(); - - Для Каждого СтрокаТаблицы Из Конфигурация.ВТаблицу() Цикл - - Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(СтрокаТаблицы.Значение) - Или СтрокаТаблицы.Имя = "Колонки" Тогда - Значение = СтрокаТаблицы.Значение; - ИначеЕсли СтрокаТаблицы.Имя = "Параметры" Тогда - Значение = КонвертироватьПараметры(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "ОбработчикиСобытий" Тогда - Значение = КонвертироватьОбработчикиСобытий(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "Экспортеры" Тогда - Значение = КонвертироватьЭкспортеры(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "ВерсииИсполняющейСреды" Тогда - Значение = КонвертироватьВерсииИсполняющейСреды(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "ИсточникиПараметров" Тогда - Значение = КонвертироватьИсточникиПараметров(СтрокаТаблицы.Значение); - Иначе - ВызватьИсключение СтрШаблон("Не реализована конвертация параметра '%1'", СтрокаТаблицы.Имя); - КонецЕсли; - - Данные.Вставить(СтрокаТаблицы.Имя, Значение); - - КонецЦикла; - - Возврат Данные; - -КонецФункции - -Функция КонвертироватьПараметры(Параметры) - - Результат = Новый Массив(); - - Для Каждого ПараметрБенчмарка Из Параметры Цикл - - Значение = Новый Структура(); - Значение.Вставить("Имя", ПараметрБенчмарка.Имя); - Значение.Вставить("Значение", ПараметрБенчмарка.Значение); - Значение.Вставить("ЭтоПараметрМетода", ПараметрБенчмарка.ЭтоПараметрМетода); - - Результат.Добавить(Значение); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция КонвертироватьОбработчикиСобытий(ОбработчикиСобытий) - - Результат = Новый Массив(); - - Для Каждого Строка Из ОбработчикиСобытий Цикл - - Тип = ТипЗнч(Строка.Обработчик); - Если Тип <> Тип("Строка") Тогда - ВызватьИсключение СтрШаблон("Обработчик события типа <%1> не поддерживает сериализацию.", Тип); - КонецЕсли; - - Значение = Новый Структура(); - Значение.Вставить("Событие", Строка.Событие); - Значение.Вставить("Обработчик", Строка.Обработчик); - - Результат.Добавить(Значение); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция КонвертироватьЭкспортеры(Экспортеры) - - Результат = Новый Массив(); - - Для Каждого Экспортер Из Экспортеры Цикл - Результат.Добавить(Строка(ТипЗнч(Экспортер))); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция КонвертироватьВерсииИсполняющейСреды(Версии) - - Результат = Новый Массив(); - - Для Каждого СтрокаВерсия Из Версии Цикл - Версия = Новый Структура(); - Версия.Вставить("Версия", СтрокаВерсия.Версия); - Версия.Вставить("Наименование", СтрокаВерсия.Наименование); - Версия.Вставить("ЭтоЭталон", СтрокаВерсия.ЭтоЭталон); - - Результат.Добавить(Версия); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция СобратьКонфигурацию(Данные) - - Конфигурация = Новый КонфигурацияБенчмарков(); - Конфигурация.УстановитьКоличествоИтераций(Данные.КоличествоИтераций); - Конфигурация.УстановитьКоличествоВызововЗаИтерацию(Данные.КоличествоВызововЗаИтерацию); - Конфигурация.УстановитьКоличествоПрогревочныхИтераций(Данные.КоличествоПрогревочныхИтераций); - Конфигурация.УстановитьМинимальноеВремяИтерации(Данные.МинимальноеВремяИтерации); - Конфигурация.УстановитьМинимальноеКоличествоВызововЗаИтерацию(Данные.МинимальноеКоличествоВызововЗаИтерацию); - Конфигурация.УстановитьСтратегию(Данные.Стратегия); - Конфигурация.УстановитьСортировкуОтчета(Данные.СортировкаОтчета); - Конфигурация.УстановитьКаталогАртефактов(Данные.КаталогАртефактов); - - Если Данные.ТребуетсяМониторингПамяти Тогда - Конфигурация.ДобавитьМониторингПамяти(); - КонецЕсли; - - Для Каждого Параметр Из Данные.Параметры Цикл - Конфигурация.ДобавитьПараметр(Параметр.Имя, Параметр.Значение); - КонецЦикла; - - Для Каждого ДанныеСобытия Из Данные.ОбработчикиСобытий Цикл - Конфигурация.ДобавитьОбработчикСобытия(ДанныеСобытия.Событие, ДанныеСобытия.Обработчик); - КонецЦикла; - - Для Каждого Колонка Из Данные.Колонки Цикл - Конфигурация.ДобавитьКолонку(Колонка); - КонецЦикла; - - Для Каждого Экспортер Из Данные.Экспортеры Цикл - Конфигурация.ДобавитьЭкспортер(Новый(Тип(Экспортер))); - КонецЦикла; - - Для Каждого ВерсияИсполняющейСреды Из Данные.ВерсииИсполняющейСреды Цикл - Конфигурация.ДобавитьВерсиюИсполняющейСреды( - ВерсияИсполняющейСреды.Версия, - ВерсияИсполняющейСреды.Наименование, - ВерсияИсполняющейСреды.ЭтоЭталон - ); - КонецЦикла; - - Для Каждого ИсточникПараметров Из Данные.ИсточникиПараметров Цикл - Конфигурация.ДобавитьИсточникПараметров(ИсточникПараметров.ИмяПоля, ИсточникПараметров.Источник); - КонецЦикла; - - Возврат Конфигурация; - -КонецФункции - -Функция КонвертироватьИсточникиПараметров(ИсточникиПараметров) - - Результат = Новый Массив(); - - Для Каждого ИсточникПараметров Из ИсточникиПараметров Цикл - - Тип = ТипЗнч(ИсточникПараметров.Источник); - Если Тип <> Тип("Строка") Тогда - ВызватьИсключение СтрШаблон("Источник параметров типа <%1> не поддерживает сериализацию.", Тип); - КонецЕсли; - - Значение = Новый Структура(); - Значение.Вставить("ИмяПоля", ИсточникПараметров.ИмяПоля); - Значение.Вставить("Источник", ИсточникПараметров.Источник); - - Результат.Добавить(Значение); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -#КонецОбласти \ 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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" similarity index 57% rename from "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" rename to "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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 7eddd89..27145e1 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\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,47 +1,50 @@ #Использовать logos -#Использовать jason +#Использовать "../../dto" +#Использовать "../../jason" Перем _Лог; // Лог -// Сериализатор конфигурации бенчмарков +// Сериализатор настроек бенчмарков Процедура ПриСозданииОбъекта() - _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторБенчмарков"); + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторНастроекБенчмарков"); КонецПроцедуры #Область ПрограммныйИнтерфейс -// Сериализует конфигурацию бенчмарков в JSON-файл +// Сериализует настройки бенчмарков в JSON-файл // // Параметры: -// Дескрипторы - КоллекцияДескрипторовБенчмарков - Коллекция дескрипторов бенчмарков +// Дескрипторы - КоллекцияДескрипторовБенчмарков - Коллекция дескрипторов бенчмарков // Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков -// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация -Процедура ЗаписатьВJson(Конфигурация, ИмяФайла) Экспорт +// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация +Процедура ЗаписатьВJson(Дескрипторы, Конфигурация, ИмяФайла) Экспорт _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); - Сериализатор = Новый СериализаторJson(); + Сериализатор = Новый СериализаторJsonBench(); - Конфигурация.ОбработатьПередСериализацией(); + Настройки = Новый НастройкиБенчмарковДто(); + Настройки.ДескрипторыБенчмарков = Дескрипторы; + Настройки.Конфигурация = Конфигурация; ЗаписьJSON = Новый ЗаписьJSON(); ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписьJSON.ЗаписатьБезОбработки(Сериализатор.Сериализовать(Конфигурация)); + ЗаписьJSON.ЗаписатьБезОбработки(Сериализатор.Сериализовать(Настройки)); ЗаписьJSON.Закрыть(); _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); КонецПроцедуры -// Десериализует конфигурацию бенчмарков из JSON-файла +// Десериализует настройки бенчмарков из JSON-файла // // Параметры: // ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. // // Возвращаемое значение: -// КонфигурацияБенчмарков +// БенчмаркиСКонфигурацией Функция ПрочитатьИзJson(ИмяФайла) Экспорт _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); @@ -50,13 +53,12 @@ Строка = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); - Десериализатор = Новый ДесериализаторJson(); - Конфигурация = Десериализатор.Десериализовать(Строка, Тип("КонфигурацияБенчмарков")); - Конфигурация.ОбработатьПослеДесериализации(); + Десериализатор = Новый ДесериализаторJsonBench(); + Настройки = Десериализатор.Десериализовать(Строка, Тип("НастройкиБенчмарковДто")); _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); - Возврат Конфигурация; + Возврат Настройки; КонецФункции 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\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/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\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 c326657..d1ce474 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\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/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\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" @@ -21,7 +21,7 @@ // * Расшифровка - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // * СредаОкружения - СредаОкруженияБенчмарков - Информация о среде выполнения бенчмарков // ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результаты бенчмарков -Процедура СериализоватьВJSON(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт +Процедура ЗаписатьВJson(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало сериализации результатов в JSON-файл: %1", ПолноеИмяФайла); @@ -48,7 +48,7 @@ // Структура: // * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // * СредаОкружения - СредаОкруженияБенчмарков -Функция ДесериализоватьИзJSON(ПолноеИмяФайла, Конфигурация) Экспорт +Функция ПрочитатьИзJson(ПолноеИмяФайла, Конфигурация) Экспорт _Лог.Отладка("Начало десериализации из JSON-файла: %1", ПолноеИмяФайла); @@ -395,8 +395,9 @@ НайденНабор = Ложь; Для Каждого НаборПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл НайденНабор = Истина; - Для Инд = 0 По НаборПараметров.ВГраница() Цикл - Если Не НаборПараметров[Инд].Значение = ПараметрыМетода[Инд] Тогда + МассивПараметров = НаборПараметров.ВМассив(); + Для Инд = 0 По МассивПараметров.ВГраница() Цикл + Если Не МассивПараметров[Инд].Значение = ПараметрыМетода[Инд] Тогда НайденНабор = Ложь; Прервать; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" index 6651e56..bf01eed 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" @@ -8,7 +8,7 @@ ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.СериализоватьВJSON(РезультатыБенчмарков, ПутьКФайлу); + Сериализатор.ЗаписатьВJson(РезультатыБенчмарков, ПутьКФайлу); КонецПроцедуры 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 a96b3d2..f918c9b 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" @@ -1,12 +1,13 @@ #Использовать annotations #Использовать asserts +#Использовать reflector #Область ПрограммныйИнтерфейс // Извлекает дескрипторы бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков // НаборДескрипторов - КоллекцияДескрипторовБенчмарков - Коллекция, в которую будут добавлены извлеченные // дескрипторы бенчмарков // 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 0d0f52e..e36a683 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" @@ -1,11 +1,12 @@ #Использовать annotations +#Использовать reflector #Область ПрограммныйИнтерфейс // Извлекает конфигурацию бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков // Конфигурация - КонфигурацияБенчмарков - Конфигурация, в которую будут записаны данные // // Возвращаемое значение: 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 ba6d361..f2ee90f 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" @@ -4,6 +4,8 @@ // // Параметры: // Параметры - Массив из ПараметрБенчмарка +// - Массив из Массив из ПараметрБенчмарка +// - Массив из ПараметрыМетодаБенчмарка // // Возвращаемое значение: // Массив из Массив из ПараметрБенчмарка @@ -27,19 +29,23 @@ Для Каждого Параметр Из Параметры Цикл - Если ТипЗнч(Параметр) = Тип("Массив") Тогда + ТипЭлемента = ТипЗнч(Параметр); + Если ТипЭлемента = Тип("ПараметрБенчмарка") Тогда + + Имя = Параметр.Имя; + ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода; + + ИначеЕсли ТипЭлемента = Тип("Массив") Или ТипЭлемента = Тип("ПараметрыМетодаБенчмарка") Тогда + Если Параметр.Количество() = 0 Тогда Продолжить; КонецЕсли; Имя = "_"; - ЭтоПараметрМетода = Параметр[0].ЭтоПараметрМетода; + ЭтоПараметрМетода = ТипЭлемента = Тип("ПараметрыМетодаБенчмарка"); Иначе - - Имя = Параметр.Имя; - ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода; - + ВызватьИсключение СтрШаблон("Не поддерживается тип <%1>", ТипЭлемента); КонецЕсли; Строки = Дерево[ЭтоПараметрМетода]; @@ -68,13 +74,13 @@ КомбинацииПараметров = Новый Массив(); ЭтоПерваяГруппа = Истина; - Для Каждого Параметры Из ГруппыПараметров Цикл + Для Каждого ПараметрыГруппы Из ГруппыПараметров Цикл КоличествоКомбинаций = КомбинацииПараметров.Количество(); ЭтоПервыйПараметр = Истина; - Для Каждого Параметр Из Параметры Цикл + Для Каждого Параметр Из ПараметрыГруппы Цикл Если ЭтоПерваяГруппа Тогда @@ -126,6 +132,10 @@ ДобавитьПараметрыВКомбинацию(Комбинация, Параметр); + ИначеЕсли ТипЗнч(Параметр) = Тип("ПараметрыМетодаБенчмарка") Тогда + + ДобавитьПараметрыВКомбинацию(Комбинация, Параметр.ВМассив()); + Иначе Для Инд = 0 По Комбинация.ВГраница() Цикл diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" new file mode 100644 index 0000000..629811e --- /dev/null +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" @@ -0,0 +1,9 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое +&Тип("КоллекцияДескрипторовБенчмарков") +Перем ДескрипторыБенчмарков Экспорт; // КоллекцияДескрипторовБенчмарков + +&Сериализуемое +&Тип("КонфигурацияБенчмарков") +Перем Конфигурация Экспорт; // КонфигурацияБенчмарков \ No newline at end of file diff --git "a/src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" "b/src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" new file mode 100644 index 0000000..c132417 --- /dev/null +++ "b/src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" @@ -0,0 +1,9 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) +// +// Поле, помеченное аннотацией &Несериализуемое, не будет включено в результирующую +// JSON-строку. +// +&Аннотация("Несериализуемое") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" "b/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" new file mode 100644 index 0000000..8759389 --- /dev/null +++ "b/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" @@ -0,0 +1,18 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) +// +// Поле, помеченное аннотацией &Сериализуемое, будет включено в результирующую +// JSON-строку. +// +// По умолчанию все заполненные поля объекта, не помеченные аннотацией &Несериализуемое, +// сериализуются. +// Вы можете переопределить дополнительные параметры сериализации с помощью аннотации +// &Сериализуемое. +// +// Параметры: +// Значение - Строка- имя свойства в JSON (переименование) +// Обязательное - Булево - включать поле даже при значении Неопределено +// +&Аннотация("Сериализуемое") +Процедура ПриСозданииОбъекта(Значение = "", Обязательное = Ложь) +КонецПроцедуры diff --git "a/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" new file mode 100644 index 0000000..f38c3fe --- /dev/null +++ "b/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -0,0 +1,280 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) + +#Использовать annotations +#Использовать validate + +#Область ОписаниеПеременных + +// Лог +// +Перем Лог; + +// Рефлектор +// +Перем Рефлектор; + +// Множество - список известных пользовательских типов +// +Перем КэшИзвестныхТипов; + +// Множество - список примитивных типов +// +Перем ПримитивныеТипы; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Десериализация JSON-строки в объект. +// +// Параметры: +// Строка - Строка - JSON-строка, которую необходимо десериализовать. +// Поддерживаются объекты, массивы и примитивы. +// ТипОбъекта - Тип - Тип, в который нужно десериализовать JSON-строку (необязателен). +// ЧитатьВСоответствие - Булево - если Истина, чтение нетипизированного объекта JSON будет выполнено в `Соответствие`. +// Если Ложь, нетипизированные объекты будут считываться в объект типа `Структура`. +// Значение по умолчанию: Ложь +// Возвращаемое значение: +// Произвольный - Если тип не задан, возвращается значение, прочитанное платформенным методом ПрочитатьJSON; +// иначе преобразованный объект целевого типа. +// +Функция Десериализовать(Строка, ТипОбъекта = Неопределено, ЧитатьВСоответствие = Ложь) Экспорт + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(Строка); + + ДесериализованныйОбъект = ПрочитатьJSON(ЧтениеJSON, ЧитатьВСоответствие); + ЧтениеJSON.Закрыть(); + + // Если тип не задан - возвращаем прочитанный объект как есть + Если ТипОбъекта = Неопределено Тогда + Возврат ДесериализованныйОбъект; + КонецЕсли; + + Объект = ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта); + + Возврат Объект; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов = Неопределено) + + Если ЭтоПримитивныйТип(ТипОбъекта) Тогда + Возврат ПреобразоватьПримитивныйТип(ДесериализованныйОбъект, ТипОбъекта); + ИначеЕсли ТипОбъекта = Тип("Массив") Тогда + Возврат ПреобразоватьМассив(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("Соответствие") Тогда + Возврат ПреобразоватьОбъект(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("Структура") Тогда + Возврат ПреобразоватьОбъект(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("ТаблицаЗначений") Тогда + Возврат ПреобразоватьТаблицуЗначений(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("Тип") Тогда + Возврат ПреобразоватьТип(ДесериализованныйОбъект); + ИначеЕсли ЭтоПользовательскийТип(ТипОбъекта) Тогда + Возврат ПреобразоватьПользовательскийТип(ДесериализованныйОбъект, ТипОбъекта); + Иначе + Лог.Предупреждение("Неизвестный тип объекта: %1", ТипОбъекта); + КонецЕсли; + +КонецФункции + +Функция ЭтоПримитивныйТип(ТипОбъекта) + Возврат ПримитивныеТипы.Содержит(ТипОбъекта); +КонецФункции + +Функция ЭтоПользовательскийТип(ТипОбъекта) + Возврат КэшИзвестныхТипов.Содержит(ТипОбъекта); +КонецФункции + +Функция ПреобразоватьПримитивныйТип(Объект, ТипОбъекта) + Возврат Объект; +КонецФункции + +Функция ПреобразоватьТип(Объект) + Возврат Тип(Объект); +КонецФункции + +Функция ПреобразоватьМассив(Объект, ТипОбъекта, ТипЭлементов) + + Результат = Новый Массив; + + Для Каждого Элемент Из Объект Цикл + ОжидаемыйТип = ?(ЗначениеЗаполнено(ТипЭлементов), ТипЭлементов, ТипЗнч(Элемент)); + ПреобразованныйЭлемент = ПреобразоватьОбъектДесериализации(Элемент, ОжидаемыйТип); + Результат.Добавить(ПреобразованныйЭлемент); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта, ТипЭлементов) + + Результат = Новый ТаблицаЗначений; + КоличествоЭлементов = Объект.Количество(); + + Если КоличествоЭлементов = 0 Тогда + Возврат Результат; + КонецЕсли; + + ИменаКолонок = Объект[0]; + Если Не ТипЗнч(ИменаКолонок) = Тип("Массив") Тогда + Возврат Результат; + КонецЕсли; + + КоличествоКолонок = ИменаКолонок.Количество(); + + Для Каждого ИмяКолонки Из ИменаКолонок Цикл + Результат.Колонки.Добавить(ИмяКолонки); + КонецЦикла; + + Для ИндексЭлемента = 1 По КоличествоЭлементов - 1 Цикл + ЗначенияКолонок = Объект[ИндексЭлемента]; + Если Не ТипЗнч(ЗначенияКолонок) = Тип("Массив") Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = Результат.Добавить(); + Для ИндексКолонки = 0 По Мин(КоличествоКолонок, ЗначенияКолонок.Количество()) - 1 Цикл + ИмяКолонки = ИменаКолонок[ИндексКолонки]; + ЗначениеКолонки = ЗначенияКолонок[ИндексКолонки]; + ПреобразованныйЭлемент = ПреобразоватьОбъектДесериализации(ЗначениеКолонки, ТипЗнч(ЗначениеКолонки)); + СтрокаТаблицы[ИмяКолонки] = ПреобразованныйЭлемент; + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьОбъект(Объект, ТипОбъекта, ТипЭлементов) + + Результат = Новый(ТипОбъекта); + + Для Каждого КлючИЗначение Из Объект Цикл + ОжидаемыйТип = ?(ЗначениеЗаполнено(ТипЭлементов), ТипЭлементов, ТипЗнч(КлючИЗначение.Значение)); + ПреобразованноеЗначение = ПреобразоватьОбъектДесериализации(КлючИЗначение.Значение, ОжидаемыйТип); + Результат.Вставить(КлючИЗначение.Ключ, ПреобразованноеЗначение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьПользовательскийТип(Объект, ТипОбъекта) + + Результат = Новый(ТипОбъекта); + СвойстваОбъекта = Рефлектор.ПолучитьТаблицуСвойств(ТипОбъекта, Истина); + СвойстваПоИменамПолей = Новый Соответствие(); + + Для Каждого Свойство Из СвойстваОбъекта Цикл + АннотацияСериализуемое = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Сериализуемое"); + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", Свойство.Имя); + + СвойстваПоИменамПолей.Вставить(ИмяСвойства, Свойство); + КонецЦикла; + + Для Каждого КлючИЗначение Из Объект Цикл + Свойство = СвойстваПоИменамПолей[КлючИЗначение.Ключ]; + Если Свойство = Неопределено Тогда + // Если поле не найдено, то пропускаем его + // TODO: Падать, если не висит @JsonIgnore + Продолжить; + КонецЕсли; + + ИмяСвойства = Свойство.Имя; + ЗначениеСвойства = КлючИЗначение.Значение; + + ТипыСвойства = ПолучитьТипыСвойства(Свойство, ЗначениеСвойства); + ТипСвойства = ТипыСвойства.БазовыйТип; + ТипЭлементов = ТипыСвойства.ТипЭлементов; + + ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, ТипСвойства, ТипЭлементов); + Если ТипСвойства <> Неопределено И ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда + Лог.Ошибка("Тип свойства '%1' не соответствует ожидаемому типу '%2'", ТипЗнч(ЗначениеСвойства), ТипСвойства); + Продолжить; + КонецЕсли; + + Рефлектор.УстановитьСвойство(Результат, ИмяСвойства, ЗначениеСвойства); + КонецЦикла; + + Если Рефлектор.МетодСуществует(Результат, "ПослеДесериализации") Тогда + Результат.ПослеДесериализации(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +Функция ПолучитьТипыСвойства(Свойство, ЗначениеСвойства) + + ОписаниеСвойства = Новый Структура(); + ОписаниеСвойства.Вставить("БазовыйТип", ТипЗнч(ЗначениеСвойства)); + ОписаниеСвойства.Вставить("ТипЭлементов"); + + КонтейнерАннотаций = Новый КонтейнерАннотаций; + КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияТип")); + КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияДляКаждого")); + + ТекущийРежимДляКаждого = Неопределено; + + Для Каждого Аннотация Из Свойство.Аннотации Цикл + + ОпределениеАннотации = КонтейнерАннотаций.ПолучитьОпределениеАннотации(Аннотация.Имя); + Если ОпределениеАннотации = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбъектАннотации = ОпределениеАннотации.СоздатьОбъектАннотации(Аннотация); + + // Директива &ДляКаждого - переключает режим обхода + Если ТипЗнч(ОбъектАннотации) = Тип("АннотацияДляКаждого") Тогда + + ТекущийРежимДляКаждого = ОбъектАннотации.Режим(); + + ИначеЕсли ТипЗнч(ОбъектАннотации) = Тип("АннотацияТип") Тогда + + ТипСвойства = ОбъектАннотации.ТипЗначения(); + + Если ТекущийРежимДляКаждого = Неопределено Тогда + ОписаниеСвойства.БазовыйТип = ТипСвойства; + ИначеЕсли ТекущийРежимДляКаждого = "Значение" Тогда + ОписаниеСвойства.ТипЭлементов = ТипСвойства; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат ОписаниеСвойства; + +КонецФункции + +Процедура ПриСозданииОбъекта() + + Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.jason.ДесериализаторJson"); + Рефлектор = Новый Рефлектор(); + + КэшИзвестныхТипов = Новый МножествоСоответствие; + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); + Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл + КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); + КонецЦикла; + + ПримитивныеТипы = Новый МножествоСоответствие; + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Null")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + +КонецПроцедуры diff --git "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" new file mode 100644 index 0000000..9de2d3a --- /dev/null +++ "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" @@ -0,0 +1,197 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) + +#Использовать annotations +#Использовать logos +#Использовать collectionos + +#Область ОписаниеПеременных + +// Лог +// +Перем Лог; + +// Рефлектор +// +Перем Рефлектор; + +// Множество - список известных пользовательских типов +// +Перем КэшИзвестныхТипов; + +// Множество - список примитивных типов +// +Перем ПримитивныеТипы; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Сериализация объекта в JSON-строку. +// +// Параметры: +// Объект - Произвольный - Сериализуемый объект. Поддерживаются пользовательские классы, +// коллекции и примитивы. +// Возвращаемое значение: +// Строка +// +Функция Сериализовать(Объект) Экспорт + ОбъектСериализации = ПреобразоватьОбъектСериализации(Объект); + + Запись = Новый ЗаписьJSON; + Запись.УстановитьСтроку(); + ЗаписатьJSON(Запись, ОбъектСериализации); + + Возврат Запись.Закрыть(); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПреобразоватьОбъектСериализации(Объект) + + ТипОбъекта = ТипЗнч(Объект); + + Если ТипОбъекта = Тип("Массив") Тогда + Результат = ПреобразоватьМассив(Объект); + ИначеЕсли ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда + Результат = ПреобразоватьСтруктуру(Объект); + ИначеЕсли ТипОбъекта = Тип("ТаблицаЗначений") Тогда + Результат = ПреобразоватьТаблицуЗначений(Объект); + ИначеЕсли ЭтоПримитивныйТип(ТипОбъекта) Тогда + Результат = ПреобразоватьПримитивныйТип(Объект); + ИначеЕсли ТипОбъекта = Тип("Тип") Тогда + Результат = ПреобразоватьТип(Объект); + Иначе + Результат = ПреобразоватьКомплексныйТип(Объект); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЭтоПримитивныйТип(ТипОбъекта) + Возврат ПримитивныеТипы.Содержит(ТипОбъекта); +КонецФункции + +Функция ПреобразоватьМассив(Массив) + Результат = Новый Массив; + + Для Каждого Элемент Из Массив Цикл + ПреобразованныйЭлемент = ПреобразоватьОбъектСериализации(Элемент); + Результат.Добавить(ПреобразованныйЭлемент); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПреобразоватьСтруктуру(Структура) Экспорт + Результат = Новый Соответствие(); + + Для Каждого Элемент Из Структура Цикл + ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(Элемент.Значение); + Результат.Вставить(Элемент.Ключ, ПреобразованноеЗначение); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений) Экспорт + + Результат = Новый Массив(); + + ИменаКолонок = Новый Массив(); + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + ИменаКолонок.Добавить(Колонка.Имя); + КонецЦикла; + Результат.Добавить(ИменаКолонок); + + Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + ЗначенияКолонок = Новый Массив(); + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); + ЗначенияКолонок.Добавить(ПреобразованноеЗначение); + КонецЦикла; + Результат.Добавить(ЗначенияКолонок); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьПримитивныйТип(Объект) Экспорт + Возврат Объект; +КонецФункции + +Функция ПреобразоватьТип(Объект) Экспорт + Возврат Строка(Объект); +КонецФункции + +Функция ПреобразоватьКомплексныйТип(Объект) Экспорт + + ТипОбъекта = ТипЗнч(Объект); + + ЭтоПользовательскийТип = КэшИзвестныхТипов.Содержит(ТипОбъекта); + + Если НЕ ЭтоПользовательскийТип Тогда + Лог.Предупреждение("Неизвестный тип объекта для преобразования: %1", ТипОбъекта); + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Соответствие(); + + СвойстваОбъекта = Рефлектор.ПолучитьТаблицуСвойств(ТипОбъекта, Истина); + + Если Рефлектор.МетодСуществует(Объект, "ПередСериализацией") Тогда + Объект.ПередСериализацией(); + КонецЕсли; + + Для Каждого СвойствоОбъекта Из СвойстваОбъекта Цикл + // Проверяем, не помечено ли поле как несериализуемое + Несериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойствоОбъекта.Аннотации, "Несериализуемое"); + Если Несериализуемое <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Обязательное = Ложь; + ИмяСвойства = СвойствоОбъекта.Имя; + АннотацияСериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойствоОбъекта.Аннотации, "Сериализуемое"); + Если АннотацияСериализуемое <> Неопределено Тогда + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", СвойствоОбъекта.Имя); + Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Обязательное", Обязательное); + КонецЕсли; + + ЗначениеСвойства = Рефлектор.ПолучитьСвойство(Объект, СвойствоОбъекта.Имя); + ЗначениеСвойства = ПреобразоватьОбъектСериализации(ЗначениеСвойства); + Если Обязательное ИЛИ ЗначениеСвойства <> Неопределено Тогда + Результат.Вставить(ИмяСвойства, ЗначениеСвойства); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +Процедура ПриСозданииОбъекта() + + Рефлектор = Новый Рефлектор(); + Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.jason.СериализаторJson"); + + КэшИзвестныхТипов = Новый МножествоСоответствие; + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); + Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл + КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); + КонецЦикла; + + ПримитивныеТипы = Новый МножествоСоответствие; + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Null")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + +КонецПроцедуры 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 85614c2..3b32033 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" @@ -40,5 +40,8 @@ КонецПроцедуры &Бенчмарк -Процедура Бенчмарк() Экспорт +&Параметры(1) +&Параметры(2) +&ИсточникПараметров("ПолучитьПараметры") +Процедура Бенчмарк(Парам) Экспорт КонецПроцедуры \ 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 b0c4ab2..60a5907 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" @@ -153,7 +153,7 @@ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(100); Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(20); Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(200); - Ожидаем.Что(НаборыПараметров[0][0].ЭтоПараметрМетода).ЭтоИстина(); + Ожидаем.Что(НаборыПараметров[0].Получить(0).ЭтоПараметрМетода).ЭтоИстина(); КонецПроцедуры @@ -758,8 +758,8 @@ ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.СериализоватьВJSON(Результат, ИмяФайла); - РезультатПрочитанный = Сериализатор.ДесериализоватьИзJSON(ИмяФайла, Конфигурация); + Сериализатор.ЗаписатьВJson(Результат, ИмяФайла); + РезультатПрочитанный = Сериализатор.ПрочитатьИзJson(ИмяФайла, Конфигурация); // Проверка Расшифровка = РезультатПрочитанный.Расшифровка; @@ -772,11 +772,11 @@ Ожидаем.Что(ДескрипторБенчмарка.Категория(), "Категория").Равно("Категория 1"); Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2); Ожидаем.Что(НаборыПараметров[0], "Набор параметров 1").ИмеетДлину(2); - Ожидаем.Что(НаборыПараметров[0][0].Значение, "Набор параметров 1").Равно(3); - Ожидаем.Что(НаборыПараметров[0][1].Значение, "Набор параметров 1").Равно(4); + Ожидаем.Что(НаборыПараметров[0].Получить(0).Значение, "Набор параметров 1").Равно(3); + Ожидаем.Что(НаборыПараметров[0].Получить(1).Значение, "Набор параметров 1").Равно(4); Ожидаем.Что(НаборыПараметров[1], "Набор параметров 2").ИмеетДлину(2); - Ожидаем.Что(НаборыПараметров[1][0].Значение, "Набор параметров 2").Равно(5); - Ожидаем.Что(НаборыПараметров[1][1].Значение, "Набор параметров 2").Равно(6); + Ожидаем.Что(НаборыПараметров[1].Получить(0).Значение, "Набор параметров 2").Равно(5); + Ожидаем.Что(НаборыПараметров[1].Получить(1).Значение, "Набор параметров 2").Равно(6); Ожидаем.Что(Расшифровка[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); Ожидаем.Что(Расшифровка[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@"); Ожидаем.Что(Расшифровка[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); 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 04a690d..9d0aee8 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" @@ -3,28 +3,15 @@ #Использовать asserts #Использовать fluent -#Использовать tempfiles #Использовать "helpers" -Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов - -&Инициализация -Процедура ПередВсеми() Экспорт - МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); -КонецПроцедуры - -&Завершение -Процедура ПослеВсех() Экспорт - МенеджерВременныхФайлов.Удалить(); -КонецПроцедуры - &Тест Процедура Тест_АннотацииКонфигурации() Экспорт Тип = Тип("БенчмаркСАннотациямиКонфигурации"); Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация); + ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(Конфигурация); КонецПроцедуры @@ -758,23 +745,7 @@ КонецПроцедуры -&Тест -Процедура Тест_ДолженПроверитьСериализациюКонфигурацииJson() Экспорт - - Тип = Тип("БенчмаркСАннотациямиКонфигурации"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - - ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); - - Сериализатор = Новый СериализаторБенчмарков(); - Сериализатор.ЗаписатьВJson(Конфигурация, ИмяФайла); - КонфигурацияПрочитанная = Сериализатор.ПрочитатьИзJson(ИмяФайла); - - ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(КонфигурацияПрочитанная); - -КонецПроцедуры - -Процедура ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация) +Процедура ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(Конфигурация) Экспортеры = Конфигурация.Экспортеры(); КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры); 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\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..8343b1d --- /dev/null +++ "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,105 @@ +// BSLLS:DuplicateStringLiteral-off +// BSLLS:MagicNumber-off + +#Использовать asserts +#Использовать tempfiles +#Использовать "helpers" + +Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов + +&Инициализация +Процедура ПередВсеми() Экспорт + МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + МенеджерВременныхФайлов.Удалить(); +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьСериализациюИДесериализацию() Экспорт + + Тип = Тип("БенчмаркСАннотациямиКонфигурации"); + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + КоллекцияДескрипторов = Новый КоллекцияДескрипторовБенчмарков(Тип); + + ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); + + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Сериализатор.ЗаписатьВJson(КоллекцияДескрипторов, Конфигурация, ИмяФайла); + ДТО = Сериализатор.ПрочитатьИзJson(ИмяФайла); + + ПроверитьДескрипторыБенчмаркаСАннотациямиКонфигурации(ДТО.ДескрипторыБенчмарков); + ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(ДТО.Конфигурация); + +КонецПроцедуры + +Процедура ПроверитьДескрипторыБенчмаркаСАннотациямиКонфигурации(ДескрипторыБенчмарков) + + Ожидаем.Что(ДескрипторыБенчмарков.Количество()).Равно(1); + + Дексриптор = ДескрипторыБенчмарков.ПолучитьПервый(); + НаборыПараметров = Дексриптор.НаборыПараметров(); + ИсточникиПараметров = Дексриптор.ИсточникиПараметров(); + + Ожидаем.Что(Дексриптор.ТипОбъекта()).Равно(Тип("БенчмаркСАннотациямиКонфигурации")); + Ожидаем.Что(Дексриптор.Метод()).Равно("Бенчмарк"); + Ожидаем.Что(Дексриптор.ЭтоЭталон()).ЭтоЛожь(); + + Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2); + Ожидаем.Что(НаборыПараметров[0].Получить(0).Имя, "Наборы параметров [0].Имя").Равно("Парам"); + Ожидаем.Что(НаборыПараметров[0].Получить(0).Значение, "Наборы параметров [0].Значение").Равно(1); + Ожидаем.Что(НаборыПараметров[1].Получить(0).Имя, "Наборы параметров [1].Имя").Равно("Парам"); + Ожидаем.Что(НаборыПараметров[1].Получить(0).Значение, "Наборы параметров [1].Значение").Равно(2); + + Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0], "Источники параметров [0]").Равно("ПолучитьПараметры"); + +КонецПроцедуры + +Процедура ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(Конфигурация) + + Экспортеры = Конфигурация.Экспортеры(); + КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры); + ВерсииИсполняющейСреды = Конфигурация.ВерсииИсполняющейСреды(); + Колонки = Конфигурация.Колонки(); + Параметры = Конфигурация.Параметры(); + ИсточникиПараметров = Конфигурация.ИсточникиПараметров(); + + ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")"; + + Ожидаем.Что(Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск); + Ожидаем.Что(Конфигурация.СортировкаОтчета()).Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным); + Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(100); + Ожидаем.Что(Конфигурация.КоличествоВызововЗаИтерацию()).Равно(200); + Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300); + Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400); + Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередВсеми), "Обработчики").Содержит("ПередВсеми"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеВсех), "Обработчики").Содержит("ПослеВсех"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередКаждым), "Обработчики").Содержит("ПередКаждым"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики").Содержит("ПослеКаждого"); + Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); + Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4); + Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable"); + Ожидаем.Что(ВерсииИсполняющейСреды[1].Версия, "Версия исполняющей среды 1.9.3").Равно("1.9.3"); + Ожидаем.Что(ВерсииИсполняющейСреды[2].Версия, "Версия исполняющей среды 1.9.4").Равно("1.9.4"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].Версия, "Версия исполняющей среды 2.0.0").Равно("2.0.0"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].Наименование, "Наименование исполняющей среды 2.0.0").Равно("Новая"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].ЭтоЭталон, "Исполняющая среда версии 2.0.0 - эталонная").ЭтоИстина(); + Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); + Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); + Ожидаем.Что(Параметры, "Параметры").ИмеетДлину(2); + Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); + Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); + Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0].ИмяПоля, "Источники параметров").Равно("ОбщееЗначение"); + Ожидаем.Что(ИсточникиПараметров[0].Источник, "Источники параметров").Равно("ПолучитьЗначения"); + +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" index 31bc8ae..0578660 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" @@ -1,3 +1,4 @@ +// BSLLS:LineLength-off // BSLLS:DuplicateStringLiteral-off // BSLLS:MagicNumber-off From b1a297921e8779768d16bc3b9b514b17033a43dd Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Oct 2025 01:59:00 +0300 Subject: [PATCH 03/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20coderabbit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\277\321\203\321\201\320\272\320\260.os" | 17 +++++++++----- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 22 +++++++++---------- ...21\200\320\260\321\202\320\276\321\200.os" | 4 ++-- ...20\276\320\262\320\224\321\202\320\276.os" | 7 +++++- ...20\260\321\200\320\272\320\276\320\262.os" | 12 +++++----- 6 files changed, 37 insertions(+), 27 deletions(-) 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 f0efaf1..fc6e033 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" @@ -115,7 +115,7 @@ Функция ПодключитьТипы() ПодключенныеТипы = Новый Массив(); - Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл + Для Каждого ИмяФайла Из НайтиФайлыБенчмарков() Цикл Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); Если Не Тип = Неопределено Тогда ПодключенныеТипы.Добавить(Тип); @@ -126,18 +126,23 @@ КонецФункции -Функция ФайлыБенчмарков() +Функция НайтиФайлыБенчмарков() Файлы = Новый Массив(); Для Каждого ИмяФайла Из _МассивФайлов Цикл Если ФС.КаталогСуществует(ИмяФайла) Тогда - Файлы = НайтиФайлы(ИмяФайла, , _Рекурсивно); - Для Каждого ИмяФайлаВКаталоге Из Файлы Цикл - Файлы.Добавить(ИмяФайлаВКаталоге); + НайденныеФайлы = НайтиФайлы(ИмяФайла, , _Рекурсивно); + Для Каждого ИмяФайлаВКаталоге Из НайденныеФайлы Цикл + Если Файлы.Найти(ИмяФайлаВКаталоге) = Неопределено Тогда + Файлы.Добавить(ИмяФайлаВКаталоге); + КонецЕсли; КонецЦикла; Иначе - Файлы.Добавить(ПолноеИмяФайлаСценария(ИмяФайла)); + ПолноеИмяФайла = ПолноеИмяФайлаСценария(ИмяФайла); + Если Файлы.Найти(ПолноеИмяФайла) = Неопределено Тогда + Файлы.Добавить(ПолноеИмяФайла); + КонецЕсли; КонецЕсли; КонецЦикла; 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 27145e1..5fb9a56 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -44,7 +44,7 @@ // ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. // // Возвращаемое значение: -// БенчмаркиСКонфигурацией +// НастройкиБенчмарковДто Функция ПрочитатьИзJson(ИмяФайла) Экспорт _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); 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 e36a683..c60dadb 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" @@ -34,13 +34,13 @@ ПрочитатьАннотациюМинимальноеКоличествоВызововЗаИтерацию(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюСортировка(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюМониторингПамяти(СвойстваКонструктора, КонфигурацияБенчмарков); - ПрочитатьАннотацииКолонок(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация); + ПрочитатьАннотацииКолонок(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, КонфигурацияБенчмарков); КонецЕсли; Для Каждого СвойстваПоля Из ТаблицаСвойств Цикл @@ -48,10 +48,10 @@ ПрочитатьАннотациюИсточникПараметров(СвойстваПоля, КонфигурацияБенчмарков); КонецЦикла; - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеВсех, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого, РефлекторОбъекта, Конфигурация); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеВсех, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого, РефлекторОбъекта, КонфигурацияБенчмарков); Возврат КонфигурацияБенчмарков; 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\277\320\260\321\200\320\260\321\202\320\276\321\200.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" index 0d98075..7c76283 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" @@ -3,8 +3,8 @@ // Определяет, совпадают ли значения двух объектов по их внутреннему содержанию. // // Параметры: -// Значение1 - Проивзольный - Первый объект для сравнения -// Значение2 - Проивзольный - Второй объект для сравнения +// Значение1 - Произвольный - Первый объект для сравнения +// Значение2 - Произвольный - Второй объект для сравнения // // Возвращаемое значение: // Булево diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" index 629811e..75eefa6 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" @@ -6,4 +6,9 @@ &Сериализуемое &Тип("КонфигурацияБенчмарков") -Перем Конфигурация Экспорт; // КонфигурацияБенчмарков \ No newline at end of file +Перем Конфигурация Экспорт; // КонфигурацияБенчмарков + +Процедура ПриСозданииОбъекта() + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); + Конфигурация = Новый КонфигурацияБенчмарков(); +КонецПроцедуры \ No newline at end of file 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\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 8343b1d..56fde55 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\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -39,13 +39,13 @@ Ожидаем.Что(ДескрипторыБенчмарков.Количество()).Равно(1); - Дексриптор = ДескрипторыБенчмарков.ПолучитьПервый(); - НаборыПараметров = Дексриптор.НаборыПараметров(); - ИсточникиПараметров = Дексриптор.ИсточникиПараметров(); + Дескриптор = ДескрипторыБенчмарков.ПолучитьПервый(); + НаборыПараметров = Дескриптор.НаборыПараметров(); + ИсточникиПараметров = Дескриптор.ИсточникиПараметров(); - Ожидаем.Что(Дексриптор.ТипОбъекта()).Равно(Тип("БенчмаркСАннотациямиКонфигурации")); - Ожидаем.Что(Дексриптор.Метод()).Равно("Бенчмарк"); - Ожидаем.Что(Дексриптор.ЭтоЭталон()).ЭтоЛожь(); + Ожидаем.Что(Дескриптор.ТипОбъекта()).Равно(Тип("БенчмаркСАннотациямиКонфигурации")); + Ожидаем.Что(Дескриптор.Метод()).Равно("Бенчмарк"); + Ожидаем.Что(Дескриптор.ЭтоЭталон()).ЭтоЛожь(); Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2); Ожидаем.Что(НаборыПараметров[0].Получить(0).Имя, "Наборы параметров [0].Имя").Равно("Парам"); From d3e55ec8f3f1d1c36d7da33f3aa72d31860ee4eb Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Oct 2025 23:52:49 +0300 Subject: [PATCH 04/18] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D1=86=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B2=20json.=20=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D1=8B=20=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B0=20=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D1=83=D0=B5=D0=BC=D1=8B=D1=85=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\274\320\260\321\200\320\272\320\260.os" | 12 ++-- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 39 ++++++----- ...20\274\320\260\321\200\320\272\320\260.os" | 5 ++ ...20\274\320\260\321\200\320\272\320\260.os" | 2 +- ...20\276\320\262\320\224\321\202\320\276.os" | 4 +- ...20\271\320\232\320\273\321\216\321\207.os" | 10 +++ ...0\260\321\202\320\276\321\200JsonBench.os" | 66 ++++++++++++------- ...0\260\321\202\320\276\321\200JsonBench.os" | 58 +++++++++++----- ...21\200\320\260\321\206\320\270\320\270.os" | 1 + ...20\260\321\200\320\272\320\276\320\262.os" | 1 + 11 files changed, 137 insertions(+), 63 deletions(-) create mode 100644 "src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" 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 1e65213..1471f87 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" @@ -3,31 +3,31 @@ #Использовать reflector #Использовать "../../dto" -&Сериализуемое("Тип") +&Сериализуемое("Type") &Тип("Тип") &Заполнено Перем _Тип; // Тип - Класс бенчмарков -&Сериализуемое("Метод") +&Сериализуемое("Method") &Тип("Строка") &Заполнено Перем _Метод; // Строка - Метод бенчмарка -&Сериализуемое("ЭтоЭталон") +&Сериализуемое("IsBaseline") &Тип("Булево") Перем _ЭтоЭталон; // Булево -&Сериализуемое("Категория") +&Сериализуемое("Category") &Тип("Строка") Перем _Категория; // Строка -&Сериализуемое("НаборыПараметров") +&Сериализуемое("ParameterSets") &Тип("Массив") &ДляКаждого &Тип("ПараметрыМетодаБенчмарка") Перем _НаборыПараметров; // Массив из ПараметрыМетодаБенчмарка -&Сериализуемое("ИсточникиПараметров") +&Сериализуемое("ParameterSources") &Тип("Массив") Перем _ИсточникиПараметров; // Массив из Строка, Делегат diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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 352ea9a..1d16c71 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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" @@ -1,6 +1,6 @@ #Использовать fluent -&Сериализуемое("Элементы") +&Сериализуемое("Items") &Тип("Массив") &ДляКаждого &Тип("ДескрипторБенчмарка") 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 3456d68..ad0926e 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" @@ -3,82 +3,89 @@ #Использовать validate #Использовать reflector -&Сериализуемое("Стратегия") +&Сериализуемое("Strategy") &Тип("Строка") &Геттер("Стратегия") Перем _Стратегия; // см. СтратегииЗапускаБенчмарка -&Сериализуемое("КоличествоИтераций") +&Сериализуемое("IterationCount") &Тип("Число") &Геттер("КоличествоИтераций") Перем _КоличествоИтераций; // Число -&Сериализуемое("КоличествоВызововЗаИтерацию") +&Сериализуемое("InvocationCount") &Тип("Число") &Геттер("КоличествоВызововЗаИтерацию") Перем _КоличествоВызововЗаИтерацию; // Число -&Сериализуемое("КоличествоПрогревочныхИтераций") +&Сериализуемое("WarmupCount") &Тип("Число") &Геттер("КоличествоПрогревочныхИтераций") Перем _КоличествоПрогревочныхИтераций; // Число -&Сериализуемое("МинимальноеВремяИтерации") +&Сериализуемое("MinIterationTime") &Тип("Число") &Геттер("МинимальноеВремяИтерации") Перем _МинимальноеВремяИтерации; // Число - мс -&Сериализуемое("МинимальноеКоличествоВызововЗаИтерацию") +&Сериализуемое("MinInvocationCount") &Тип("Число") &Геттер("МинимальноеКоличествоВызововЗаИтерацию") Перем _МинимальноеКоличествоВызововЗаИтерацию; // Число -&Сериализуемое("СортировкаОтчета") +&Сериализуемое("ReportSorting") &Тип("Строка") &Геттер("СортировкаОтчета") Перем _СортировкаОтчета; // см. СортировкиОтчетаБенчмарков -&Сериализуемое("ТребуетсяМониторингПамяти") +&Сериализуемое("Memory") &Тип("Булево") &Геттер("ТребуетсяМониторингПамяти") Перем _ТребуетсяМониторингПамяти; // Булево -&Сериализуемое("КаталогАртефактов") +&Сериализуемое("ArtifactsDirectory") &Тип("Строка") &Геттер("КаталогАртефактов") Перем _КаталогАртефактов; // Строка -&Сериализуемое("Параметры") +&Сериализуемое("Parameters") &Тип("Массив") &ДляКаждого &Тип("ПараметрБенчмарка") &Геттер("Параметры") Перем _Параметры; // Массив из ПараметрБенчмарка -&Сериализуемое("ИсточникиПараметров") +&Сериализуемое("ParameterSources") +&СериализуемыйКлюч("ИмяПоля", "FieldName") +&СериализуемыйКлюч("Источник", "Source") &Тип("ТаблицаЗначений") &Геттер("ИсточникиПараметров") Перем _ИсточникиПараметров; // ТаблицаЗначений -&Сериализуемое("Обработчики") +&Сериализуемое("Handlers") +&СериализуемыйКлюч("Событие", "Event") +&СериализуемыйКлюч("Обработчик", "Handler") &Тип("ТаблицаЗначений") &Геттер("ОбработчикиСобытий") Перем _Обработчики; // ТаблицаЗначений -&Сериализуемое("Колонки") +&Сериализуемое("Columns") &Тип("Массив") &Геттер("Колонки") Перем _Колонки; // Массив из Строка - см. КолонкиОтчетаБенчмарков &Несериализуемое &Геттер("Экспортеры") -Перем _Экспортеры; // Массив из см. ЭкспортерыРезультатовБенчмарков +Перем _Экспортеры; // Массив из Произвольный - см. ЭкспортерыРезультатовБенчмарков -&Сериализуемое("Экспортеры") +&Сериализуемое("Exporters") &Тип("Массив") Перем _ЭкспортерыСериализуемое; // Массив из Строка -&Сериализуемое("ВерсииИсполняющейСреды") +&Сериализуемое("RuntimeVersions") +&СериализуемыйКлюч("Версия", "Version") +&СериализуемыйКлюч("Наименование", "Name") +&СериализуемыйКлюч("ЭтоЭталон", "IsBaseline") &Тип("ТаблицаЗначений") &Геттер("ВерсииИсполняющейСреды") Перем _ВерсииИсполняющейСреды; // ТаблицаЗначений diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 337727a..cc184d2 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -1,7 +1,12 @@ // BSLLS:ExportVariables-off +&Сериализуемое("Name") Перем Имя Экспорт; // Строка + +&Сериализуемое("Value") Перем Значение Экспорт; // Произвольный + +&Сериализуемое("IsMethodParameter") Перем ЭтоПараметрМетода Экспорт; // Булево Процедура ПриСозданииОбъекта(пИмя = "", пЗначение = Неопределено, пЭтоПараметрМетода = Ложь) diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 694339d..e17ab6b 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -1,6 +1,6 @@ #Использовать asserts -&Сериализуемое +&Сериализуемое("Items") &Тип("Массив") &ДляКаждого &Тип("ПараметрБенчмарка") diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" index 75eefa6..600a431 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" @@ -1,10 +1,10 @@ // BSLLS:ExportVariables-off -&Сериализуемое +&Сериализуемое("BenchmarkDescriptors") &Тип("КоллекцияДескрипторовБенчмарков") Перем ДескрипторыБенчмарков Экспорт; // КоллекцияДескрипторовБенчмарков -&Сериализуемое +&Сериализуемое("Configuration") &Тип("КонфигурацияБенчмарков") Перем Конфигурация Экспорт; // КонфигурацияБенчмарков diff --git "a/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" "b/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" new file mode 100644 index 0000000..49d7ea9 --- /dev/null +++ "b/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" @@ -0,0 +1,10 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) +// +// Параметры: +// Значение - Строка - Первый параметр аннотации задаёт имя сериализуемого ключа, +// а второй - имя ключа в JSON. +// +&Аннотация("СериализуемыйКлюч") +Процедура ПриСозданииОбъекта(Значение) +КонецПроцедуры diff --git "a/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" index f38c3fe..97021d7 100644 --- "a/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" +++ "b/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -62,7 +62,7 @@ #Область СлужебныеПроцедурыИФункции -Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов = Неопределено) +Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов = Неопределено, ДесериализуемыеКлючи = Неопределено) Если ЭтоПримитивныйТип(ТипОбъекта) Тогда Возврат ПреобразоватьПримитивныйТип(ДесериализованныйОбъект, ТипОбъекта); @@ -73,7 +73,7 @@ ИначеЕсли ТипОбъекта = Тип("Структура") Тогда Возврат ПреобразоватьОбъект(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); ИначеЕсли ТипОбъекта = Тип("ТаблицаЗначений") Тогда - Возврат ПреобразоватьТаблицуЗначений(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + Возврат ПреобразоватьТаблицуЗначений(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов, ДесериализуемыеКлючи); ИначеЕсли ТипОбъекта = Тип("Тип") Тогда Возврат ПреобразоватьТип(ДесериализованныйОбъект); ИначеЕсли ЭтоПользовательскийТип(ТипОбъекта) Тогда @@ -114,7 +114,7 @@ КонецФункции -Функция ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта, ТипЭлементов) +Функция ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта, ТипЭлементов, ДесериализуемыеКлючи) Результат = Новый ТаблицаЗначений; КоличествоЭлементов = Объект.Количество(); @@ -123,30 +123,35 @@ Возврат Результат; КонецЕсли; - ИменаКолонок = Объект[0]; - Если Не ТипЗнч(ИменаКолонок) = Тип("Массив") Тогда - Возврат Результат; - КонецЕсли; + ДобавленныеКолонки = Новый МножествоСоответствие; - КоличествоКолонок = ИменаКолонок.Количество(); - - Для Каждого ИмяКолонки Из ИменаКолонок Цикл - Результат.Колонки.Добавить(ИмяКолонки); - КонецЦикла; + Для ИндексЭлемента = 0 По КоличествоЭлементов - 1 Цикл - Для ИндексЭлемента = 1 По КоличествоЭлементов - 1 Цикл ЗначенияКолонок = Объект[ИндексЭлемента]; - Если Не ТипЗнч(ЗначенияКолонок) = Тип("Массив") Тогда + Если Не (ТипЗнч(ЗначенияКолонок) = Тип("Структура") Или ТипЗнч(ЗначенияКолонок) = Тип("Соответствие")) Тогда Продолжить; КонецЕсли; СтрокаТаблицы = Результат.Добавить(); - Для ИндексКолонки = 0 По Мин(КоличествоКолонок, ЗначенияКолонок.Количество()) - 1 Цикл - ИмяКолонки = ИменаКолонок[ИндексКолонки]; - ЗначениеКолонки = ЗначенияКолонок[ИндексКолонки]; + Для Каждого КлючИЗначение Из ЗначенияКолонок Цикл + + ИмяКолонки = КлючИЗначение.Ключ; + ЗначениеКолонки = КлючИЗначение.Значение; + + Если ДесериализуемыеКлючи.Свойство(ИмяКолонки) Тогда + ИмяКолонки = ДесериализуемыеКлючи[ИмяКолонки]; + КонецЕсли; + + Если Не ДобавленныеКолонки.Содержит(ИмяКолонки) Тогда + Результат.Колонки.Добавить(ИмяКолонки); + ДобавленныеКолонки.Добавить(ИмяКолонки); + КонецЕсли; + ПреобразованныйЭлемент = ПреобразоватьОбъектДесериализации(ЗначениеКолонки, ТипЗнч(ЗначениеКолонки)); СтрокаТаблицы[ИмяКолонки] = ПреобразованныйЭлемент; + КонецЦикла; + КонецЦикла; Возврат Результат; @@ -181,10 +186,9 @@ КонецЦикла; Для Каждого КлючИЗначение Из Объект Цикл + Свойство = СвойстваПоИменамПолей[КлючИЗначение.Ключ]; Если Свойство = Неопределено Тогда - // Если поле не найдено, то пропускаем его - // TODO: Падать, если не висит @JsonIgnore Продолжить; КонецЕсли; @@ -195,13 +199,15 @@ ТипСвойства = ТипыСвойства.БазовыйТип; ТипЭлементов = ТипыСвойства.ТипЭлементов; - ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, ТипСвойства, ТипЭлементов); + ДесериализуемыеКлючи = ПолучитьДесериализуемыеКлючи(Свойство); + ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, ТипСвойства, ТипЭлементов, ДесериализуемыеКлючи); Если ТипСвойства <> Неопределено И ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда Лог.Ошибка("Тип свойства '%1' не соответствует ожидаемому типу '%2'", ТипЗнч(ЗначениеСвойства), ТипСвойства); Продолжить; КонецЕсли; Рефлектор.УстановитьСвойство(Результат, ИмяСвойства, ЗначениеСвойства); + КонецЦикла; Если Рефлектор.МетодСуществует(Результат, "ПослеДесериализации") Тогда @@ -212,8 +218,6 @@ КонецФункции -#КонецОбласти - Функция ПолучитьТипыСвойства(Свойство, ЗначениеСвойства) ОписаниеСвойства = Новый Структура(); @@ -258,6 +262,24 @@ КонецФункции +Функция ПолучитьДесериализуемыеКлючи(СвойствоОбъекта) + + ДесериализуемыеКлючи = Новый Структура(); + + АннотацииСериализуемыеКлючи = РаботаСАннотациями.НайтиАннотации(СвойствоОбъекта.Аннотации, "СериализуемыйКлюч"); + Для Каждого Аннотация Из АннотацииСериализуемыеКлючи Цикл + КоличествоПараметров = Аннотация.Параметры.Количество(); + Если КоличествоПараметров > 1 Тогда + ДесериализуемыеКлючи.Вставить(Аннотация.Параметры[1].Значение, Аннотация.Параметры[0].Значение); + КонецЕсли; + КонецЦикла; + + Возврат ДесериализуемыеКлючи; + +КонецФункции + +#КонецОбласти + Процедура ПриСозданииОбъекта() Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.jason.ДесериализаторJson"); diff --git "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" index 9de2d3a..e162dff 100644 --- "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" +++ "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" @@ -49,7 +49,7 @@ #Область СлужебныеПроцедурыИФункции -Функция ПреобразоватьОбъектСериализации(Объект) +Функция ПреобразоватьОбъектСериализации(Объект, СериализуемыеКлючи = Неопределено) ТипОбъекта = ТипЗнч(Объект); @@ -58,7 +58,7 @@ ИначеЕсли ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда Результат = ПреобразоватьСтруктуру(Объект); ИначеЕсли ТипОбъекта = Тип("ТаблицаЗначений") Тогда - Результат = ПреобразоватьТаблицуЗначений(Объект); + Результат = ПреобразоватьТаблицуЗначений(Объект, СериализуемыеКлючи); ИначеЕсли ЭтоПримитивныйТип(ТипОбъекта) Тогда Результат = ПреобразоватьПримитивныйТип(Объект); ИначеЕсли ТипОбъекта = Тип("Тип") Тогда @@ -97,21 +97,28 @@ Возврат Результат; КонецФункции -Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений) Экспорт +Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений, СериализуемыеКлючи) Экспорт Результат = Новый Массив(); - - ИменаКолонок = Новый Массив(); - Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл - ИменаКолонок.Добавить(Колонка.Имя); - КонецЦикла; - Результат.Добавить(ИменаКолонок); + СерриализоватьВсеКолонки = СериализуемыеКлючи.Количество() = 0; Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл - ЗначенияКолонок = Новый Массив(); + ЗначенияКолонок = Новый Структура(); Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл - ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); - ЗначенияКолонок.Добавить(ПреобразованноеЗначение); + + Если СериализуемыеКлючи.Свойство(Колонка.Имя) Тогда + ИмяКлюча = СериализуемыеКлючи[Колонка.Имя]; + ИначеЕсли СерриализоватьВсеКолонки Тогда + ИмяКлюча = Колонка.Имя; + Иначе + Продолжить; + КонецЕсли; + + Если СерриализоватьВсеКолонки Или СериализуемыеКлючи.Свойство(Колонка.Имя) Тогда + ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); + ЗначенияКолонок.Вставить(ИмяКлюча, ПреобразованноеЗначение); + КонецЕсли; + КонецЦикла; Результат.Добавить(ЗначенияКолонок); КонецЦикла; @@ -161,18 +168,39 @@ ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", СвойствоОбъекта.Имя); Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Обязательное", Обязательное); КонецЕсли; - + + СериализуемыеКлючи = ПолучитьСериализуемыеКлючи(СвойствоОбъекта); + ЗначениеСвойства = Рефлектор.ПолучитьСвойство(Объект, СвойствоОбъекта.Имя); - ЗначениеСвойства = ПреобразоватьОбъектСериализации(ЗначениеСвойства); + ЗначениеСвойства = ПреобразоватьОбъектСериализации(ЗначениеСвойства, СериализуемыеКлючи); Если Обязательное ИЛИ ЗначениеСвойства <> Неопределено Тогда Результат.Вставить(ИмяСвойства, ЗначениеСвойства); КонецЕсли; + КонецЦикла; Возврат Результат; КонецФункции +Функция ПолучитьСериализуемыеКлючи(СвойствоОбъекта) + + СериализуемыеКлючи = Новый Структура(); + + АннотацииСериализуемыеКлючи = РаботаСАннотациями.НайтиАннотации(СвойствоОбъекта.Аннотации, "СериализуемыйКлюч"); + Для Каждого Аннотация Из АннотацииСериализуемыеКлючи Цикл + КоличествоПараметров = Аннотация.Параметры.Количество(); + Если КоличествоПараметров = 1 Тогда + СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение); + ИначеЕсли КоличествоПараметров > 1 Тогда + СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение, Аннотация.Параметры[1].Значение); + КонецЕсли; + КонецЦикла; + + Возврат СериализуемыеКлючи; + +КонецФункции + #КонецОбласти Процедура ПриСозданииОбъекта() @@ -194,4 +222,4 @@ ПримитивныеТипы.Добавить(Тип("Null")); ПримитивныеТипы.Добавить(Тип("Неопределено")); -КонецПроцедуры +КонецПроцедуры \ 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 9d0aee8..6e30c4c 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" @@ -783,6 +783,7 @@ Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); Ожидаем.Что(Параметры, "Параметры").ИмеетДлину(2); + Ожидаем.Что(Параметры[0], "Параметры").ИмеетТип("ПараметрБенчмарка"); Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); 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\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 56fde55..dd7bec1 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\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -96,6 +96,7 @@ Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); Ожидаем.Что(Параметры, "Параметры").ИмеетДлину(2); + Ожидаем.Что(Параметры[0], "Параметры").ИмеетТип("ПараметрБенчмарка"); Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); From fe3ba8cb8207ee7f329af8090e6c910f5513b3db Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sun, 19 Oct 2025 12:57:37 +0300 Subject: [PATCH 05/18] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC=20coderabbitai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...67\320\260\321\202\320\276\321\200JsonBench.os" | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" index e162dff..45f00ef 100644 --- "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" +++ "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" @@ -100,27 +100,29 @@ Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений, СериализуемыеКлючи) Экспорт Результат = Новый Массив(); - СерриализоватьВсеКолонки = СериализуемыеКлючи.Количество() = 0; + СериализоватьВсеКолонки = СериализуемыеКлючи.Количество() = 0; Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + ЗначенияКолонок = Новый Структура(); + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл Если СериализуемыеКлючи.Свойство(Колонка.Имя) Тогда ИмяКлюча = СериализуемыеКлючи[Колонка.Имя]; - ИначеЕсли СерриализоватьВсеКолонки Тогда + ИначеЕсли СериализоватьВсеКолонки Тогда ИмяКлюча = Колонка.Имя; Иначе Продолжить; КонецЕсли; - Если СерриализоватьВсеКолонки Или СериализуемыеКлючи.Свойство(Колонка.Имя) Тогда - ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); - ЗначенияКолонок.Вставить(ИмяКлюча, ПреобразованноеЗначение); - КонецЕсли; + ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); + ЗначенияКолонок.Вставить(ИмяКлюча, ПреобразованноеЗначение); КонецЦикла; + Результат.Добавить(ЗначенияКолонок); + КонецЦикла; Возврат Результат; From edd21403e76dcbf2c11d2b63a8eebd483106523b Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sun, 19 Oct 2025 13:14:41 +0300 Subject: [PATCH 06/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC=20coderabbitai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7\320\274\320\260\321\200\320\272\320\276\320\262.os" | 6 +++--- ...\320\267\320\260\321\202\320\276\321\200JsonBench.os" | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) 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 9ee96a6..2cab647 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" @@ -172,7 +172,7 @@ Тип = _ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта(); ИмяФайлаИсполняющейСреды = ИмяФайлаИсполняющейСреды(Версия); ИмяФайлаТочкиВхода = ТочкаВходаКонсольногоПриложения(); - ИмяФайлаКонфигурации = ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация); + ИмяФайлаКонфигурации = ЗаписатьНастройкиВФайл(_ДескрипторыБенчмарков, Конфигурация); ИмяФайлаТипа = Новый РасширениеТипа(Тип).Источник; КаталогБиблиотек = ИсполняющаяСредаБенчмарков.КаталогБиблиотек(); @@ -238,12 +238,12 @@ КонецФункции -Функция ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация) +Функция ЗаписатьНастройкиВФайл(ДескрипторыБенчмарков, Конфигурация) ПутьКФайлу = _МенеджерВременныхФайлов.СоздатьФайл("json"); Сериализатор = Новый СериализаторНастроекБенчмарков(); - Сериализатор.ЗаписатьВJson(_ДескрипторыБенчмарков, Конфигурация, ПутьКФайлу); + Сериализатор.ЗаписатьВJson(ДескрипторыБенчмарков, Конфигурация, ПутьКФайлу); Возврат ПутьКФайлу; diff --git "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" index 45f00ef..5289e6d 100644 --- "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" +++ "b/src/BenchmarkOneScript/jason/\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\200JsonBench.os" @@ -97,9 +97,14 @@ Возврат Результат; КонецФункции -Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений, СериализуемыеКлючи) Экспорт +Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений, СериализуемыеКлючи = Неопределено) Экспорт Результат = Новый Массив(); + + Если СериализуемыеКлючи = Неопределено Тогда + СериализуемыеКлючи = Новый Структура(); + КонецЕсли; + СериализоватьВсеКолонки = СериализуемыеКлючи.Количество() = 0; Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл @@ -193,7 +198,7 @@ Для Каждого Аннотация Из АннотацииСериализуемыеКлючи Цикл КоличествоПараметров = Аннотация.Параметры.Количество(); Если КоличествоПараметров = 1 Тогда - СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение); + СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение, Аннотация.Параметры[0].Значение); ИначеЕсли КоличествоПараметров > 1 Тогда СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение, Аннотация.Параметры[1].Значение); КонецЕсли; From 85b4e5a9c4a9c2a0cdadc50578bb1d8c55d9bca8 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 00:29:10 +0300 Subject: [PATCH 07/18] =?UTF-8?q?refactor:=20=D0=A0=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D0=BE=D0=B2=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bsl-language-server.json | 2 +- README.md | 2 +- docs/CLI.md | 2 +- ...20\261\321\213\321\202\320\270\320\271.md" | 7 +- ...21\202\320\260\321\202\320\276\320\262.md" | 4 - ...21\200\320\270\320\274\320\265\321\200.os" | 4 +- ...21\202\320\260\321\202\320\276\320\262.os" | 1 - ...20\265\320\222\321\201\320\265\321\205.os" | 4 +- ...20\266\320\264\320\276\320\263\320\276.os" | 2 +- ...201\320\277\320\276\321\200\321\202Xml.os" | 12 - ...20\277\321\203\321\201\320\272\320\260.os" | 21 +- ...321\200\320\272\320\276\320\262RatioSD.os" | 10 +- ...20\241\321\200\320\265\320\264\321\213.os" | 8 +- ...21\200\321\202\320\270\320\273\321\214.os" | 6 +- ...20\260\320\274\321\217\321\202\321\214.os" | 6 +- ...20\263\320\276\321\200\320\270\321\217.os" | 6 +- ...20\275\320\276\321\201\321\202\320\270.os" | 10 +- ...20\262\320\234\320\260\320\272\321\201.os" | 6 +- ...20\264\320\270\320\260\320\275\320\260.os" | 6 +- ...20\234\320\265\321\202\320\276\320\264.os" | 6 +- ...20\276\320\262\320\234\320\270\320\275.os" | 6 +- ...21\200\321\202\320\270\320\273\321\214.os" | 6 +- ...20\272\321\203\320\275\320\264\321\203.os" | 6 +- ...20\260\320\274\320\265\321\202\321\200.os" | 6 +- ...20\275\321\202\320\270\320\273\321\214.os" | 6 +- ...20\265\320\264\320\275\320\265\320\265.os" | 6 +- ...21\210\320\270\320\261\320\272\320\260.os" | 6 +- ...20\275\320\265\320\275\320\270\320\265.os" | 6 +- ...21\202\320\260\320\273\320\276\320\275.os" | 6 +- ...20\274\320\260\321\200\320\272\320\260.os" | 31 +- ...20\274\320\260\321\200\320\272\320\260.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 207 ++++---- ...20\260\320\273\320\276\320\263\320\260.os" | 5 +- ...20\260\321\200\320\272\320\276\320\262.os" | 29 +- ...20\260\321\200\320\272\320\276\320\262.os" | 6 +- ...20\260\321\200\320\272\320\276\320\262.os" | 103 ++-- ...20\260\321\200\320\272\320\276\320\262.os" | 210 -------- ...20\260\321\200\320\272\320\276\320\262.os" | 38 +- ...20\260\321\200\320\272\320\276\320\262.os" | 163 +++++++ ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 407 +--------------- ...20\260\321\200\320\272\320\276\320\262.os" | 60 +++ ...20\274\320\260\321\200\320\272\320\260.os" | 91 +++- ...00\320\272\320\276\320\262\320\222Html.os" | 12 +- ...00\320\272\320\276\320\262\320\222Json.os" | 8 +- ...20\272\320\276\320\262\320\222Markdown.os" | 12 +- ...200\320\272\320\276\320\262\320\222Xml.os" | 21 - ...21\200\320\272\320\270\320\275\320\263.os" | 16 +- ...20\260\321\200\320\272\320\276\320\262.os" | 7 +- ...20\260\321\200\320\272\320\276\320\262.os" | 9 - ...20\260\321\200\320\272\320\276\320\262.os" | 10 +- ...20\260\321\200\320\272\320\276\320\262.os" | 4 +- ...20\272\320\270\320\275\320\263\320\260.os" | 1 + ...20\260\321\200\320\272\320\276\320\262.os" | 2 - ...21\203\320\265\320\274\320\276\320\265.os" | 0 ...21\203\320\265\320\274\320\276\320\265.os" | 0 ...20\271\320\232\320\273\321\216\321\207.os" | 0 ...0\260\321\202\320\276\321\200JsonBench.os" | 98 +++- ...0\260\321\202\320\276\321\200JsonBench.os" | 150 ++++-- ...20\276\320\262\320\224\321\202\320\276.os" | 21 + ...20\272\320\260\320\224\321\202\320\276.os" | 125 +++++ ...20\272\320\260\320\224\321\202\320\276.os" | 41 ++ tests/fixtures/verified-report.json | 451 ++++++++++-------- tests/fixtures/verified-report.xml | 302 ------------ ...21\200\320\260\321\206\320\270\320\270.os" | 3 +- ...20\261\321\213\321\202\320\270\320\271.os" | 9 +- ...20\260\321\200\320\272\320\276\320\262.os" | 8 +- ...20\260\321\200\320\272\320\276\320\262.os" | 86 ++-- ...20\274\320\265\321\200\320\276\320\262.os" | 10 +- ...21\200\320\260\321\206\320\270\320\270.os" | 30 +- ...20\260\321\200\320\272\320\276\320\262.os" | 3 +- ...21\201\321\202\320\270\320\272\320\270.os" | 63 ++- ...20\273\320\276\320\275\320\276\320\262.os" | 50 +- 73 files changed, 1390 insertions(+), 1695 deletions(-) delete mode 100644 "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\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" delete mode 100644 "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\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" create mode 100644 "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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" delete mode 100644 "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Xml.os" rename "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" => "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" (96%) rename "src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" => "src/BenchmarkOneScript/custom-jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" (100%) rename "src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" => "src/BenchmarkOneScript/custom-jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" (100%) rename "src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" => "src/BenchmarkOneScript/custom-jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" (100%) rename "src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" => "src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" (85%) rename "src/BenchmarkOneScript/jason/\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\200JsonBench.os" => "src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" (71%) create mode 100644 "src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" create mode 100644 "src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" create mode 100644 "src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\230\321\202\320\265\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\260\320\224\321\202\320\276.os" delete mode 100644 tests/fixtures/verified-report.xml rename "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" => "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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" (96%) diff --git a/.bsl-language-server.json b/.bsl-language-server.json index a748b4f..50e9d11 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,7 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас" + "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Десериализации,Несериализуемых,Валидатор,Валидировать,Алиас" } } } diff --git a/README.md b/README.md index 5e60e28..0123af0 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ - **Мониторинг памяти:** отслеживание аллокации памяти во время выполнения. - **Мультиверсионное сравнение:** запуск бенчмарков на указанных версиях исполняющей среды OneScript с консолидацией результатов. - **Метрики:** время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили. -- **Экспорт результатов:** сохранение результатов выполнения бенчмарков в Markdown, JSON, XML, HTML. +- **Экспорт результатов:** сохранение результатов выполнения бенчмарков в Markdown, JSON, HTML. ## 🚀 Быстрый старт diff --git a/docs/CLI.md b/docs/CLI.md index ae60179..00c9912 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -20,7 +20,7 @@ benchos run [OPTIONS] [FILE] | `--throughput` | Стратегия выполнения [`ПропускнаяСпособность`](СтратегииЗапуска.md#пропускная-способность-throughput) | | | `--coldstart` | Стратегия выполнения [`ХолодныйЗапуск`](СтратегииЗапуска.md#холодный-запуск-cold-start) | | | `-m`, `--memory` | Включить [мониторинг использования памяти](МониторингПамяти.md) | | -| `-e`, `--exporters` | Форматы [экспорта результатов](ЭкспортРезультатов.md) (`md`, `json`, `xml`, `html`) | `-e json,xml` | +| `-e`, `--exporters` | Форматы [экспорта результатов](ЭкспортРезультатов.md) (`md`, `json`, `html`) | `-e json,html` | | `-a`, `--artifacts` | Каталог для сохранения результатов | `-a path/to/file` | | `-r`, `--recursive` | Рекурсивный поиск в поддиректориях | | | `--settings` | Файл настроек бенчмарков в формате JSON | `--settings path/to/settings.json` | diff --git "a/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" "b/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" index fe187d6..f8ed076 100644 --- "a/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" +++ "b/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" @@ -27,10 +27,11 @@ ```bsl // Параметры: // * Контекст - Структура: -// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // ** Конфигурация - КонфигурацияБенчмарков -// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// ** Запуски - Массив из РезультатЗапускаБенчмаркаДто // ** Отчет - ОтчетБенчмарков +// ** СредаОкружения - СредаОкруженияБенчмарков &ПослеВсех Процедура ПослеВсех(Контекст) Экспорт ``` @@ -57,7 +58,7 @@ // * Контекст - Структура: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// ** Замеры - Массив из РезультатИтерацииБенчмаркаДто // ** Статистика - СтатистикаБенчмарка &ПослеКаждого Процедура ПослеКаждого(Контекст) Экспорт diff --git "a/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" "b/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" index 56ea7d5..e0cd4b0 100644 --- "a/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" +++ "b/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" @@ -25,7 +25,6 @@ ```bsl &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml Процедура ПриСозданииОбъекта() ``` @@ -35,7 +34,6 @@ ```bsl // Добавление экспортера (например, для JSON) Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); -// ЭкспортерыРезультатовБенчмарков.Xml // ЭкспортерыРезультатовБенчмарков.Html // ЭкспортерыРезультатовБенчмарков.Markdown @@ -51,7 +49,6 @@ ```bsl &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml &КаталогАртефактов("./АртефкатыЗапускаБенчмарков") Процедура ПриСозданииОбъекта() @@ -85,5 +82,4 @@ Op/s : Операций в секунду C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.html C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.json C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.md -C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.xml ``` \ No newline at end of file diff --git "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" index 66da71d..93170e8 100644 --- "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" +++ "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -8,7 +8,7 @@ Порог = 150; // мс Результат = Бенчмаркинг.Запустить(Тип("БенчмаркБазовый")); - Статистика = Результат.Расшифровка[0].Статистика.ВМиллисекунды(); + Статистика = Результат.Запуски[0].Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее).Меньше(Порог); @@ -23,7 +23,7 @@ ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("А2"); Результат = Бенчмаркинг.Запустить(ДескрипторБенчмарка); - Статистика = Результат.Расшифровка[0].Статистика.ВМиллисекунды(); + Статистика = Результат.Запуски[0].Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее).Меньше(Порог); 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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" index 05fd177..6c4eb23 100644 --- "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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" @@ -1,6 +1,5 @@ &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml Процедура ПриСозданииОбъекта() КонецПроцедуры 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\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.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\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" index 1dc370e..1217453 100644 --- "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\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.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\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" @@ -5,9 +5,9 @@ // // Параметры: // Контекст - Структура: -// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // * Конфигурация - КонфигурацияБенчмарков -// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// * Запуски - Массив из РезультатЗапускаБенчмаркаДто // * Отчет - ОтчетБенчмарков // * СредаОкружения - СредаОкруженияБенчмарков // 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\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.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\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" index bf14c6c..77087d4 100644 --- "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\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.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\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" @@ -7,7 +7,7 @@ // Контекст - Структура: // * ДескрипторБенчмарка - ДескрипторБенчмарка // * Параметры - Массив из ПараметрБенчмарка -// * Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// * Замеры - Массив из РезультатИтерацииБенчмаркаДто // * Статистика - СтатистикаБенчмарка // // Примеры: 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\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.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\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" deleted file mode 100644 index aa1ce58..0000000 --- "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\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" +++ /dev/null @@ -1,12 +0,0 @@ -// Автоматически генерирует отчет о результатах бенчмарков в формате XML (.xml). -// -// Применяется только к методу ПриСозданииОбъекта. -// -// Примеры: -// &ЭкспортXml -// Процедура ПриСозданииОбъекта() -// // ... -// КонецПроцедуры -&Аннотация("ЭкспортXml") -Процедура ПриСозданииОбъекта() -КонецПроцедуры \ No newline at end of file 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 fc6e033..3bccd12 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" @@ -28,7 +28,7 @@ &ТЧисло Перем _КоличествоВызововЗаИтерацию; // Число -&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов через запятую (md, json, xml, html)") +&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов через запятую (md, json, html)") &ТСтрока Перем _Экспортеры; // Строка @@ -89,13 +89,7 @@ Источник = Тип; КонецЕсли; - Попытка - Бенчмаркинг.Запустить(Источник, КонфигурацияТипа); - Исключение - _Лог.Ошибка("Возникла ошибка при запуске бенчмарков <%1>: %2", - Тип, - ОписаниеОшибки()); - КонецПопытки; + Бенчмаркинг.Запустить(Источник, КонфигурацияТипа); КонецЦикла; @@ -132,10 +126,10 @@ Для Каждого ИмяФайла Из _МассивФайлов Цикл Если ФС.КаталогСуществует(ИмяФайла) Тогда - НайденныеФайлы = НайтиФайлы(ИмяФайла, , _Рекурсивно); - Для Каждого ИмяФайлаВКаталоге Из НайденныеФайлы Цикл - Если Файлы.Найти(ИмяФайлаВКаталоге) = Неопределено Тогда - Файлы.Добавить(ИмяФайлаВКаталоге); + НайденныеФайлы = НайтиФайлы(ИмяФайла, "*.os", _Рекурсивно); + Для Каждого Файл Из НайденныеФайлы Цикл + Если Файлы.Найти(Файл.ПолноеИмя) = Неопределено Тогда + Файлы.Добавить(Файл.ПолноеИмя); КонецЕсли; КонецЦикла; Иначе @@ -223,14 +217,13 @@ ДопустимыеЗначения = Новый Соответствие(); ДопустимыеЗначения.Вставить("markdown", "Markdown"); ДопустимыеЗначения.Вставить("json", "Json"); - ДопустимыеЗначения.Вставить("xml", "Xml"); ДопустимыеЗначения.Вставить("html", "Html"); Для Каждого Экспортер Из СтрРазделить(_Экспортеры, ", ", Ложь) Цикл Имя = ДопустимыеЗначения[НРег(Экспортер)]; - ТекстОшибки = СтрШаблон("Неизвестный экспортер %1. Допустимые значения: markdown, json, xml, html", Экспортер); + ТекстОшибки = СтрШаблон("Неизвестный экспортер %1. Допустимые значения: markdown, json, html", Экспортер); Ожидаем.Что(Имя, ТекстОшибки).Заполнено(); Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков[Имя]); 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\262RatioSD.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\262RatioSD.os" index 3db6d92..c013fd2 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\262RatioSD.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\262RatioSD.os" @@ -26,22 +26,22 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Если СтрокаРезультата.ЭтоЭталон Тогда + Если РезультатЗапускаБенчмарка.ЭтоЭталон Тогда Возврат 0; КонецЕсли; - Если СтрокаРезультата.Эталон = Неопределено Тогда + Если РезультатЗапускаБенчмарка.Эталон = Неопределено Тогда Возврат "?"; КонецЕсли; - Статистика = СтрокаРезультата.Статистика.Разделить(СтрокаРезультата.Эталон.Статистика); + Статистика = РезультатЗапускаБенчмарка.Статистика.Разделить(РезультатЗапускаБенчмарка.Эталон.Статистика); Возврат Статистика.СтандартноеОтклонение; 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\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.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\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" index 9dd095b..4d6b952 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\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.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\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" @@ -17,18 +17,18 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Строка -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - ИсполняющаяСреда = СтрокаРезультата.ИсполняющаяСреда; + ИсполняющаяСреда = РезультатЗапускаБенчмарка.ИсполняющаяСреда; Если ЗначениеЗаполнено(ИсполняющаяСреда.Наименование) Тогда Возврат СтрШаблон("%1 (%2)", ИсполняющаяСреда.Наименование, ИсполняющаяСреда.Версия); КонецЕсли; - Возврат СтрокаРезультата.ИсполняющаяСреда.Версия; + Возврат РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия; КонецФункции \ 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\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.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\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index 1d6d1e3..e700db7 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\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.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\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().ВерхнийКвартиль; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().ВерхнийКвартиль; КонецФункции \ 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\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.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\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" index cc0428b..ccbc31f 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\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.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\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВыделяемаяПамять; + Возврат РезультатЗапускаБенчмарка.Статистика.ВыделяемаяПамять; КонецФункции \ 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\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.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\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" index 00b3aef..d30c49e 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\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.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\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" @@ -17,13 +17,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ДескрипторБенчмарка.Категория(); + Возврат РезультатЗапускаБенчмарка.ДескрипторБенчмарка.Категория(); КонецФункции \ 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\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.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\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" index bdc4af0..0598b29 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\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.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\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" @@ -24,22 +24,22 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Если СтрокаРезультата.ЭтоЭталон Тогда + Если РезультатЗапускаБенчмарка.ЭтоЭталон Тогда Возврат 1; КонецЕсли; - Если СтрокаРезультата.Эталон = Неопределено Тогда + Если РезультатЗапускаБенчмарка.Эталон = Неопределено Тогда Возврат "?"; КонецЕсли; - Статистика = СтрокаРезультата.Статистика.Разделить(СтрокаРезультата.Эталон.Статистика); + Статистика = РезультатЗапускаБенчмарка.Статистика.Разделить(РезультатЗапускаБенчмарка.Эталон.Статистика); Возврат Статистика.Среднее; 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\234\320\260\320\272\321\201.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\234\320\260\320\272\321\201.os" index 8ae23b5..4f31cf7 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\234\320\260\320\272\321\201.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\234\320\260\320\272\321\201.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Макс; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Макс; КонецФункции \ 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\234\320\265\320\264\320\270\320\260\320\275\320\260.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\234\320\265\320\264\320\270\320\260\320\275\320\260.os" index 8d47e23..893149c 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\234\320\265\320\264\320\270\320\260\320\275\320\260.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\234\320\265\320\264\320\270\320\260\320\275\320\260.os" @@ -22,13 +22,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Медиана; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Медиана; КонецФункции \ 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\234\320\265\321\202\320\276\320\264.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\234\320\265\321\202\320\276\320\264.os" index 4715fac..c64006a 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\234\320\265\321\202\320\276\320\264.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\234\320\265\321\202\320\276\320\264.os" @@ -17,13 +17,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ДескрипторБенчмарка.Метод(); + Возврат РезультатЗапускаБенчмарка.ДескрипторБенчмарка.Метод(); КонецФункции \ 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\234\320\270\320\275.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\234\320\270\320\275.os" index f2985fe..47f0875 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\234\320\270\320\275.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\234\320\270\320\275.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Мин; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Мин; КонецФункции \ 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\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.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\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index f56dee8..9334799 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\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.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\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().НижнийКвартиль; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().НижнийКвартиль; КонецФункции \ 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\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.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\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" index 02aa94b..4150d5f 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\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.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\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().ОперацийВСекунду; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().ОперацийВСекунду; КонецФункции \ 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 221833d..68bba33 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" @@ -21,16 +21,16 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт ИмяПараметра = ИмяПараметра(Колонка); - Для Каждого Параметр Из СтрокаРезультата.Параметры Цикл + Для Каждого Параметр Из РезультатЗапускаБенчмарка.Параметры Цикл Если Параметр.Имя = ИмяПараметра Тогда Возврат Параметр.Значение; КонецЕсли; 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\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.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\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" index f835c83..df86a81 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\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.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\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" @@ -24,16 +24,16 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Число -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off Процентиль = ПроцентильПоКолонке(Колонка.Имя); - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Квантиль(Процентиль / 100); + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Квантиль(Процентиль / 100); КонецФункции 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\241\321\200\320\265\320\264\320\275\320\265\320\265.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\241\321\200\320\265\320\264\320\275\320\265\320\265.os" index 9c0d647..77a503a 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\241\321\200\320\265\320\264\320\275\320\265\320\265.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\241\321\200\320\265\320\264\320\275\320\265\320\265.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Среднее; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Среднее; КонецФункции \ 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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" index 0d24a5a..e38ace5 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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().СтандартнаяОшибкаСреднего; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().СтандартнаяОшибкаСреднего; КонецФункции \ 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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" index a0be12e..9ad6672 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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.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\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().СтандартноеОтклонение; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().СтандартноеОтклонение; КонецФункции \ 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\255\321\202\320\260\320\273\320\276\320\275.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\255\321\202\320\260\320\273\320\276\320\275.os" index a24378e..d2d966a 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\255\321\202\320\260\320\273\320\276\320\275.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\255\321\202\320\260\320\273\320\276\320\275.os" @@ -18,13 +18,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ЭтоЭталон; + Возврат РезультатЗапускаБенчмарка.ЭтоЭталон; КонецФункции \ 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\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 1471f87..99a44a8 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" @@ -13,7 +13,7 @@ &Заполнено Перем _Метод; // Строка - Метод бенчмарка -&Сериализуемое("IsBaseline") +&Сериализуемое("Baseline") &Тип("Булево") Перем _ЭтоЭталон; // Булево @@ -267,8 +267,13 @@ Возврат Делегаты.Создать(Объект, _Метод, Параметры); КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + #Область Сериализация +&ПослеДесериализации Процедура ПослеДесериализации() Экспорт Валидировать(); @@ -276,11 +281,18 @@ КонецПроцедуры -#КонецОбласти +Процедура Валидировать() + + Валидатор = Новый Валидатор; -#КонецОбласти + Результат = Валидатор.Валидировать(ЭтотОбъект); + Если Результат.Количество() > 0 Тогда + ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); + КонецЕсли; -#Область СлужебныеПроцедурыИФункции +КонецПроцедуры + +#КонецОбласти Процедура ИзвлечьИменаПараметров(Объект) @@ -293,15 +305,4 @@ КонецПроцедуры -Процедура Валидировать() - - Валидатор = Новый Валидатор; - - Результат = Валидатор.Валидировать(ЭтотОбъект); - Если Результат.Количество() > 0 Тогда - ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти \ 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\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" index 6d580c1..41b6336 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" @@ -10,7 +10,7 @@ Обозначение = пОбозначение; Наименование = пНаименование; - Базовая = ?(пБазовая = Неопределено, ЭтотОбъект, пБазовая); + Базовая = пБазовая; ОтношениеКБазовой = пОтношениеКБазовой; ВыводитьВЛегенде = пВыводитьВЛегенде; 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 2cab647..2dc99c1 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" @@ -48,30 +48,7 @@ // Запускает бенчмарки // // Возвращаемое значение: -// Структура: -// * ИмяКласса - Строка - Имя класса -// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков -// * Конфигурация - КонфигурацияБенчмарков -// * Отчет - ОтчетБенчмарков -// * СредаОкружения - СредаОкруженияБенчмарков -// * Расшифровка - ТаблицаЗначений: -// ** ДескрипторБенчмарка - ДескрипторБенчмарка -// ** Параметры - Массив из ПараметрБенчмарка -// ** Эталон - СтрокаТаблицыЗначений, Неопределено -// ** ЭтоЭталон - Булево -// ** Статистика - СтатистикаБенчмарка -// ** ИсполняющаяСреда - Структура: -// *** Версия - Строка -// *** Алиас - Строка -// *** Наименование - Строка -// ** Замеры - ТаблицаЗначений: -// *** Этап - см. ЭтапыБенчмарка -// *** НомерИтерации - Число -// *** КоличествоОпераций - Число -// *** Наносекунд - Число - Наносекунд за итерацию -// *** НаносекундЗаОперацию - Число - Наносекунд за операцию -// *** ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию -// *** ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию +// РезультатыБенчмарков Функция Запустить() Экспорт ЭтоВоркер = Бенчмаркинг.ЭтоВоркер(); @@ -83,13 +60,16 @@ КонецЕсли; Если ЗапускатьВТекущейСреде Тогда - Результат = ЗапуститьВсеБенчмарки(); + Результат = ЗапуститьБенчмаркиВТекущейСреде(); Иначе - Результат = ЗапуститьБенчмаркиВКаждойВерсии(); + Результат = ЗапуститьБенчмаркиВоВсехСредах(); КонецЕсли; Если Не ЭтоВоркер Тогда ВывестиРезультатыБенчмарков(Результат); + Иначе + Результат.Конфигурация = Новый КонфигурацияБенчмарков(); + Результат.ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); КонецЕсли; ЭкспортироватьРезультаты(Результат); @@ -106,7 +86,7 @@ #Область ЗапускВДругихСредах -Функция ЗапуститьБенчмаркиВКаждойВерсии() +Функция ЗапуститьБенчмаркиВоВсехСредах() ПередаваемаяКонфигурация = _Конфигурация .Скопировать() @@ -114,24 +94,31 @@ .УдалитьЭкспортеры() .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); - МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); - Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов); - Результат.СредаОкружения.ВерсияИсполняющейСреды = ""; + РезультатыБенчмарков = НовыеРезультатыБенчмарков(); + РезультатыБенчмарков.СредаОкружения.ВерсияИсполняющейСреды = ""; Для Каждого ИсполняющаяСреда Из _Конфигурация.ВерсииИсполняющейСреды() Цикл - ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация, Результат.Расшифровка); + + ЗапускиБенчмарков = ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация); + + Для Каждого РезультатЗапускаБенчмарка Из ЗапускиБенчмарков Цикл + РезультатыБенчмарков.Запуски.Добавить(РезультатЗапускаБенчмарка); + КонецЦикла; + КонецЦикла; - МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация); + РезультатыБенчмарков.ОпределитьЭталоны(); - Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка); - Результат.Отчет = Построитель.Сформировать(); + Построитель = Новый ПостроительОтчетаБенчмарков( + _ДескрипторыБенчмарков, _Конфигурация, РезультатыБенчмарков.Запуски); - Возврат Результат; + РезультатыБенчмарков.Отчет = Построитель.Сформировать(); + + Возврат РезультатыБенчмарков; КонецФункции -Процедура ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация, РасшифровкаРезультатов) +Функция ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация) ТаймаутМинут = 10; МиллисекундВМинуте = 60000; @@ -161,11 +148,15 @@ ВызватьИсключение СтрШаблон("Завершение процесса с ошибкой в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); КонецЕсли; - ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, КаталогАртефактов, ИсполняющаяСреда); + ЗапускиБенчмарков = ПрочитатьЗапускиБенчмарковИзJSON(КаталогАртефактов, ИсполняющаяСреда); + + УдалитьФайлы(КаталогАртефактов); _Лог.Отладка("Завершение процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); -КонецПроцедуры + Возврат ЗапускиБенчмарков; + +КонецФункции Функция ПодготовитьПроцесс(Конфигурация, Версия) @@ -174,7 +165,7 @@ ИмяФайлаТочкиВхода = ТочкаВходаКонсольногоПриложения(); ИмяФайлаКонфигурации = ЗаписатьНастройкиВФайл(_ДескрипторыБенчмарков, Конфигурация); ИмяФайлаТипа = Новый РасширениеТипа(Тип).Источник; - КаталогБиблиотек = ИсполняющаяСредаБенчмарков.КаталогБиблиотек(); + КаталогБиблиотек = ИнформацияСредыБенчмарков.КаталогБиблиотек(); ПеременныеСреды = ПеременныеСреды(); ПеременныеСреды.Вставить("OSCRIPT_CONFIG", СтрШаблон("lib.system=%1; systemlanguage=ru", КаталогБиблиотек)); @@ -259,7 +250,7 @@ Возврат Версия; КонецЕсли; - КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки(); + КаталогУстановки = ИнформацияСредыБенчмарков.КаталогУстановки(); Если КаталогУстановки = Неопределено Тогда ВызватьИсключение "Не найден каталог с установленными версиями OneScript. |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; @@ -267,7 +258,7 @@ _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки)); - ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + ИмяФайла = ИнформацияСредыБенчмарков.НайтиИсполняемыйФайл(Версия); Если ИмяФайла = Неопределено Тогда ВызватьИсключение СтрШаблон("Не найден OneScript версии %1 в каталоге OVM (OneScript Version Manager)", Версия); @@ -277,28 +268,38 @@ КонецФункции -Процедура ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, Каталог, ИсполняющаяСреда) +Функция ПрочитатьЗапускиБенчмарковИзJSON(Каталог, ИсполняющаяСреда) + ЗапускиБенчмарков = Новый Массив(); Сериализатор = Новый СериализаторРезультатовБенчмарков(); Файлы = НайтиФайлы(Каталог, "*-report.json"); Для Каждого Файл Из Файлы Цикл - Данные = Сериализатор.ПрочитатьИзJson(Файл.ПолноеИмя, _Конфигурация); - Для Каждого СтрокаРезультата Из Данные.Расшифровка Цикл - НоваяСтрокаТаблицы = РасшифровкаРезультатов.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицы, СтрокаРезультата); - НоваяСтрокаТаблицы.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; // Заменяем current - НоваяСтрокаТаблицы.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; + + Данные = Сериализатор.ПрочитатьИзJson(Файл.ПолноеИмя); + + Для Каждого РезультатЗапускаБенчмарка Из Данные.Запуски Цикл + + НовыйРезультатЗапускаБенчмарка = Новый РезультатЗапускаБенчмаркаДто(); + ЗаполнитьЗначенияСвойств(НовыйРезультатЗапускаБенчмарка, РезультатЗапускаБенчмарка); + НовыйРезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; // Заменяем current + НовыйРезультатЗапускаБенчмарка.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; + + ЗапускиБенчмарков.Добавить(НовыйРезультатЗапускаБенчмарка); + КонецЦикла; + КонецЦикла; -КонецПроцедуры + Возврат ЗапускиБенчмарков; + +КонецФункции #КонецОбласти #Область ЗапускВТекущейСреде -Функция ЗапуститьВсеБенчмарки() +Функция ЗапуститьБенчмаркиВТекущейСреде() ПрогретьИнструментыЗамера(); @@ -308,8 +309,7 @@ КонецЕсли; // Инициализация результатов - МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); - Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов); + РезультатыБенчмарков = НовыеРезультатыБенчмарков(); // Событие ПередВсеми КонтекстСобытия = Новый Структура(); @@ -337,26 +337,36 @@ КонецЕсли; Для Каждого Параметры Из КомбинацииПараметров Цикл - ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов); + РезультатЗапускаБенчмарка = ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры); + РезультатыБенчмарков.Запуски.Добавить(РезультатЗапускаБенчмарка); КонецЦикла; КонецЦикла; // Подготовка результатов - МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация); - МенеджерРасшифровкиРезультатов.ОбновитьСтатистику(); + РезультатыБенчмарков.ОпределитьЭталоны(); + РезультатыБенчмарков.ОбновитьСтатистику(); - Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка); - Результат.Отчет = Построитель.Сформировать(); + Построитель = Новый ПостроительОтчетаБенчмарков( + _ДескрипторыБенчмарков, _Конфигурация, РезультатыБенчмарков.Запуски); + + РезультатыБенчмарков.Отчет = Построитель.Сформировать(); // Событие ПослеВсех - ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, Результат); + КонтекстСобытия = Новый Структура(); + КонтекстСобытия.Вставить("Конфигурация", РезультатыБенчмарков.Конфигурация); + КонтекстСобытия.Вставить("ДескрипторыБенчмарков", РезультатыБенчмарков.ДескрипторыБенчмарков); + КонтекстСобытия.Вставить("Запуски", РезультатыБенчмарков.Запуски); + КонтекстСобытия.Вставить("Отчет", РезультатыБенчмарков.Отчет); + КонтекстСобытия.Вставить("СредаОкружения", РезультатыБенчмарков.СредаОкружения); - Возврат Результат; + ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, КонтекстСобытия); + + Возврат РезультатыБенчмарков; КонецФункции -Процедура ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов) +Функция ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры) ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка); ВывестиПараметры(Параметры); @@ -365,14 +375,14 @@ УстановитьПараметрыОбъекта(Параметры); // Инициализация результата - Результат = МенеджерРасшифровкиРезультатов.Добавить(); - Результат.ДескрипторБенчмарка = ДескрипторБенчмарка; - Результат.Параметры = Параметры; - Результат.Статистика = Новый СтатистикаБенчмарка(); + РезультатЗапускаБенчмарка = Новый РезультатЗапускаБенчмаркаДто(); + РезультатЗапускаБенчмарка.ДескрипторБенчмарка = ДескрипторБенчмарка; + РезультатЗапускаБенчмарка.Параметры = Параметры; + РезультатЗапускаБенчмарка.Статистика = Новый СтатистикаБенчмарка(); Если Бенчмаркинг.ЭтоВоркер() Тогда - Результат.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия; - Результат.ИсполняющаяСреда.Алиас = "current"; + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия; + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас = "current"; КонецЕсли; // Событие ПередКаждым @@ -392,26 +402,28 @@ ЗапуститьЭтапПрогрева(Делегат, КоличествоВызововЗаИтерацию); КонецЕсли; - ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры); + ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, РезультатЗапускаБенчмарка.Замеры); Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда - ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры); + ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, РезультатЗапускаБенчмарка.Замеры); КонецЕсли; // Сбор статистики - Результат.Статистика.Прочитать(Результат.Замеры); - ВывестиСтатистику(Результат.Статистика); + РезультатЗапускаБенчмарка.Статистика.Прочитать(РезультатЗапускаБенчмарка.Замеры); + ВывестиСтатистику(РезультатЗапускаБенчмарка.Статистика); // Событие ПослеКаждого КонтекстСобытия = Новый Структура(); КонтекстСобытия.Вставить("ДескрипторБенчмарка", ДескрипторБенчмарка); КонтекстСобытия.Вставить("Параметры", Параметры); - КонтекстСобытия.Вставить("Замеры", Результат.Замеры); - КонтекстСобытия.Вставить("Статистика", Результат.Статистика); + КонтекстСобытия.Вставить("Замеры", РезультатЗапускаБенчмарка.Замеры); + КонтекстСобытия.Вставить("Статистика", РезультатЗапускаБенчмарка.Статистика); ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, КонтекстСобытия); + + Возврат РезультатЗапускаБенчмарка; -КонецПроцедуры +КонецФункции Функция РассчитатьКоличествоВызововЗаИтерацию(Делегат) @@ -484,7 +496,7 @@ Для НомерИтерации = 1 По _Конфигурация.КоличествоИтераций() Цикл РезультатИтерации = ВыполнитьИтерацию(Делегат, ЭтапыБенчмарка.Измерение, НомерИтерации, КоличествоВызововЗаИтерацию); - ЗаполнитьЗначенияСвойств(Замеры.Добавить(), РезультатИтерации); + Замеры.Добавить(РезультатИтерации); КонецЦикла; @@ -495,7 +507,7 @@ Для НомерИтерации = 1 По _Конфигурация.КоличествоИтераций() Цикл РезультатИтерации = ВыполнитьИтерацию(Делегат, ЭтапыБенчмарка.Память, НомерИтерации, КоличествоВызововЗаИтерацию); - ЗаполнитьЗначенияСвойств(Замеры.Добавить(), РезультатИтерации); + Замеры.Добавить(РезультатИтерации); КонецЦикла; @@ -531,7 +543,7 @@ Наносекунд = ЗамеритьВремя(Делегат, КоличествоВызовов); КонецЕсли; - РезультатИтерации = НовыйРезультатИтерации(); + РезультатИтерации = Новый РезультатИтерацииБенчмаркаДто(); РезультатИтерации.Этап = Этап; РезультатИтерации.НомерИтерации = НомерИтерации; РезультатИтерации.КоличествоОпераций = КоличествоВызовов; @@ -875,7 +887,8 @@ Процедура ЭкспортироватьРезультаты(Результаты) КаталогАртефактов = _Конфигурация.КаталогАртефактов(); - МаскаФайлов = СтрШаблон("%1-*", Результаты.ИмяКласса); + ИмяФайла = СтрШаблон("%1-report", Строка(ТипЗнч(_ОбъектБенчмарков))); + МаскаФайлов = СтрШаблон("%1.*", ИмяФайла); Экспортеры = _Конфигурация.Экспортеры(); Если Не ЗначениеЗаполнено(КаталогАртефактов) Или Экспортеры.Количество() = 0 Тогда @@ -886,10 +899,16 @@ ФС.УдалитьФайлы(КаталогАртефактов, МаскаФайлов); Для Каждого Экспортер Из _Конфигурация.Экспортеры() Цикл - Экспортер.Записать(Результаты); + + ИмяФайлаСРасширением = СтрШаблон("%1.%2", ИмяФайла, Экспортер.Расширение()); + ПолноеИмяФайла = ОбъединитьПути(КаталогАртефактов, ИмяФайлаСРасширением); + + Экспортер.Записать(Результаты, ПолноеИмяФайла); + КонецЦикла; Если Не Бенчмаркинг.ЭтоВоркер() Тогда + Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов); Если Артефакты.Количество() Тогда ВывестиСтроку(" "); @@ -899,6 +918,7 @@ Для Каждого Артефакт Из Артефакты Цикл ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый"); КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -996,36 +1016,17 @@ КонецПроцедуры Функция ОбернутьВКавычки(Строка) - Кавычка = ?(ИсполняющаяСредаБенчмарков.ЭтоWindows(), """", "'"); + Кавычка = ?(ИнформацияСредыБенчмарков.ЭтоWindows(), """", "'"); Возврат СтрШаблон("%2%1%2", Строка, Кавычка); КонецФункции -Функция НовыйРезультатИтерации() - - Результат = Новый Структура(); - Результат.Вставить("Этап", ""); - Результат.Вставить("НомерИтерации", 0); - Результат.Вставить("КоличествоОпераций", 0); - Результат.Вставить("Наносекунд", 0); - Результат.Вставить("НаносекундЗаОперацию",0); - Результат.Вставить("ВыделяемаяПамять", 0); - Результат.Вставить("ВыделяемаяПамятьЗаОперацию", 0); - - Возврат Результат; +Функция НовыеРезультатыБенчмарков() Экспорт -КонецФункции - -Функция НовыйРезультат(МенеджерРасшифровкиРезультатов) Экспорт - - Результат = Новый Структура(); - Результат.Вставить("ИмяКласса", Строка(ТипЗнч(_ОбъектБенчмарков))); - Результат.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков); - Результат.Вставить("Конфигурация", _Конфигурация); - Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу()); - Результат.Вставить("Отчет", Неопределено); - Результат.Вставить("СредаОкружения", Новый СредаОкруженияБенчмарков()); + Результаты = Новый РезультатыБенчмарков(); + Результаты.ДескрипторыБенчмарков = _ДескрипторыБенчмарков; + Результаты.Конфигурация = _Конфигурация; - Возврат Результат; + Возврат Результаты; КонецФункции 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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" index b0780c8..e16024e 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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" @@ -26,7 +26,6 @@ // Возвращаемое значение: // ТаблицаЗначений: // * Результат - см. Бенчмаркинг.Запустить, Неопределено -// * ИмяКласса - Строка - Имя класса // * ИмяФайла - Строка - Имя файла // * ПолноеИмяФайла - Строка - Путь к файлу сценария // * Успешно - Булево - Индикатор корректного выполнения @@ -50,7 +49,6 @@ КонецЕсли; СтрокаРезультата = Результат.Добавить(); - СтрокаРезультата.ИмяКласса = Строка(Тип); СтрокаРезультата.ПолноеИмяФайла = Файл.ПолноеИмя; СтрокаРезультата.ИмяФайла = Файл.ИмяБезРасширения; СтрокаРезультата.Результат = Неопределено; @@ -66,7 +64,7 @@ Исключение СтрокаРезультата.Успешно = Ложь; _Лог.Ошибка("Возникла ошибка при запуске бенчмарков <%1>: %2", - СтрокаРезультата.ИмяКласса, + СтрокаРезультата.ИмяФайла, ОписаниеОшибки()); КонецПопытки; @@ -85,7 +83,6 @@ ТипСтрока = Новый ОписаниеТипов("Строка"); Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("ИмяКласса", ТипСтрока); Таблица.Колонки.Добавить("ПолноеИмяФайла", ТипСтрока); Таблица.Колонки.Добавить("ИмяФайла", ТипСтрока); Таблица.Колонки.Добавить("Результат"); diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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 1d16c71..54308c4 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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" @@ -63,7 +63,7 @@ // Имя - Строка - Имя метода бенчмарка // // Возвращаемое значение: -// ДескрипторБенчмарка +// ДескрипторБенчмарка, Неопределено Функция НайтиПоИмени(Имя) Экспорт Возврат ПроцессорыКоллекций @@ -73,6 +73,25 @@ КонецФункции +// Дескриптор бенчмарка по имени метода +// +// Параметры: +// Тип - Тип - Класс бенчмарков +// Имя - Строка - Имя метода бенчмарка +// +// Возвращаемое значение: +// ДескрипторБенчмарка, Неопределено +Функция НайтиПоТипуИИмени(Тип, Имя) Экспорт + + Контекст = Новый Структура("Тип, Имя", Тип, Имя); + + Возврат ПроцессорыКоллекций + .ИзКоллекции(_ДескрипторыБенчмарков) + .Фильтровать("Элемент -> Элемент.Метод() = Имя И Элемент.ТипОбъекта() = Тип", Контекст) + .ПолучитьПервый(); + +КонецФункции + // Первый в наборе дескриптор бенчмарка // // Возвращаемое значение: @@ -113,15 +132,17 @@ // // Параметры: // ФункцияФильтрации - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент, -// и которая возвращает Булево, Истина если элемент проходит фильтр, Ложь в противном случае +// и которая возвращает Булево, Истина если элемент проходит фильтр, +// Ложь в противном случае +// ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение // // Возвращаемое значение: // ЭтотОбъект -Функция Фильтровать(ФункцияФильтрации) Экспорт +Функция Фильтровать(ФункцияФильтрации, ДополнительныеПараметры = Неопределено) Экспорт _ДескрипторыБенчмарков = ПроцессорыКоллекций .ИзКоллекции(_ДескрипторыБенчмарков) - .Фильтровать(ФункцияФильтрации) + .Фильтровать(ФункцияФильтрации, ДополнительныеПараметры) .ВМассив(); Возврат ЭтотОбъект; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\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.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\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.os" index 0646644..9d8df64 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\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.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\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.os" @@ -38,15 +38,15 @@ // Значение по результатам замеров // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт МассивПараметров = Новый Массив(); - МассивПараметров.Добавить(СтрокаРезультата); + МассивПараметров.Добавить(РезультатЗапускаБенчмарка); МассивПараметров.Добавить(Колонка); Возврат ЗначениеДелегат.Исполнить(МассивПараметров); 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 ad0926e..aee5595 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" @@ -2,6 +2,7 @@ #Использовать delegate #Использовать validate #Использовать reflector +#Использовать fluent &Сериализуемое("Strategy") &Тип("Строка") @@ -62,10 +63,7 @@ &Геттер("ИсточникиПараметров") Перем _ИсточникиПараметров; // ТаблицаЗначений -&Сериализуемое("Handlers") -&СериализуемыйКлюч("Событие", "Event") -&СериализуемыйКлюч("Обработчик", "Handler") -&Тип("ТаблицаЗначений") +&Несериализуемое &Геттер("ОбработчикиСобытий") Перем _Обработчики; // ТаблицаЗначений @@ -78,14 +76,10 @@ &Геттер("Экспортеры") Перем _Экспортеры; // Массив из Произвольный - см. ЭкспортерыРезультатовБенчмарков -&Сериализуемое("Exporters") -&Тип("Массив") -Перем _ЭкспортерыСериализуемое; // Массив из Строка - &Сериализуемое("RuntimeVersions") &СериализуемыйКлюч("Версия", "Version") &СериализуемыйКлюч("Наименование", "Name") -&СериализуемыйКлюч("ЭтоЭталон", "IsBaseline") +&СериализуемыйКлюч("ЭтоЭталон", "Baseline") &Тип("ТаблицаЗначений") &Геттер("ВерсииИсполняющейСреды") Перем _ВерсииИсполняющейСреды; // ТаблицаЗначений @@ -526,10 +520,11 @@ // // Параметры события: // * Контекст - Структура: -// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // ** Конфигурация - КонфигурацияБенчмарков -// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// ** Запуски - Массив из РезультатЗапускаБенчмаркаДто // ** Отчет - ОтчетБенчмарков +// ** СредаОкружения - СредаОкруженияБенчмарков // // ПередКаждым - Вызывается перед каждым запуском бенчмарка. // Позволяет подготовить контекст для отдельного теста - например, сбросить состояние объекта, @@ -548,7 +543,7 @@ // * Контекст - Структура: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// ** Замеры - Массив из РезультатИтерацииБенчмаркаДто // ** Статистика - СтатистикаБенчмарка // // Параметры: @@ -1028,26 +1023,6 @@ #КонецОбласти -#Область Сериализация - -Процедура ПередСериализацией() Экспорт - - ПроверитьОбработчикиСобытийПередСериализацией(); - ПроверитьИсточникиПараметровПередСериализацией(); - ОбработатьЭкспортерыПередСериализацией(); - -КонецПроцедуры - -Процедура ПослеДесериализации() Экспорт - - ОбработатьЭкспортерыПослеДесериализации(); - ОпределитьМодифицированныеПоля(); - Валидировать(); - -КонецПроцедуры - -#КонецОбласти - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1152,17 +1127,51 @@ #Область Сериализация -Процедура ПроверитьОбработчикиСобытийПередСериализацией() Экспорт +&ПередСериализацией +Процедура ПередСериализацией() Экспорт + + ПроверитьИсточникиПараметровПередСериализацией(); + +КонецПроцедуры + +&ПослеДесериализации +Процедура ПослеДесериализации(ПрочитанныеСвойства) Экспорт - Для Каждого Строка Из _Обработчики Цикл - Тип = ТипЗнч(Строка.Обработчик); - Если Тип <> Тип("Строка") Тогда - ВызватьИсключение СтрШаблон("Обработчик события типа <%1> не поддерживает сериализацию.", Тип); - КонецЕсли; - КонецЦикла; + ДессериализоватьОбработчики(ПрочитанныеСвойства); + ДессериализоватьЭкспортеры(ПрочитанныеСвойства); + ОпределитьМодифицированныеПоля(); + Валидировать(); + КонецПроцедуры +&Сериализуемое("Handlers") +Функция СериализацияПолучитьОбработчикиСобытий() Экспорт + + Таблица = ПроцессорыКоллекций.ИзКоллекции(_Обработчики) + .Фильтровать("Элемент -> ТипЗнч(Элемент.Обработчик) = Тип(""Строка"")") + .Получить(Тип("ТаблицаЗначений")); + + Таблица.Колонки.Событие.Имя = "Event"; + Таблица.Колонки.Обработчик.Имя = "Handler"; + + Возврат Таблица; + +КонецФункции + +&Сериализуемое("Exporters") +Функция СериализацияПолучитьИменаЭкспортеров() Экспорт + + Экспортеры = Новый Массив; + + Для Каждого Экспортер Из _Экспортеры Цикл + Экспортеры.Добавить(Строка(ТипЗнч(Экспортер))); + КонецЦикла; + + Возврат Экспортеры; + +КонецФункции + Процедура ПроверитьИсточникиПараметровПередСериализацией() Для Каждого ИсточникПараметров Из _ИсточникиПараметров Цикл @@ -1174,19 +1183,17 @@ КонецПроцедуры -Процедура ОбработатьЭкспортерыПередСериализацией() - - _ЭкспортерыСериализуемое = Новый Массив; - - Для Каждого Экспортер Из _Экспортеры Цикл - _ЭкспортерыСериализуемое.Добавить(Строка(ТипЗнч(Экспортер))); - КонецЦикла; +Процедура ДессериализоватьОбработчики(ПрочитанныеСвойства) + Для Каждого Строка Из ПрочитанныеСвойства["Handlers"] Цикл + ДобавитьОбработчикСобытия(Строка["Event"], Строка["Handler"]); + КонецЦикла; + КонецПроцедуры -Процедура ОбработатьЭкспортерыПослеДесериализации() +Процедура ДессериализоватьЭкспортеры(ПрочитанныеСвойства) - Для Каждого СтрокаТип Из _ЭкспортерыСериализуемое Цикл + Для Каждого СтрокаТип Из ПрочитанныеСвойства["Exporters"] Цикл ДобавитьЭкспортер(Новый(СтрокаТип)); КонецЦикла; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\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" deleted file mode 100644 index 93a889d..0000000 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\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" +++ /dev/null @@ -1,210 +0,0 @@ -Перем _Таблица; // см. НоваяТаблицаРасшифровки - -// Расшифровка результатов бенчмарков. -// -// Параметры: -// РасшифровкаРезультатов - см. НоваяТаблицаРасшифровки -// - Неопределено -Процедура ПриСозданииОбъекта(РасшифровкаРезультатов = Неопределено) - - _Таблица = РасшифровкаРезультатов; - - Если _Таблица = Неопределено Тогда - _Таблица = НоваяТаблицаРасшифровки(); - КонецЕсли; - -КонецПроцедуры - -#Область ПрограммныйИнтерфейс - -// Возвращает таблицу с расшифровкой замеров бенчмарков. -// -// Возвращаемое значение: -// см. НоваяТаблицаРасшифровки -Функция ВТаблицу() Экспорт - Возврат _Таблица; -КонецФункции - -// Создает новую строку в таблице расшифровки. -// -// Возвращаемое значение: -// СтрокаТаблицыЗначения -Функция Добавить() Экспорт - - СтрокаТаблицы = _Таблица.Добавить(); - СтрокаТаблицы.Параметры = Новый Массив(); - СтрокаТаблицы.Замеры = НоваяТаблицаЗамеров(); - СтрокаТаблицы.Статистика = Новый СтатистикаБенчмарка(); - СтрокаТаблицы.ИсполняющаяСреда = НоваяИсполняющаяСреда(); - - Возврат СтрокаТаблицы; - -КонецФункции - -// Связывает каждую строку замеров с эталонной строкой. -// -// Алгоритм поиска эталонов (в порядке приоритета): -// 1. При наличии эталонной версии исполняющей среды: -// - Ищет строку бенчмарка с идентичным именем и набором параметров в соответствующей эталонной среде -// 2. При отсутствии эталонной среды, но при наличии эталонного бенчмарка: -// - Ищет строку бенчмарка в пределах текущей категории бенчмарков, наборов параметров и исполняющей среды -// -// Параметры: -// Конфигурация - КонфигурацияБенчмарков -Процедура ОпределитьЭталоны(Конфигурация) Экспорт - - ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); - - Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл - СтрокаРасшифровкиЗамеров.Эталон = НайтиЭталонДляСтроки(СтрокаРасшифровкиЗамеров, ЭталоннаяВерсия); - - Если Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда - СтрокаРасшифровкиЗамеров.ЭтоЭталон = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ЭтоЭталон(); - Иначе - СтрокаРасшифровкиЗамеров.ЭтоЭталон = - ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия - Или ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Алиас; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Пересчитывает статистические показатели для всех замеров в таблице -Процедура ОбновитьСтатистику() Экспорт - Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл - СтрокаРасшифровкиЗамеров.Статистика.Прочитать(СтрокаРасшифровкиЗамеров.Замеры); - КонецЦикла; -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция НайтиЭталонДляСтроки(ВходнаяСтрока, ЭталоннаяВерсияИсполняющейСреды) - - Для Каждого СтрокаЭталон Из _Таблица Цикл - - ЭтоЭталон = СтрокаЭталон.ДескрипторБенчмарка.ЭтоЭталон(); - ЭтоРазныеСтроки = Не СтрокаЭталон = ВходнаяСтрока; - ИмяМетодаСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Метод() = ВходнаяСтрока.ДескрипторБенчмарка.Метод(); - КатегорияСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Категория() = ВходнаяСтрока.ДескрипторБенчмарка.Категория(); - ПараметрыСовпадают = ПараметрыСовпадают(СтрокаЭталон, ВходнаяСтрока); - ВерсияИсполняющейСредыСовпадает = СтрокаЭталон.ИсполняющаяСреда.Версия = ВходнаяСтрока.ИсполняющаяСреда.Версия; - ЭталоннаяВерсияИсполняющейСредыУказана = ЗначениеЗаполнено(ЭталоннаяВерсияИсполняющейСреды); - ЭталоннаяВерсияИсполняющейСредыСовпадает = ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Версия - Или ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Алиас; - - ПоискПоЭталоннойСреде = ЭталоннаяВерсияИсполняющейСредыУказана - И ЭталоннаяВерсияИсполняющейСредыСовпадает - И ИмяМетодаСовпадает; - - ПоискПоЭталонномуБенчмарку = Не ЭталоннаяВерсияИсполняющейСредыУказана - И ЭтоЭталон - И КатегорияСовпадает - И ВерсияИсполняющейСредыСовпадает; - - НайденЭталон = ЭтоРазныеСтроки - И ПараметрыСовпадают - И (ПоискПоЭталоннойСреде Или ПоискПоЭталонномуБенчмарку); - - Если НайденЭталон Тогда - Возврат СтрокаЭталон; - КонецЕсли; - - КонецЦикла; - -КонецФункции - -Функция ПараметрыСовпадают(СтрокаПервая, СтрокаВторая) - - Если СтрокаПервая.Параметры.Количество() <> СтрокаВторая.Параметры.Количество() Тогда - Возврат Ложь; - КонецЕсли; - - ПараметрыСовпадают = Истина; - Для Каждого ПараметрПервой Из СтрокаПервая.Параметры Цикл - - ПараметрНайден = Ложь; - Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл - Если ПараметрПервой.Имя = ПараметрВторой.Имя - И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда - ПараметрНайден = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если Не ПараметрНайден Тогда - ПараметрыСовпадают = Ложь; - Прервать; - КонецЕсли; - - КонецЦикла; - - Возврат ПараметрыСовпадают; - -КонецФункции - -// Пустая таблица расшифровки -// -// Возвращаемое значение: -// ТаблицаЗначений: -// * ДескрипторБенчмарка - ДескрипторБенчмарка -// * Параметры - Массив из ПараметрБенчмарка -// * Статистика - СтатистикаБенчмарка -// * Эталон - СтрокаТаблицыЗначений, Неопределено -// * ЭтоЭталон - Булево -// * Замеры - см. НоваяТаблицаЗамеров -// * ИсполняющаяСреда - см. НоваяИсполняющаяСреда -Функция НоваяТаблицаРасшифровки() - - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("ДескрипторБенчмарка"); - Таблица.Колонки.Добавить("Параметры"); - Таблица.Колонки.Добавить("Статистика"); - Таблица.Колонки.Добавить("Эталон"); - Таблица.Колонки.Добавить("ЭтоЭталон"); - Таблица.Колонки.Добавить("Замеры"); - Таблица.Колонки.Добавить("ИсполняющаяСреда"); - - Возврат Таблица; - -КонецФункции - -// Пустая таблица замеров -// -// Возвращаемое значение: -// ТаблицаЗначений: -// * Этап - см. ЭтапыБенчмарка -// * НомерИтерации - Число -// * КоличествоОпераций - Число -// * Наносекунд - Число - Наносекунд за итерацию -// * НаносекундЗаОперацию - Число - Наносекунд за операцию -// * ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию -// * ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию -Функция НоваяТаблицаЗамеров() - - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("Этап"); - Таблица.Колонки.Добавить("НомерИтерации"); - Таблица.Колонки.Добавить("КоличествоОпераций"); - Таблица.Колонки.Добавить("Наносекунд"); - Таблица.Колонки.Добавить("НаносекундЗаОперацию"); - Таблица.Колонки.Добавить("ВыделяемаяПамять"); - Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию"); - - Возврат Таблица; - -КонецФункции - -Функция НоваяИсполняющаяСреда() - - ИсполняющаяСреда = Новый Структура(); - ИсполняющаяСреда.Вставить("Версия", ""); - ИсполняющаяСреда.Вставить("Алиас", ""); - ИсполняющаяСреда.Вставить("Наименование", ""); - - Возврат ИсполняющаяСреда; - -КонецФункции - -#КонецОбласти 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 663fdab..166d34d 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" @@ -2,7 +2,7 @@ Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков Перем _Конфигурация; // КонфигурацияБенчмарков -Перем _РасшифровкаРезультатов; // см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +Перем _ЗапускиБенчмарков; // Массив из РезультатЗапускаБенчмаркаДто Перем _Отчет; // ОтчетБенчмарков Перем _КолонкиКонфигурации; // Массив из Строка @@ -11,12 +11,12 @@ // Параметры: // ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // Конфигурация - КонфигурацияБенчмарков -// РасшифровкаРезультатов - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, РасшифровкаРезультатов) +// ЗапускиБенчмарков - Массив из РезультатЗапускаБенчмаркаДто +Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, ЗапускиБенчмарков) _ДескрипторыБенчмарков = ДескрипторыБенчмарков; _Конфигурация = Конфигурация; - _РасшифровкаРезультатов = РасшифровкаРезультатов; + _ЗапускиБенчмарков = ЗапускиБенчмарков; _КолонкиКонфигурации = _Конфигурация.Колонки(); КонецПроцедуры @@ -51,7 +51,7 @@ Процедура ДобавитьКолонки() ДобавитьКолонкуПорядкаПоУмолчанию(); - ДобавитьКолонкуРасшифровкаРезультатов(); + ДобавитьКолонкуРезультатаЗапускаБенчмарка(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьМетод()); ДобавитьКолонкуКатегория(); ДобавитьКолонкиПараметров(); @@ -77,16 +77,16 @@ _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); КонецПроцедуры -Процедура ДобавитьКолонкуРасшифровкаРезультатов() - _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРасшифровкаРезультатов()); +Процедура ДобавитьКолонкуРезультатаЗапускаБенчмарка() + _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРезультатаЗапускаБенчмарка()); КонецПроцедуры Процедура ДобавитьКолонкиПараметров() ДобавленныеИмена = Новый Соответствие(); - Для Каждого Расшифровка Из _РасшифровкаРезультатов Цикл - Для Каждого Параметр Из Расшифровка.Параметры Цикл + Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл + Для Каждого Параметр Из РезультатЗапускаБенчмарка.Параметры Цикл Если ДобавленныеИмена[Параметр.Имя] = Неопределено Тогда ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя)); ДобавленныеИмена.Вставить(Параметр.Имя, Истина); @@ -108,8 +108,8 @@ ЕстьВерсия = Ложь; - Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл - Если ЗначениеЗаполнено(СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия) Тогда + Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл + Если ЗначениеЗаполнено(РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия) Тогда ЕстьВерсия = Истина; Прервать; КонецЕсли; @@ -209,7 +209,7 @@ СкрываемыеКолонки = Новый Массив(); СкрываемыеКолонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); - СкрываемыеКолонки.Добавить(ИмяКолонкиРасшифровкаРезультатов()); + СкрываемыеКолонки.Добавить(ИмяКолонкиРезультатаЗапускаБенчмарка()); Для Каждого Колонка Из _Отчет.Колонки Цикл Если СкрыватьКолонку(Колонка) Тогда @@ -245,7 +245,7 @@ Контекст = Новый Структура(); Контекст.Вставить("Значение", СтрокаОтчета[Колонка.Имя]); - Контекст.Вставить("Статистика", СтрокаОтчета.РасшифровкаРезультатов.Статистика); + Контекст.Вставить("Статистика", СтрокаОтчета[ИмяКолонкиРезультатаЗапускаБенчмарка()].Статистика); Попытка Скрывать = Действие.Выполнить(Контекст) = Истина; @@ -270,9 +270,9 @@ НомерБенчмарка = 0; ПредыдущийБенчмарк = ""; - Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл + Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл - ИмяБенчмарка = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Метод(); + ИмяБенчмарка = РезультатЗапускаБенчмарка.ДескрипторБенчмарка.Метод(); Если Не ПредыдущийБенчмарк = ИмяБенчмарка Тогда НомерБенчмарка = НомерБенчмарка + 1; ПредыдущийБенчмарк = ИмяБенчмарка; @@ -280,10 +280,10 @@ СтрокаОтчета = _Отчет.Таблица.Добавить(); СтрокаОтчета[ИмяКолонкиПорядокПоУмолчанию()] = НомерБенчмарка; - СтрокаОтчета[ИмяКолонкиРасшифровкаРезультатов()] = СтрокаРасшифровкиЗамеров; + СтрокаОтчета[ИмяКолонкиРезультатаЗапускаБенчмарка()] = РезультатЗапускаБенчмарка; Для Каждого Колонка Из _Отчет.Колонки Цикл - СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРасшифровкиЗамеров, Колонка); + СтрокаОтчета[Колонка.Имя] = Колонка.Значение(РезультатЗапускаБенчмарка, Колонка); КонецЦикла; КонецЦИкла; @@ -468,8 +468,8 @@ Возврат "ПорядокПоУмолчанию"; КонецФункции -Функция ИмяКолонкиРасшифровкаРезультатов() - Возврат "РасшифровкаРезультатов"; +Функция ИмяКолонкиРезультатаЗапускаБенчмарка() + Возврат "РезультатЗапускаБенчмарка"; КонецФункции #КонецОбласти \ 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\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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" new file mode 100644 index 0000000..10ccf67 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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" @@ -0,0 +1,163 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("HostEnvironmentInfo") +&Тип("СредаОкруженияБенчмарков") +Перем СредаОкружения Экспорт; // СредаОкруженияБенчмарков + +&Сериализуемое("Configuration") +&Тип("КонфигурацияБенчмарков") +Перем Конфигурация Экспорт; // КонфигурацияБенчмарков + +&Сериализуемое("BenchmarkDescriptors") +&Тип("КоллекцияДескрипторовБенчмарков") +Перем ДескрипторыБенчмарков Экспорт; // КоллекцияДескрипторовБенчмарков + +&Сериализуемое("Runs") +&Тип("Массив") +&ДляКаждого +&Тип("РезультатЗапускаБенчмаркаДто") +Перем Запуски Экспорт; // Массив из РезультатЗапускаБенчмаркаДто + +&Несериализуемое +Перем Отчет Экспорт; // ОтчетБенчмарков + +Процедура ПриСозданииОбъекта() + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); + Конфигурация = Новый КонфигурацияБенчмарков(); + Отчет = Новый ОтчетБенчмарков(); + СредаОкружения = Новый СредаОкруженияБенчмарков(); + Запуски = Новый Массив(); + +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Связывает каждую строку замеров с эталонной строкой. +// +// Алгоритм поиска эталонов (в порядке приоритета): +// 1. При наличии эталонной версии исполняющей среды: +// - Ищет строку бенчмарка с идентичным именем и набором параметров в соответствующей эталонной среде +// 2. При отсутствии эталонной среды, но при наличии эталонного бенчмарка: +// - Ищет строку бенчмарка в пределах текущей категории бенчмарков, наборов параметров и исполняющей среды +Процедура ОпределитьЭталоны() Экспорт + + ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); + + Для Каждого РезультатЗапускаБенчмарка Из Запуски Цикл + + РезультатЗапускаБенчмарка.Эталон = НайтиЭталонДляСтроки(РезультатЗапускаБенчмарка, ЭталоннаяВерсия); + + Если Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда + РезультатЗапускаБенчмарка.ЭтоЭталон = РезультатЗапускаБенчмарка.ДескрипторБенчмарка.ЭтоЭталон(); + Иначе + РезультатЗапускаБенчмарка.ЭтоЭталон = + ЭталоннаяВерсия = РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия + Или ЭталоннаяВерсия = РезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Пересчитывает статистические показатели для всех замеров в таблице +Процедура ОбновитьСтатистику() Экспорт + Для Каждого РезультатЗапускаБенчмарка Из Запуски Цикл + РезультатЗапускаБенчмарка.Статистика.Прочитать(РезультатЗапускаБенчмарка.Замеры); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НайтиЭталонДляСтроки(ВходнаяСтрока, ЭталоннаяВерсияИсполняющейСреды) + + Для Каждого РезультатЗапуска Из Запуски Цикл + + ЭтоЭталон = РезультатЗапуска.ДескрипторБенчмарка.ЭтоЭталон(); + ЭтоРазныеСтроки = Не РезультатЗапуска = ВходнаяСтрока; + ИмяМетодаСовпадает = РезультатЗапуска.ДескрипторБенчмарка.Метод() = ВходнаяСтрока.ДескрипторБенчмарка.Метод(); + КатегорияСовпадает = РезультатЗапуска.ДескрипторБенчмарка.Категория() = ВходнаяСтрока.ДескрипторБенчмарка.Категория(); + ПараметрыСовпадают = ПараметрыСовпадают(РезультатЗапуска, ВходнаяСтрока); + ВерсияИсполняющейСредыСовпадает = РезультатЗапуска.ИсполняющаяСреда.Версия = ВходнаяСтрока.ИсполняющаяСреда.Версия; + ЭталоннаяВерсияИсполняющейСредыУказана = ЗначениеЗаполнено(ЭталоннаяВерсияИсполняющейСреды); + ЭталоннаяВерсияИсполняющейСредыСовпадает = ЭталоннаяВерсияИсполняющейСреды = РезультатЗапуска.ИсполняющаяСреда.Версия + Или ЭталоннаяВерсияИсполняющейСреды = РезультатЗапуска.ИсполняющаяСреда.Алиас; + + ПоискПоЭталоннойСреде = ЭталоннаяВерсияИсполняющейСредыУказана + И ЭталоннаяВерсияИсполняющейСредыСовпадает + И ИмяМетодаСовпадает; + + ПоискПоЭталонномуБенчмарку = Не ЭталоннаяВерсияИсполняющейСредыУказана + И ЭтоЭталон + И КатегорияСовпадает + И ВерсияИсполняющейСредыСовпадает; + + НайденЭталон = ЭтоРазныеСтроки + И ПараметрыСовпадают + И (ПоискПоЭталоннойСреде Или ПоискПоЭталонномуБенчмарку); + + Если НайденЭталон Тогда + Возврат РезультатЗапуска; + КонецЕсли; + + КонецЦикла; + +КонецФункции + +Функция ПараметрыСовпадают(СтрокаПервая, СтрокаВторая) + + Если СтрокаПервая.Параметры.Количество() <> СтрокаВторая.Параметры.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыСовпадают = Истина; + Для Каждого ПараметрПервой Из СтрокаПервая.Параметры Цикл + + ПараметрНайден = Ложь; + Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл + Если ПараметрПервой.Имя = ПараметрВторой.Имя + И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда + ПараметрНайден = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрНайден Тогда + ПараметрыСовпадают = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат ПараметрыСовпадают; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&ПослеДесериализации +Процедура ПослеДесериализации() Экспорт + + ПереопределитьДескрпиторыВЗапусках(); + ОпределитьЭталоны(); + ОбновитьСтатистику(); + +КонецПроцедуры + +Процедура ПереопределитьДескрпиторыВЗапусках() + + Для Каждого Запуск Из Запуски Цикл + Дескриптор = Запуск.ДескрипторБенчмарка; + НайденныйДескриптор = ДескрипторыБенчмарков.НайтиПоТипуИИмени(Дескриптор.ТипОбъекта(), Дескриптор.Метод()); + Если Не НайденныйДескриптор = Неопределено Тогда + Запуск.ДескрипторБенчмарка = НайденныйДескриптор; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти \ 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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 5fb9a56..73e89b2 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,6 +1,6 @@ #Использовать logos #Использовать "../../dto" -#Использовать "../../jason" +#Использовать "../../custom-jason" Перем _Лог; // Лог 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\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/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\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 d1ce474..b33abbd 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\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/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\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" @@ -1,5 +1,5 @@ #Использовать logos -#Использовать xml-parser +#Использовать "../../custom-jason" Перем _Лог; // Лог @@ -17,22 +17,18 @@ // Сериализует результаты бенчмарков в JSON-файл // // Параметры: -// РезультатыБенчмарков - Структура - Данные результатов бенчмарков: -// * Расшифровка - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -// * СредаОкружения - СредаОкруженияБенчмарков - Информация о среде выполнения бенчмарков +// РезультатыБенчмарков - РезультатыБенчмарков // ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результаты бенчмарков Процедура ЗаписатьВJson(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало сериализации результатов в JSON-файл: %1", ПолноеИмяФайла); - - Данные = ПодготовитьРезультатыБенчмарковДляСериализации(РезультатыБенчмарков); - - ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.ОткрытьФайл(ПолноеИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписатьJSON(ЗаписьJSON, Данные); - ЗаписьJSON.Закрыть(); + Сериализатор = Новый СериализаторJsonBench(); + Json = Сериализатор.Сериализовать(РезультатыБенчмарков); + + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, "UTF-8"); + ЗаписьТекста.Записать(Json); + ЗаписьТекста.Закрыть(); _Лог.Отладка("Сериализация в JSON-файл завершена: %1", ПолноеИмяФайла); @@ -42,393 +38,24 @@ // // Параметры: // ПолноеИмяФайла - Строка - Полный путь к JSON-файлу с результатами бенчмарков -// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков // // Возвращаемое значение: -// Структура: -// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -// * СредаОкружения - СредаОкруженияБенчмарков -Функция ПрочитатьИзJson(ПолноеИмяФайла, Конфигурация) Экспорт +// РезультатыБенчмарков +Функция ПрочитатьИзJson(ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало десериализации из JSON-файла: %1", ПолноеИмяФайла); - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.ОткрытьФайл(ПолноеИмяФайла, "UTF-8"); - Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); - ЧтениеJSON.Закрыть(); - - _Лог.Отладка("Десериализация из JSON-файла завершена: %1", ПолноеИмяФайла); - - Возврат СобратьРезультатыБенчмарков(Данные, Конфигурация); - -КонецФункции - -// Сериализует результаты бенчмарков в XML-файл -// -// Параметры: -// РезультатыБенчмарков - Структура - Данные результатов бенчмарков: -// * Расшифровка - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -// * СредаОкружения - СредаОкруженияБенчмарков - Информация о среде выполнения бенчмарков -// ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результаты бенчмарков -Процедура СериализоватьВXML(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт - - _Лог.Отладка("Начало сериализации результатов в XML-файл: %1", ПолноеИмяФайла); - - Данные = ПодготовитьРезультатыБенчмарковДляСериализации(РезультатыБенчмарков); - - // Преобразование данных для корректной записи в XML - ПодготовитьЗначенияДляЗаписиВXML(Данные); - ПодготовитьМассивыДляЗаписиВXML(Данные); - - Данные = Новый Структура("Отчет", Данные); - - // Запись данных в XML-файл - ПроцессорXML = Новый СериализацияДанныхXML(Ложь); - ПроцессорXML.ЗаписатьВФайл(Данные, ПолноеИмяФайла, Истина); - - _Лог.Отладка("Сериализация в XML-файл завершена: %1", ПолноеИмяФайла); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -#Область Сериализация - -Функция ПодготовитьРезультатыБенчмарковДляСериализации(РезультатыБенчмарков) - - Данные = Новый Структура(); - Данные.Вставить("СредаОкружения", ПодготовитьСредуОкруженияДляСериализации(РезультатыБенчмарков.СредаОкружения)); - Данные.Вставить("Бенчмарки", ПодготовитьРасшифровкуЗамеровДляСериализации(РезультатыБенчмарков.Расшифровка)); - - Возврат Данные; - -КонецФункции - -Функция ПодготовитьСредуОкруженияДляСериализации(СредаОкружения) - - ИнформацияОПроцессоре = СредаОкружения.ИнформацияОПроцессоре; - - ДанныеОкружения = Новый Структура(); - ДанныеОкружения.Вставить("ВерсияBenchmarkOneScript", СредаОкружения.ВерсияБиблиотеки); - ДанныеОкружения.Вставить("ВерсияОС", СредаОкружения.ВерсияОС); - ДанныеОкружения.Вставить("ВерсияИсполняющейСреды", СредаОкружения.ВерсияИсполняющейСреды); - ДанныеОкружения.Вставить("ИмяПроцессора", ИнформацияОПроцессоре.ИмяПроцессора); - ДанныеОкружения.Вставить("КоличествоПроцессоров", ИнформацияОПроцессоре.КоличествоПроцессоров); - ДанныеОкружения.Вставить("КоличествоЯдер", ИнформацияОПроцессоре.КоличествоЯдер); - ДанныеОкружения.Вставить("КоличествоЛогическихПроцессоров", ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров); - - Возврат ДанныеОкружения; - -КонецФункции - -Функция ПодготовитьРасшифровкуЗамеровДляСериализации(Расшифровка) - - ДанныеБенчмарки = Новый Массив(); - Для Каждого СтрокаРасшифровкиЗамеров Из Расшифровка Цикл - ДанныеБенчмарки.Добавить(ПодготовитьСтрокуРасшифровкиЗамеровДляСериализации(СтрокаРасшифровкиЗамеров)); - КонецЦикла; - - Возврат ДанныеБенчмарки; - -КонецФункции - -Функция ПодготовитьСтрокуРасшифровкиЗамеровДляСериализации(Строка) - - ДанныеИсполняющаяСреда = Новый Структура(); - ДанныеИсполняющаяСреда.Вставить("Версия", Строка.ИсполняющаяСреда.Версия); - ДанныеИсполняющаяСреда.Вставить("Алиас", Строка.ИсполняющаяСреда.Алиас); - ДанныеИсполняющаяСреда.Вставить("Наименование", Строка.ИсполняющаяСреда.Наименование); - - ДанныеБенчмарк = Новый Структура(); - ДанныеБенчмарк.Вставить("Тип", Строка(Строка.ДескрипторБенчмарка.ТипОбъекта())); - ДанныеБенчмарк.Вставить("Метод", Строка.ДескрипторБенчмарка.Метод()); - ДанныеБенчмарк.Вставить("Категория", Строка.ДескрипторБенчмарка.Категория()); - ДанныеБенчмарк.Вставить("ЭтоЭталон", Строка.ДескрипторБенчмарка.ЭтоЭталон()); - ДанныеБенчмарк.Вставить("ИсполняющаяСреда", ДанныеИсполняющаяСреда); - ДанныеБенчмарк.Вставить("Параметры", ПодготовитьПараметрыДляСериализации(Строка.Параметры)); - ДанныеБенчмарк.Вставить("Статистика", ПодготовитьСтатистикуДляСериализации(Строка.Статистика, Строка.Замеры)); - ДанныеБенчмарк.Вставить("Замеры", ПодготовитьЗамерыДляСериализации(Строка.Замеры)); - - Для Каждого Параметр Из Строка.Параметры Цикл - Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); - ДанныеБенчмарк.Параметры.Вставить(Параметр.Имя, Значение); - КонецЦикла; - - Возврат ДанныеБенчмарк; - -КонецФункции - -Функция ПодготовитьПараметрыДляСериализации(Параметры) - - ДанныеПараметры = Новый Структура(); - - Для Каждого Параметр Из Параметры Цикл - Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); - ДанныеПараметры.Вставить(Параметр.Имя, Значение); - КонецЦикла; - - Возврат ДанныеПараметры; - -КонецФункции - -Функция ПодготовитьСтатистикуДляСериализации(Статистика, Замеры) - - ДанныеСтатистика = Новый Структура(); - ДанныеСтатистика.Вставить("Значения", Новый Массив()); - ДанныеСтатистика.Вставить("Количество", 0); - ДанныеСтатистика.Вставить("Мин", Статистика.Мин); - ДанныеСтатистика.Вставить("Q1", Статистика.НижнийКвартиль); - ДанныеСтатистика.Вставить("Медиана", Статистика.Медиана); - ДанныеСтатистика.Вставить("Среднее", Статистика.Среднее); - ДанныеСтатистика.Вставить("Q3", Статистика.ВерхнийКвартиль); - ДанныеСтатистика.Вставить("Макс", Статистика.Макс); - ДанныеСтатистика.Вставить("СтандартноеОтклонение", Статистика.СтандартноеОтклонение); - ДанныеСтатистика.Вставить("СтандартнаяОшибкаСреднего", Статистика.СтандартнаяОшибкаСреднего); - ДанныеСтатистика.Вставить("ОперацийВСекунду", Статистика.ОперацийВСекунду); - ДанныеСтатистика.Вставить("Процентили", Новый Структура()); - - // BSLLS:MagicNumber-off - ДанныеСтатистика.Процентили.Вставить("P0", Статистика.Квантиль(0)); - ДанныеСтатистика.Процентили.Вставить("P25", Статистика.Квантиль(0.25)); - ДанныеСтатистика.Процентили.Вставить("P50", Статистика.Квантиль(0.5)); - ДанныеСтатистика.Процентили.Вставить("P67", Статистика.Квантиль(0.67)); - ДанныеСтатистика.Процентили.Вставить("P80", Статистика.Квантиль(0.8)); - ДанныеСтатистика.Процентили.Вставить("P85", Статистика.Квантиль(0.85)); - ДанныеСтатистика.Процентили.Вставить("P90", Статистика.Квантиль(0.90)); - ДанныеСтатистика.Процентили.Вставить("P95", Статистика.Квантиль(0.95)); - ДанныеСтатистика.Процентили.Вставить("P100", Статистика.Квантиль(1)); - // BSLLS:MagicNumber-on - - ДанныеСтатистика.Вставить("Память", Новый Структура()); - ДанныеСтатистика.Память.Вставить("ВыделяемаяЗаОперацию", Статистика.ВыделяемаяПамять); - - Для Каждого Замер Из Замеры Цикл - Если Замер.Этап = ЭтапыБенчмарка.Измерение Тогда - ДанныеСтатистика.Значения.Добавить(Замер.НаносекундЗаОперацию); - КонецЕсли; - КонецЦикла; - - ДанныеСтатистика.Количество = ДанныеСтатистика.Значения.Количество(); - - Возврат ДанныеСтатистика; - -КонецФункции - -Функция ПодготовитьЗамерыДляСериализации(Замеры) - - ДанныеЗамеры = Новый Массив(); - - Для Каждого Замер Из Замеры Цикл - - ДанныеЗамер = Новый Структура(); - ДанныеЗамер.Вставить("Этап", Замер.Этап); - ДанныеЗамер.Вставить("НомерИтерации", Замер.НомерИтерации); - ДанныеЗамер.Вставить("КоличествоОпераций", Замер.КоличествоОпераций); - ДанныеЗамер.Вставить("Наносекунд", Замер.Наносекунд); - ДанныеЗамер.Вставить("НаносекундЗаОперацию", Замер.НаносекундЗаОперацию); - ДанныеЗамер.Вставить("ВыделяемаяПамять", Замер.ВыделяемаяПамять); - ДанныеЗамер.Вставить("ВыделяемаяПамятьЗаОперацию", Замер.ВыделяемаяПамятьЗаОперацию); - - ДанныеЗамеры.Добавить(ДанныеЗамер); - - КонецЦикла; + ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла, "UTF-8"); + Json = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); - Возврат ДанныеЗамеры; + Десериализатор = Новый ДесериализаторJsonBench(); + РезультатыБенчмарков = Десериализатор.Десериализовать(Json, Тип("РезультатыБенчмарков")); -КонецФункции - -Процедура ПодготовитьМассивыДляЗаписиВXML(Данные) - - Для Каждого Строка Из Данные.Бенчмарки Цикл - ПодготовитьМассивДляЗаписиВXML(Строка.Статистика.Значения, "Значение"); - ПодготовитьМассивДляЗаписиВXML(Строка.Замеры, "Замер"); - КонецЦикла; - - ПодготовитьМассивДляЗаписиВXML(Данные.Бенчмарки, "Бенчмарк"); - -КонецПроцедуры - -Процедура ПодготовитьЗначенияДляЗаписиВXML(Данные) - - // В xml-parser не все простые типы корректно сериализуются - Для Каждого Строка Из Данные.Бенчмарки Цикл - Для Каждого Параметр Из Строка.Параметры Цикл - Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда - Строка.Параметры[Параметр.Ключ] = XMLСтрока(Параметр.Значение); - КонецЕсли; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -Процедура ПодготовитьМассивДляЗаписиВXML(Массив, Имя) - - Для Инд = 0 По Массив.ВГраница() Цикл - Значение = Массив[Инд]; - Массив[Инд] = Новый Структура(Имя, Значение); - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - -#Область Десериализация - -Функция СобратьРезультатыБенчмарков(Данные, Конфигурация) - - // Расшифровка замеров - МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); - - ДескрипторыБенчмарков = Новый Соответствие(); - - Для Каждого ДанныеБенчмарк Из Данные.Бенчмарки Цикл - - ДескрипторБенчмарка = СобратьДескрипторБенчмарка(ДанныеБенчмарк, ДескрипторыБенчмарков, Конфигурация); - - СтрокаТаблицы = МенеджерРасшифровкиРезультатов.Добавить(); - СтрокаТаблицы.ДескрипторБенчмарка = ДескрипторБенчмарка; - СтрокаТаблицы.ИсполняющаяСреда.Версия = ДанныеБенчмарк.ИсполняющаяСреда.Версия; - СтрокаТаблицы.ИсполняющаяСреда.Алиас = ДанныеБенчмарк.ИсполняющаяСреда.Алиас; - СтрокаТаблицы.ИсполняющаяСреда.Наименование = ДанныеБенчмарк.ИсполняющаяСреда.Наименование; - - ЗаполнитьПараметрыВСтроке(СтрокаТаблицы, ДанныеБенчмарк); - ЗаполнитьЗамерыВСтроке(СтрокаТаблицы, ДанныеБенчмарк); - - КонецЦикла; - - МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(Конфигурация); - МенеджерРасшифровкиРезультатов.ОбновитьСтатистику(); - - // Среда окружения - ДанныеОкружения = Данные.СредаОкружения; - - ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(Ложь); - ИнформацияОПроцессоре.ИмяПроцессора = ДанныеОкружения.ИмяПроцессора; - ИнформацияОПроцессоре.КоличествоПроцессоров = ДанныеОкружения.КоличествоПроцессоров; - ИнформацияОПроцессоре.КоличествоЯдер = ДанныеОкружения.КоличествоЯдер; - ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = ДанныеОкружения.КоличествоЛогическихПроцессоров; - - СредаОкружения = Новый СредаОкруженияБенчмарков(); - СредаОкружения.ВерсияБиблиотеки = ДанныеОкружения.ВерсияBenchmarkOneScript; - СредаОкружения.ВерсияОС = ДанныеОкружения.ВерсияОС; - СредаОкружения.ВерсияИсполняющейСреды = ДанныеОкружения.ВерсияИсполняющейСреды; - СредаОкружения.ИнформацияОПроцессоре = ИнформацияОПроцессоре; - - // Подготовка результата - Результат = Новый Структура(); - Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу()); - Результат.Вставить("СредаОкружения", СредаОкружения); - - Возврат Результат; - -КонецФункции - -Функция СобратьДескрипторБенчмарка(ДанныеБенчмарк, ДескрипторыБенчмарков, Конфигурация) - - Тип = Тип(ДанныеБенчмарк.Тип); - ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); - - Если ДескрипторыБенчмарков[Тип] = Неопределено Тогда - ДескрипторыБенчмарков[Тип] = Новый Соответствие(); - КонецЕсли; - - ДескрипторБенчмарка = ДескрипторыБенчмарков[Тип][ДанныеБенчмарк.Метод]; - Если Не ДескрипторБенчмарка = Неопределено Тогда - Возврат ДескрипторБенчмарка; - КонецЕсли; - - ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, ДанныеБенчмарк.Метод); - - Если ДанныеБенчмарк.ЭтоЭталон И Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда - ДескрипторБенчмарка.ИспользоватьКакЭталон(ДанныеБенчмарк.ЭтоЭталон); - КонецЕсли; - - Если ЗначениеЗаполнено(ДанныеБенчмарк.Категория) Тогда - ДескрипторБенчмарка.УстановитьКатегорию(ДанныеБенчмарк.Категория); - КонецЕсли; - - ДескрипторыБенчмарков[Тип].Вставить(ДанныеБенчмарк.Метод, ДескрипторБенчмарка); - - Возврат ДескрипторБенчмарка; - -КонецФункции - -Процедура ЗаполнитьПараметрыВСтроке(СтрокаРезультата, ДанныеБенчмарк) - - ИменаПараметровБенчмарка = СтрокаРезультата.ДескрипторБенчмарка.ИменаПараметров(); - КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); - - Если КоличествоПараметров = 0 Тогда - ПараметрыМетода = Новый Массив(); - Иначе - ПараметрыМетода = Новый Массив(КоличествоПараметров); - КонецЕсли; - - Для Каждого ДанныеПараметр Из ДанныеБенчмарк.Параметры Цикл - - Имя = ДанныеПараметр.Ключ; - Значение = ДанныеПараметр.Значение; - - ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); - ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; - - ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); - СтрокаРезультата.Параметры.Добавить(ПараметрБенчмарка); - - Если ЭтоПараметрМетода Тогда - ПараметрыМетода[ИндексПараметра] = Значение; - КонецЕсли; - - КонецЦикла; - - Если ПараметрыМетода.Количество() > 0 - И ОтсутствуетНаборПараметровБенчмарка(СтрокаРезультата.ДескрипторБенчмарка, ПараметрыМетода) Тогда - СтрокаРезультата.ДескрипторБенчмарка.ДобавитьПараметры(ПараметрыМетода); - КонецЕсли; - -КонецПроцедуры - -Функция ОтсутствуетНаборПараметровБенчмарка(ДескрипторБенчмарка, ПараметрыМетода) - - НайденНабор = Ложь; - Для Каждого НаборПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл - НайденНабор = Истина; - МассивПараметров = НаборПараметров.ВМассив(); - Для Инд = 0 По МассивПараметров.ВГраница() Цикл - Если Не МассивПараметров[Инд].Значение = ПараметрыМетода[Инд] Тогда - НайденНабор = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Возврат Не НайденНабор; - -КонецФункции - -Процедура ЗаполнитьЗамерыВСтроке(СтрокаРезультата, ДанныеБенчмарк) - - Для Каждого ДанныеЗамер Из ДанныеБенчмарк.Замеры Цикл - - СтрокаЗамера = СтрокаРезультата.Замеры.Добавить(); - СтрокаЗамера.Этап = ДанныеЗамер.Этап; - СтрокаЗамера.НомерИтерации = ВЧисло(ДанныеЗамер.НомерИтерации); - СтрокаЗамера.КоличествоОпераций = ВЧисло(ДанныеЗамер.КоличествоОпераций); - СтрокаЗамера.Наносекунд = ВЧисло(ДанныеЗамер.Наносекунд); - СтрокаЗамера.НаносекундЗаОперацию = ВЧисло(ДанныеЗамер.НаносекундЗаОперацию); - СтрокаЗамера.ВыделяемаяПамять = ВЧисло(ДанныеЗамер.ВыделяемаяПамять); - СтрокаЗамера.ВыделяемаяПамятьЗаОперацию = ВЧисло(ДанныеЗамер.ВыделяемаяПамятьЗаОперацию); - - КонецЦикла; + _Лог.Отладка("Десериализация из JSON-файла завершена: %1", ПолноеИмяФайла); -КонецПроцедуры + Возврат РезультатыБенчмарков; -Функция ВЧисло(Значение) - Возврат XMLЗначение(Тип("Число"), Значение); КонецФункции -#КонецОбласти - #КонецОбласти \ 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\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\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 7c36a66..153da6e 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\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" @@ -1,13 +1,40 @@ +// BSLLS:UnusedLocalVariable-off // BSLLS:ExportVariables-off #Использовать cpuinfo #Использовать packageinfo +&Сериализуемое("BenchmarkOneScriptVersion") +&Тип("Строка") Перем ВерсияБиблиотеки Экспорт; // Строка + +&Сериализуемое("OsVersion") +&Тип("Строка") Перем ВерсияОС Экспорт; // Строка + +&Сериализуемое("RuntimeVersion") +&Тип("Строка") Перем ВерсияИсполняющейСреды Экспорт; // Строка + +&Несериализуемое Перем ИнформацияОПроцессоре Экспорт; // см. ИнформацияОПроцессоре +&Сериализуемое("ProcessorName") +&Тип("Строка") +Перем ИмяПроцессора; // Строка + +&Сериализуемое("PhysicalProcessorCount") +&Тип("Число") +Перем КоличествоПроцессоров; // Число + +&Сериализуемое("PhysicalCoreCount") +&Тип("Число") +Перем КоличествоЯдер; // Число + +&Сериализуемое("LogicalCoreCount") +&Тип("Число") +Перем КоличествоЛогическихПроцессоров; // Число + Процедура ПриСозданииОбъекта() СистемнаяИнформация = Новый СистемнаяИнформация(); @@ -19,6 +46,8 @@ КонецПроцедуры +#Область ПрограммныйИнтерфейс + Функция ВСтроку() Экспорт Процессор = ИнформацияОПроцессоре.ПолноеОписание(); @@ -35,6 +64,35 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Сериализация + +&ПередСериализацией +Процедура ПередСериализацией() Экспорт + + ИмяПроцессора = ИнформацияОПроцессоре.ИмяПроцессора; + КоличествоПроцессоров = ИнформацияОПроцессоре.КоличествоПроцессоров; + КоличествоЯдер = ИнформацияОПроцессоре.КоличествоЯдер; + КоличествоЛогическихПроцессоров = ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров; + +КонецПроцедуры + +&ПослеДесериализации +Процедура ПослеДесериализации() Экспорт + + ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(Ложь); + ИнформацияОПроцессоре.ИмяПроцессора = ИмяПроцессора; + ИнформацияОПроцессоре.КоличествоПроцессоров = КоличествоПроцессоров; + ИнформацияОПроцессоре.КоличествоЯдер = КоличествоЯдер; + ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = КоличествоЛогическихПроцессоров; + +КонецПроцедуры + +#КонецОбласти + Функция ОпределитьВерсию() ПутьКФайлу = ОбъединитьПути(ТекущийСценарий().Каталог, "../../../../packagedef"); @@ -43,3 +101,5 @@ Возврат ИнформацияОПакете.Версия(); КонецФункции + +#КонецОбласти \ 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\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\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\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index d16f007..2b7be21 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\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\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -4,27 +4,69 @@ #Использовать fluent #Использовать asserts -Перем Среднее Экспорт; // Число -Перем СтандартноеОтклонение Экспорт; // Число -Перем СтандартнаяОшибкаСреднего Экспорт; // Число -Перем Медиана Экспорт; // Число +&Сериализуемое("OriginalValues") +Перем _ЗамерыВремени; // Массив из Число + +&Сериализуемое("N") +&Тип("Число") +Перем КоличествоИтераций Экспорт; // Число + +&Сериализуемое("Min") +&Тип("Число") Перем Мин Экспорт; // Число -Перем Макс Экспорт; // Число + +&Сериализуемое("Q1") +&Тип("Число") Перем НижнийКвартиль Экспорт; // Число + +&Сериализуемое("Median") +&Тип("Число") +Перем Медиана Экспорт; // Число + +&Сериализуемое("Mean") +&Тип("Число") +Перем Среднее Экспорт; // Число + +&Сериализуемое("Q3") +&Тип("Число") Перем ВерхнийКвартиль Экспорт; // Число + +&Сериализуемое("Max") +&Тип("Число") +Перем Макс Экспорт; // Число + +&Сериализуемое("StdDev") +&Тип("Число") +Перем СтандартноеОтклонение Экспорт; // Число + +&Сериализуемое("StdErr") +&Тип("Число") +Перем СтандартнаяОшибкаСреднего Экспорт; // Число + +&Сериализуемое("Ops") +&Тип("Число") Перем ОперацийВСекунду Экспорт; // Число + +&Сериализуемое("BytesAllocatedPerOperation") +&Тип("Число") Перем ВыделяемаяПамять Экспорт; // Число -Перем _ЗамерыВремени; // Массив из Число +&НеСериализуемое Перем _УпорядоченныеЗамерыВремени; // Массив из Число + +&НеСериализуемое Перем _ЗамерыПамяти; // Массив из Число + +&НеСериализуемое Перем _ИсходныеПоказатели; // Структура + +&НеСериализуемое Перем _ТекущаяЕдиницаВремени; // ЕдиницаИзмеренияБенчмарка // Статистика бенчмарка // // Параметры: -// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// Замеры - Массив из РезультатИтерацииБенчмаркаДто // - Структура: // * ЗамерыВремени - Массив из Число // * ЗамерыПамяти - Массив из Число @@ -67,7 +109,7 @@ // Читает замеры и формирует статистику // // Параметры: -// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// Замеры - Массив из РезультатИтерацииБенчмаркаДто // - Структура: // * ЗамерыВремени - Массив из Число // * ЗамерыПамяти - Массив из Число @@ -76,7 +118,7 @@ // ЭтотОбъект Функция Прочитать(Замеры) Экспорт - Если ТипЗнч(Замеры) = Тип("ТаблицаЗначений") Тогда + Если ТипЗнч(Замеры) = Тип("Массив") Тогда _ЗамерыВремени = ВыгрузитьЗамеры(Замеры, "НаносекундЗаОперацию", ЭтапыБенчмарка.Измерение); _ЗамерыПамяти = ВыгрузитьЗамеры(Замеры, "ВыделяемаяПамятьЗаОперацию", ЭтапыБенчмарка.Память); ИначеЕсли ТипЗнч(Замеры) = Тип("Структура") Тогда @@ -251,6 +293,24 @@ #Область СлужебныеПроцедурыИФункции +#Область Сериализация + +&Сериализуемое("Percentiles") +Функция ПолучитьПроцентили() Экспорт + + Процентили = Новый Структура("P0, P25, P50, P67, P80, P85, P90, P95, P100"); + + Для Каждого Строка Из Процентили Цикл + Вероятность = Число(Сред(Строка.Ключ, 2)); + Процентили[Строка.Ключ] = Квантиль(Вероятность); + КонецЦикла; + + Возврат Процентили; + +КонецФункции + +#КонецОбласти + Процедура Рассчитать() КоличествоИтераций = _ЗамерыВремени.Количество(); @@ -314,10 +374,15 @@ Функция ВыгрузитьЗамеры(Замеры, Колонка, Этап) - Возврат ПроцессорыКоллекций.ИзКоллекции(Замеры) - .Фильтровать("Элемент -> Элемент.Этап = Этап", Новый Структура("Этап", Этап)) - .Получить(Тип("ТаблицаЗначений")) - .ВыгрузитьКолонку(Колонка); + Результат = Новый Массив(); + + Для Каждого Замер Из Замеры Цикл + Если Замер.Этап = Этап Тогда + Результат.Добавить(Замер[Колонка]); + КонецЕсли; + КонецЦикла; + + Возврат Результат; КонецФункции diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Html.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Html.os" index f2b74cd..9966cff 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Html.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Html.os" @@ -12,12 +12,10 @@ // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт +// ПолноеИмяФайла - Строка - Полное имя файла +Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - - _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Начало формирования файла: %1", ПолноеИмяФайла); Части = Новый Массив(); Части.Добавить(""); @@ -65,11 +63,11 @@ Части.Добавить(""); Части.Добавить(""); - ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, КодировкаТекста.UTF8); ЗаписьТекста.Записать(СтрСоединить(Части, Символы.ПС)); ЗаписьТекста.Закрыть(); - _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Завершение формирования файла: %1", ПолноеИмяФайла); КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" index bf01eed..f6d5251 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Json.os" @@ -2,13 +2,11 @@ // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт - - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); +// ПолноеИмяФайла - Строка - Полное имя файла +Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.ЗаписатьВJson(РезультатыБенчмарков, ПутьКФайлу); + Сериализатор.ЗаписатьВJson(РезультатыБенчмарков, ПолноеИмяФайла); КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Markdown.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Markdown.os" index 4d53d30..64511fc 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Markdown.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Markdown.os" @@ -12,20 +12,18 @@ // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт +// ПолноеИмяФайла - Строка - Полное имя файла +Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - - _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Начало формирования файла: %1", ПолноеИмяФайла); - ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, КодировкаТекста.UTF8); ЗаписьТекста.ЗаписатьСтроку(РезультатыБенчмарков.СредаОкружения.ВСтроку()); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.ЗаписатьСтроку(РезультатыБенчмарков.Отчет.КакMarkdown()); ЗаписьТекста.Закрыть(); - _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Завершение формирования файла: %1", ПолноеИмяФайла); КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Xml.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Xml.os" deleted file mode 100644 index 9f9d369..0000000 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\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\320\222Xml.os" +++ /dev/null @@ -1,21 +0,0 @@ -// Экспортирует результаты бенчмарков в XML-файл -// -// Параметры: -// РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт - - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - - Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.СериализоватьВXML(РезультатыБенчмарков, ПутьКФайлу); - -КонецПроцедуры - -// Расширение файла -// -// Возвращаемое значение: -// Строка -Функция Расширение() Экспорт - Возврат "xml"; -КонецФункции \ 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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" index 421be29..9d689da 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" @@ -15,23 +15,22 @@ // Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков // // Возвращаемое значение: -// Структура: -// * ИмяКласса - Строка - Имя класса -// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// РезультатыБенчмарков: +// * СредаОкружения - СредаОкруженияБенчмарков // * Конфигурация - КонфигурацияБенчмарков +// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // * Отчет - ОтчетБенчмарков -// * СредаОкружения - СредаОкруженияБенчмарков -// * Расшифровка - ТаблицаЗначений: +// * Запуски - Массив из РезультатЗапускаБенчмаркаДто: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Эталон - СтрокаТаблицыЗначений, Неопределено +// ** Эталон - РезультатЗапускаБенчмаркаДто, Неопределено // ** ЭтоЭталон - Булево // ** Статистика - СтатистикаБенчмарка -// ** ИсполняющаяСреда - Структура: +// ** ИсполняющаяСреда - ИсполняющаяСредаБенчмарковДто: // *** Версия - Строка // *** Алиас - Строка // *** Наименование - Строка -// ** Замеры - ТаблицаЗначений: +// ** Замеры - Массив из РезультатИтерацииБенчмаркаДто: // *** Этап - см. ЭтапыБенчмарка // *** НомерИтерации - Число // *** КоличествоОпераций - Число @@ -58,7 +57,6 @@ // ТаблицаЗначений: // * Результат - см. Бенчмаркинг.Запустить // - Неопределено -// * ИмяКласса - Строка - Имя класса // * ИмяФайла - Строка - Имя файла // * ПолноеИмяФайла - Строка - Путь к файлу сценария // * Успешно - Булево - Индикатор корректного выполнения diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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 cd58a0f..d71b3a1 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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" @@ -42,8 +42,9 @@ Функция Подобрать(Значение, ЕдиницаИзмерения) Экспорт - ЗначениеБазовое = Конвертировать(Значение, ЕдиницаИзмерения, ЕдиницаИзмерения.Базовая); - Единицы = НайтиПоБазовой(ЕдиницаИзмерения.Базовая); + Базовая = ?(ЕдиницаИзмерения.Базовая = Неопределено, ЕдиницаИзмерения, ЕдиницаИзмерения.Базовая); + ЗначениеБазовое = Конвертировать(Значение, ЕдиницаИзмерения, Базовая); + Единицы = НайтиПоБазовой(Базовая); ПодходящаяЕдиница = Неопределено; Для Каждого Единица Из Единицы Цикл @@ -53,7 +54,7 @@ КонецЦикла; Если ПодходящаяЕдиница = Неопределено Тогда - Возврат ЕдиницаИзмерения.Базовая; + Возврат Базовая; Иначе Возврат ПодходящаяЕдиница; КонецЕсли; 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 c60dadb..07aad55 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" @@ -38,7 +38,6 @@ ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, КонфигурацияБенчмарков); - ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, КонфигурацияБенчмарков); КонецЕсли; @@ -282,14 +281,6 @@ КонецПроцедуры -Процедура ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация) - - Если РаботаСАннотациямиБенчмарков.ЕстьАннотация(СвойстваКонструктора, "ЭкспортXml") Тогда - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml); - КонецЕсли; - -КонецПроцедуры - Процедура ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация) Если РаботаСАннотациямиБенчмарков.ЕстьАннотация(СвойстваКонструктора, "ЭкспортHtml") Тогда diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\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\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" similarity index 96% rename from "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" rename to "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 12a5834..c8c7792 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\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\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -3,6 +3,8 @@ Перем _КаталогУстановки; // Строка, Неопределено +#Область ПрограммныйИнтерфейс + // Поиск исполняемого файла OneScript в системе с учетом версии // // Параметры: @@ -101,6 +103,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ОпределитьКаталогУстановкиЧерезWhich() Команда = Новый Команда(); @@ -119,4 +125,6 @@ КаталогУстановки = ФС.НормализоватьПуть(ОбъединитьПути(КаталогФайла, "../..")); Возврат КаталогУстановки; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти \ 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\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\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\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 4615001..69f0eed 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\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\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -51,7 +51,9 @@ Функция ПодобратьРазрядностьДробнойЧасти(Знач Значение, ЕдиницаИзмерения = Неопределено) Экспорт - ЭтоВремя = Не ЕдиницаИзмерения = Неопределено И ЕдиницаИзмерения.Базовая = ЕдиницыИзмеренийБенчмарков.Наносекунда; + ЭтоВремя = Не ЕдиницаИзмерения = Неопределено + И (ЕдиницаИзмерения = ЕдиницыИзмеренийБенчмарков.Наносекунда + Или ЕдиницаИзмерения.Базовая = ЕдиницыИзмеренийБенчмарков.Наносекунда); МинимальнаяРазрядность = ?(ЭтоВремя, 1, 0); МаксимальнаяРазрядность = 4; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" index 0f6d80d..e50423e 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" @@ -56,6 +56,7 @@ _СериализуемыеТипы.Вставить(Тип("Булево"), Истина); _СериализуемыеТипы.Вставить(Тип("Дата"), Истина); _СериализуемыеТипы.Вставить(Тип("Неопределено"), Истина); + _СериализуемыеТипы.Вставить(Тип("Null"), Истина); Возврат _СериализуемыеТипы; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\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 40a4003..8808e67 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\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" @@ -3,10 +3,8 @@ Перем Markdown Экспорт; Перем Json Экспорт; -Перем Xml Экспорт; Перем Html Экспорт; Markdown = Новый ЭкспортерРезультатовБенчмарковВMarkdown(); Json = Новый ЭкспортерРезультатовБенчмарковВJson(); -Xml = Новый ЭкспортерРезультатовБенчмарковВXml(); Html = Новый ЭкспортерРезультатовБенчмарковВHtml(); \ No newline at end of file diff --git "a/src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" "b/src/BenchmarkOneScript/custom-jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" similarity index 100% rename from "src/BenchmarkOneScript/jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" rename to "src/BenchmarkOneScript/custom-jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" diff --git "a/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" "b/src/BenchmarkOneScript/custom-jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" similarity index 100% rename from "src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" rename to "src/BenchmarkOneScript/custom-jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" diff --git "a/src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" "b/src/BenchmarkOneScript/custom-jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" similarity index 100% rename from "src/BenchmarkOneScript/jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" rename to "src/BenchmarkOneScript/custom-jason/\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\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" diff --git "a/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" similarity index 85% rename from "src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" rename to "src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" index 97021d7..8614f89 100644 --- "a/src/BenchmarkOneScript/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -22,6 +22,41 @@ // Перем ПримитивныеТипы; +// Соответствие - Прользовательские конвертеры для типа +// +Перем Конвертеры; + +#КонецОбласти + +#Область Конструктор + +Процедура ПриСозданииОбъекта(пКонвертеры = Неопределено) + + Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ДесериализаторJson"); + Рефлектор = Новый Рефлектор(); + + КэшИзвестныхТипов = Новый МножествоСоответствие; + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); + Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл + КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); + КонецЦикла; + + ПримитивныеТипы = Новый МножествоСоответствие; + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Null")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + + Если пКонвертеры = Неопределено Тогда + Конвертеры = Новый Соответствие(); + Иначе + Конвертеры = пКонвертеры; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ПрограммныйИнтерфейс @@ -62,9 +97,12 @@ #Область СлужебныеПроцедурыИФункции -Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов = Неопределено, ДесериализуемыеКлючи = Неопределено) +Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов = Неопределено, + ДесериализуемыеКлючи = Неопределено) - Если ЭтоПримитивныйТип(ТипОбъекта) Тогда + Если Конвертеры[ТипОбъекта] <> Неопределено Тогда + Возврат Конвертеры[ТипОбъекта].Десериализовать(ДесериализованныйОбъект, ЭтотОбъект); + ИначеЕсли ЭтоПримитивныйТип(ТипОбъекта) Тогда Возврат ПреобразоватьПримитивныйТип(ДесериализованныйОбъект, ТипОбъекта); ИначеЕсли ТипОбъекта = Тип("Массив") Тогда Возврат ПреобразоватьМассив(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); @@ -116,13 +154,13 @@ Функция ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта, ТипЭлементов, ДесериализуемыеКлючи) - Результат = Новый ТаблицаЗначений; КоличествоЭлементов = Объект.Количество(); Если КоличествоЭлементов = 0 Тогда - Возврат Результат; + Возврат Неопределено; КонецЕсли; + Результат = Новый ТаблицаЗначений; ДобавленныеКолонки = Новый МножествоСоответствие; Для ИндексЭлемента = 0 По КоличествоЭлементов - 1 Цикл @@ -200,8 +238,16 @@ ТипЭлементов = ТипыСвойства.ТипЭлементов; ДесериализуемыеКлючи = ПолучитьДесериализуемыеКлючи(Свойство); - ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, ТипСвойства, ТипЭлементов, ДесериализуемыеКлючи); - Если ТипСвойства <> Неопределено И ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда + ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, + ТипСвойства, + ТипЭлементов, + ДесериализуемыеКлючи); + + Если ЗначениеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда Лог.Ошибка("Тип свойства '%1' не соответствует ожидаемому типу '%2'", ТипЗнч(ЗначениеСвойства), ТипСвойства); Продолжить; КонецЕсли; @@ -210,9 +256,7 @@ КонецЦикла; - Если Рефлектор.МетодСуществует(Результат, "ПослеДесериализации") Тогда - Результат.ПослеДесериализации(); - КонецЕсли; + ВызватьМетодПослеДесериализации(Результат, Объект); Возврат Результат; @@ -278,25 +322,27 @@ КонецФункции -#КонецОбласти +Процедура ВызватьМетодПослеДесериализации(ПользовательскийОбъект, ПрочитанныеСвойства) + + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(ПользовательскийОбъект)); -Процедура ПриСозданииОбъекта() - - Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.jason.ДесериализаторJson"); - Рефлектор = Новый Рефлектор(); + Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл - КэшИзвестныхТипов = Новый МножествоСоответствие; - ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); - Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл - КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); - КонецЦикла; + АннотацияПослеДесериализации = РаботаСАннотациями.НайтиАннотацию(СвойстваМетода.Аннотации, "ПослеДесериализации"); + Если АннотацияПослеДесериализации = Неопределено Тогда + Продолжить; + КонецЕсли; - ПримитивныеТипы = Новый МножествоСоответствие; - ПримитивныеТипы.Добавить(Тип("Строка")); - ПримитивныеТипы.Добавить(Тип("Булево")); - ПримитивныеТипы.Добавить(Тип("Дата")); - ПримитивныеТипы.Добавить(Тип("Число")); - ПримитивныеТипы.Добавить(Тип("Null")); - ПримитивныеТипы.Добавить(Тип("Неопределено")); + ПараметрыМетода = Новый Массив(); + + Если СвойстваМетода.КоличествоПараметров = 1 Тогда + ПараметрыМетода.Добавить(ПрочитанныеСвойства); + КонецЕсли; + + Рефлектор.ВызватьМетод(ПользовательскийОбъект, СвойстваМетода.Имя, ПараметрыМетода); + + КонецЦикла; КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" similarity index 71% rename from "src/BenchmarkOneScript/jason/\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\200JsonBench.os" rename to "src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" index 5289e6d..d44b208 100644 --- "a/src/BenchmarkOneScript/jason/\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\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" @@ -23,6 +23,41 @@ // Перем ПримитивныеТипы; +// Соответствие - Прользовательские конвертеры для типа +// +Перем Конвертеры; + +#КонецОбласти + +#Область Конструктор + +Процедура ПриСозданииОбъекта(пКонвертеры = Неопределено) + + Рефлектор = Новый Рефлектор(); + Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторJson"); + + КэшИзвестныхТипов = Новый МножествоСоответствие; + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); + Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл + КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); + КонецЦикла; + + ПримитивныеТипы = Новый МножествоСоответствие; + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Null")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + + Если пКонвертеры = Неопределено Тогда + Конвертеры = Новый Соответствие(); + Иначе + Конвертеры = пКонвертеры; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ПрограммныйИнтерфейс @@ -36,24 +71,24 @@ // Строка // Функция Сериализовать(Объект) Экспорт + ОбъектСериализации = ПреобразоватьОбъектСериализации(Объект); - Запись = Новый ЗаписьJSON; - Запись.УстановитьСтроку(); + Запись = Новый ЗаписьJSON(); + Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, Символы.Таб)); ЗаписатьJSON(Запись, ОбъектСериализации); Возврат Запись.Закрыть(); -КонецФункции - -#КонецОбласти -#Область СлужебныеПроцедурыИФункции +КонецФункции -Функция ПреобразоватьОбъектСериализации(Объект, СериализуемыеКлючи = Неопределено) +Функция ПреобразоватьОбъектСериализации(Объект, СериализуемыеКлючи = Неопределено) Экспорт ТипОбъекта = ТипЗнч(Объект); - Если ТипОбъекта = Тип("Массив") Тогда + Если Конвертеры[ТипОбъекта] <> Неопределено Тогда + Результат = Конвертеры[ТипОбъекта].Сериализовать(Объект, ЭтотОбъект); + ИначеЕсли ТипОбъекта = Тип("Массив") Тогда Результат = ПреобразоватьМассив(Объект); ИначеЕсли ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда Результат = ПреобразоватьСтруктуру(Объект); @@ -71,6 +106,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ЭтоПримитивныйТип(ТипОбъекта) Возврат ПримитивныеТипы.Содержит(ТипОбъекта); КонецФункции @@ -155,12 +194,35 @@ Результат = Новый Соответствие(); - СвойстваОбъекта = Рефлектор.ПолучитьТаблицуСвойств(ТипОбъекта, Истина); + ВызватьМетодПередСериализацией(Объект); + ПрочитатьСериализуемыеПоля(Объект, Результат); + ПрочитатьДополнительныеПоля(Объект, Результат); + + Возврат Результат; + +КонецФункции + +Процедура ВызватьМетодПередСериализацией(Объект) + + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Объект)); + + Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл + + АннотацияПередСериализацией = РаботаСАннотациями.НайтиАннотацию(СвойстваМетода.Аннотации, "ПередСериализацией"); + Если АннотацияПередСериализацией = Неопределено Тогда + Продолжить; + КонецЕсли; + + Рефлектор.ВызватьМетод(Объект, СвойстваМетода.Имя); + + КонецЦикла; + +КонецПроцедуры + +Процедура ПрочитатьСериализуемыеПоля(Объект, Результат) + + СвойстваОбъекта = Рефлектор.ПолучитьТаблицуСвойств(ТипЗнч(Объект), Истина); - Если Рефлектор.МетодСуществует(Объект, "ПередСериализацией") Тогда - Объект.ПередСериализацией(); - КонецЕсли; - Для Каждого СвойствоОбъекта Из СвойстваОбъекта Цикл // Проверяем, не помечено ли поле как несериализуемое Несериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойствоОбъекта.Аннотации, "Несериализуемое"); @@ -172,8 +234,13 @@ ИмяСвойства = СвойствоОбъекта.Имя; АннотацияСериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойствоОбъекта.Аннотации, "Сериализуемое"); Если АннотацияСериализуемое <> Неопределено Тогда - ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", СвойствоОбъекта.Имя); - Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Обязательное", Обязательное); + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, + "Значение", + СвойствоОбъекта.Имя); + + Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, + "Обязательное", + Обязательное); КонецЕсли; СериализуемыеКлючи = ПолучитьСериализуемыеКлючи(СвойствоОбъекта); @@ -186,9 +253,35 @@ КонецЦикла; - Возврат Результат; +КонецПроцедуры -КонецФункции +Процедура ПрочитатьДополнительныеПоля(Объект, Результат) + + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Объект)); + + Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл + + АннотацияСериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойстваМетода.Аннотации, "Сериализуемое"); + Если АннотацияСериализуемое = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", ""); + Если Не ЗначениеЗаполнено(ИмяСвойства) Тогда + Продолжить; + КонецЕсли; + + Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Обязательное", Ложь); + + ЗначениеСвойства = Рефлектор.ВызватьМетод(Объект, СвойстваМетода.Имя); + ЗначениеСвойства = ПреобразоватьОбъектСериализации(ЗначениеСвойства); + Если Обязательное ИЛИ ЗначениеСвойства <> Неопределено Тогда + Результат.Вставить(ИмяСвойства, ЗначениеСвойства); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры Функция ПолучитьСериализуемыеКлючи(СвойствоОбъекта) @@ -208,25 +301,4 @@ КонецФункции -#КонецОбласти - -Процедура ПриСозданииОбъекта() - - Рефлектор = Новый Рефлектор(); - Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.jason.СериализаторJson"); - - КэшИзвестныхТипов = Новый МножествоСоответствие; - ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); - Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл - КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); - КонецЦикла; - - ПримитивныеТипы = Новый МножествоСоответствие; - ПримитивныеТипы.Добавить(Тип("Строка")); - ПримитивныеТипы.Добавить(Тип("Булево")); - ПримитивныеТипы.Добавить(Тип("Дата")); - ПримитивныеТипы.Добавить(Тип("Число")); - ПримитивныеТипы.Добавить(Тип("Null")); - ПримитивныеТипы.Добавить(Тип("Неопределено")); - -КонецПроцедуры \ No newline at end of file +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" new file mode 100644 index 0000000..eff176b --- /dev/null +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" @@ -0,0 +1,21 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("Version") +&Тип("Строка") +Перем Версия Экспорт; // Строка + +&Сериализуемое("Alias") +&Тип("Строка") +Перем Алиас Экспорт; // Строка + +&Сериализуемое("Name") +&Тип("Строка") +Перем Наименование Экспорт; // Строка + +Процедура ПриСозданииОбъекта() + + Версия = ""; + Алиас = ""; + Наименование = ""; + +КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" new file mode 100644 index 0000000..b087e5a --- /dev/null +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" @@ -0,0 +1,125 @@ +// BSLLS:UnusedLocalVariable-off +// BSLLS:ExportVariables-off + +&Несериализуемое +Перем ДескрипторБенчмарка Экспорт; // ДескрипторБенчмарка + +&Сериализуемое("Type") +&Тип("Тип") +Перем Тип; // Тип + +&Сериализуемое("Method") +&Тип("Строка") +Перем Метод; // Строка + +&Сериализуемое("Category") +&Тип("Строка") +Перем Категория; // Строка + +&Несериализуемое +Перем Параметры Экспорт; // Массив из ПараметрБенчмарка + +&Несериализуемое +Перем Эталон Экспорт; // РезультатЗапускаБенчмаркаДто, Неопределено + +&Сериализуемое("Baseline") +&Тип("Булево") +Перем ЭтоЭталон Экспорт; // Булево + +&Сериализуемое("Statistics") +&Тип("СтатистикаБенчмарка") +Перем Статистика Экспорт; // СтатистикаБенчмарка + +&Сериализуемое("Runtime") +&Тип("ИсполняющаяСредаБенчмарковДто") +Перем ИсполняющаяСреда Экспорт; // ИсполняющаяСредаБенчмарковДто + +&Сериализуемое("Measurements") +&Тип("Массив") +&ДляКаждого +&Тип("РезультатИтерацииБенчмаркаДто") +Перем Замеры Экспорт; // Массив из РезультатИтерацииБенчмаркаДто + +Процедура ПриСозданииОбъекта() + + Метод = ""; + Категория = ""; + Параметры = Новый Массив(); + ЭтоЭталон = Ложь; + Статистика = Новый СтатистикаБенчмарка(); + ИсполняющаяСреда = Новый ИсполняющаяСредаБенчмарковДто(); + Замеры = Новый Массив(); + +КонецПроцедуры + +#Область СлужебныеПроцедурыИФункции + +#Область Сериализация + +&ПередСериализацией +Процедура ПередСериализацией() Экспорт + + Тип = ДескрипторБенчмарка.ТипОбъекта(); + Метод = ДескрипторБенчмарка.Метод(); + Категория = ДескрипторБенчмарка.Категория(); + +КонецПроцедуры + +&ПослеДесериализации +Процедура ПослеДесериализации(ПрочитанныеСвойства) Экспорт + + ДесериализоватьПараметры(ПрочитанныеСвойства); + +КонецПроцедуры + +&Сериализуемое("Parameters") +Функция ПолучитьПодготовленныеКСериализацииПараметры() Экспорт + + ПодготовленныеПараметры = Новый Структура(); + + Для Каждого Параметр Из Параметры Цикл + Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); + ПодготовленныеПараметры.Вставить(Параметр.Имя, Значение); + КонецЦикла; + + Возврат ПодготовленныеПараметры; + +КонецФункции + +Процедура ДесериализоватьПараметры(ПрочитанныеСвойства) + + ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, Метод); + ДескрипторБенчмарка.УстановитьКатегорию(ПрочитанныеСвойства["Category"]); + ДескрипторБенчмарка.ИспользоватьКакЭталон(ПрочитанныеСвойства["Baseline"]); + + ИменаПараметровБенчмарка = ДескрипторБенчмарка.ИменаПараметров(); + КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); + + Если КоличествоПараметров = 0 Тогда + ПараметрыМетода = Новый Массив(); + Иначе + ПараметрыМетода = Новый Массив(КоличествоПараметров); + КонецЕсли; + + Для Каждого ДанныеПараметр Из ПрочитанныеСвойства["Parameters"] Цикл + + Имя = ДанныеПараметр.Ключ; + Значение = ДанныеПараметр.Значение; + + ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); + ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; + + ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); + Параметры.Добавить(ПараметрБенчмарка); + + Если ЭтоПараметрМетода Тогда + ПараметрыМетода[ИндексПараметра] = Значение; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\230\321\202\320\265\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\230\321\202\320\265\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\260\320\224\321\202\320\276.os" new file mode 100644 index 0000000..a9a2f59 --- /dev/null +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\230\321\202\320\265\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\260\320\224\321\202\320\276.os" @@ -0,0 +1,41 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("Stage") +&Тип("Строка") +Перем Этап Экспорт; // см. ЭтапыБенчмарка + +&Сериализуемое("IterationNumber") +&Тип("Число") +Перем НомерИтерации Экспорт; // Число + +&Сериализуемое("OperationCount") +&Тип("Число") +Перем КоличествоОпераций Экспорт; // Число + +&Сериализуемое("Nanoseconds") +&Тип("Число") +Перем Наносекунд Экспорт; // Число + +&Сериализуемое("NanosecondsPerOperation") +&Тип("Число") +Перем НаносекундЗаОперацию Экспорт; // Число + +&Сериализуемое("AllocatedMemory") +&Тип("Число") +Перем ВыделяемаяПамять Экспорт; // Число + +&Сериализуемое("AllocatedMemoryPerOperation") +&Тип("Число") +Перем ВыделяемаяПамятьЗаОперацию Экспорт; // Число + +Процедура ПриСозданииОбъекта() + + Этап = ""; + НомерИтерации = 0; + КоличествоОпераций = 0; + Наносекунд = 0; + НаносекундЗаОперацию = 0; + ВыделяемаяПамять = 0; + ВыделяемаяПамятьЗаОперацию = 0; + +КонецПроцедуры \ No newline at end of file diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index 8805735..07127cf 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -1,29 +1,66 @@ { - "СредаОкружения": { - "ВерсияBenchmarkOneScript": "0.1.x-mock", - "ВерсияОС": "Microsoft Windows NT 10.0.x.mock", - "ВерсияИсполняющейСреды": "2.0.0-mock", - "ИмяПроцессора": "MockIntel Core i7-6700HQ CPU 2.60GHz", - "КоличествоПроцессоров": 1, - "КоличествоЯдер": 4, - "КоличествоЛогическихПроцессоров": 8 + "HostEnvironmentInfo": { + "BenchmarkOneScriptVersion": "0.1.x-mock", + "OsVersion": "Microsoft Windows NT 10.0.x.mock", + "RuntimeVersion": "2.0.0-mock", + "ProcessorName": "MockIntel Core i7-6700HQ CPU 2.60GHz", + "PhysicalProcessorCount": 1, + "PhysicalCoreCount": 4, + "LogicalCoreCount": 8 }, - "Бенчмарки": [ - { - "Тип": "ДваБенчмаркаИПоле", - "Метод": "БенчмаркПервый", - "Категория": "", - "ЭтоЭталон": false, - "ИсполняющаяСреда": { - "Версия": "", - "Алиас": "", - "Наименование": "" - }, - "Параметры": { - "Значение": 100 + "Configuration": { + "Strategy": "ПропускнаяСпособность", + "IterationCount": 10, + "InvocationCount": 1, + "WarmupCount": 1, + "MinIterationTime": 10, + "MinInvocationCount": 4, + "ReportSorting": "ПоУмолчанию", + "Memory": false, + "ArtifactsDirectory": ".\\BenchmarkArtifacts", + "Parameters": [ + { + "Name": "Значение", + "Value": 100, + "IsMethodParameter": false + } + ], + "ParameterSources": [], + "Columns": [], + "RuntimeVersions": [], + "Handlers": [], + "Exporters": [ + "ЭкспортерРезультатовБенчмарковВJson" + ] + }, + "BenchmarkDescriptors": { + "Items": [ + { + "Type": "ДваБенчмаркаИПоле", + "Method": "БенчмаркПервый", + "Baseline": false, + "Category": "", + "ParameterSets": [], + "ParameterSources": [] }, - "Статистика": { - "Значения": [ + { + "Type": "ДваБенчмаркаИПоле", + "Method": "БенчмаркВторой", + "Baseline": false, + "Category": "", + "ParameterSets": [], + "ParameterSources": [] + } + ] + }, + "Runs": [ + { + "Type": "ДваБенчмаркаИПоле", + "Method": "БенчмаркПервый", + "Category": "", + "Baseline": false, + "Statistics": { + "OriginalValues": [ 1000000, 1000000, 1000000, @@ -35,17 +72,18 @@ 1000000, 1000000 ], - "Количество": 10, - "Мин": 1000000, + "N": 10, + "Min": 1000000, "Q1": 1000000, - "Медиана": 1000000, - "Среднее": 1000000, + "Median": 1000000, + "Mean": 1000000, "Q3": 1000000, - "Макс": 1000000, - "СтандартноеОтклонение": 0, - "СтандартнаяОшибкаСреднего": 0, - "ОперацийВСекунду": 1000, - "Процентили": { + "Max": 1000000, + "StdDev": 0, + "StdErr": 0, + "Ops": 1000, + "BytesAllocatedPerOperation": 0, + "Percentiles": { "P0": 1000000, "P25": 1000000, "P50": 1000000, @@ -55,119 +93,116 @@ "P90": 1000000, "P95": 1000000, "P100": 1000000 - }, - "Память": { - "ВыделяемаяЗаОперацию": 0 } }, - "Замеры": [ + "Runtime": { + "Version": "", + "Alias": "", + "Name": "" + }, + "Measurements": [ { - "Этап": "Измерение", - "НомерИтерации": 1, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 1, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 2, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 2, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 3, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 3, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 4, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 4, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 5, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 5, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 6, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 6, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 7, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 7, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 8, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 8, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 9, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 9, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 10, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 10, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 } - ] + ], + "Parameters": { + "Значение": 100 + } }, { - "Тип": "ДваБенчмаркаИПоле", - "Метод": "БенчмаркВторой", - "Категория": "", - "ЭтоЭталон": false, - "ИсполняющаяСреда": { - "Версия": "", - "Алиас": "", - "Наименование": "" - }, - "Параметры": { - "Значение": 100 - }, - "Статистика": { - "Значения": [ + "Type": "ДваБенчмаркаИПоле", + "Method": "БенчмаркВторой", + "Category": "", + "Baseline": false, + "Statistics": { + "OriginalValues": [ 1000000, 1000000, 1000000, @@ -179,17 +214,18 @@ 1000000, 1000000 ], - "Количество": 10, - "Мин": 1000000, + "N": 10, + "Min": 1000000, "Q1": 1000000, - "Медиана": 1000000, - "Среднее": 1000000, + "Median": 1000000, + "Mean": 1000000, "Q3": 1000000, - "Макс": 1000000, - "СтандартноеОтклонение": 0, - "СтандартнаяОшибкаСреднего": 0, - "ОперацийВСекунду": 1000, - "Процентили": { + "Max": 1000000, + "StdDev": 0, + "StdErr": 0, + "Ops": 1000, + "BytesAllocatedPerOperation": 0, + "Percentiles": { "P0": 1000000, "P25": 1000000, "P50": 1000000, @@ -199,103 +235,108 @@ "P90": 1000000, "P95": 1000000, "P100": 1000000 - }, - "Память": { - "ВыделяемаяЗаОперацию": 0 } }, - "Замеры": [ + "Runtime": { + "Version": "", + "Alias": "", + "Name": "" + }, + "Measurements": [ { - "Этап": "Измерение", - "НомерИтерации": 1, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 1, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 2, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 2, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 3, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 3, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 4, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 4, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 5, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 5, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 6, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 6, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 7, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 7, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 8, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 8, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 9, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 9, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 10, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 10, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 } - ] + ], + "Parameters": { + "Значение": 100 + } } ] } \ No newline at end of file diff --git a/tests/fixtures/verified-report.xml b/tests/fixtures/verified-report.xml deleted file mode 100644 index 88dd0af..0000000 --- a/tests/fixtures/verified-report.xml +++ /dev/null @@ -1,302 +0,0 @@ - -<Отчет> - <СредаОкружения> - <ВерсияBenchmarkOneScript>0.1.x-mock - <ВерсияОС>Microsoft Windows NT 10.0.x.mock - <ВерсияИсполняющейСреды>2.0.0-mock - <ИмяПроцессора>MockIntel Core i7-6700HQ CPU 2.60GHz - <КоличествоПроцессоров>1 - <КоличествоЯдер>4 - <КоличествоЛогическихПроцессоров>8 - - <Бенчмарки> - <Бенчмарк> - <Тип>ДваБенчмаркаИПоле - <Метод>БенчмаркПервый - <Категория/> - <ЭтоЭталон>false - <ИсполняющаяСреда> - <Версия/> - <Алиас/> - <Наименование/> - - <Параметры> - <Значение>100 - - <Статистика> - <Значения> - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - - <Количество>10 - <Мин>1000000 - 1000000 - <Медиана>1000000 - <Среднее>1000000 - 1000000 - <Макс>1000000 - <СтандартноеОтклонение/> - <СтандартнаяОшибкаСреднего/> - <ОперацийВСекунду>1000 - <Процентили> - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - - <Память> - <ВыделяемаяЗаОперацию/> - - - <Замеры> - <Замер> - <Этап>Измерение - <НомерИтерации>1 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>2 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>3 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>4 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>5 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>6 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>7 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>8 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>9 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>10 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - - - <Бенчмарк> - <Тип>ДваБенчмаркаИПоле - <Метод>БенчмаркВторой - <Категория/> - <ЭтоЭталон>false - <ИсполняющаяСреда> - <Версия/> - <Алиас/> - <Наименование/> - - <Параметры> - <Значение>100 - - <Статистика> - <Значения> - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - - <Количество>10 - <Мин>1000000 - 1000000 - <Медиана>1000000 - <Среднее>1000000 - 1000000 - <Макс>1000000 - <СтандартноеОтклонение/> - <СтандартнаяОшибкаСреднего/> - <ОперацийВСекунду>1000 - <Процентили> - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - - <Память> - <ВыделяемаяЗаОперацию/> - - - <Замеры> - <Замер> - <Этап>Измерение - <НомерИтерации>1 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>2 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>3 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>4 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>5 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>6 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>7 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>8 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>9 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>10 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - - - - \ 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 3b32033..f82ac85 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,3 +1,5 @@ +// BSLLS-off + &Параметры(100, 200) &ИсточникПараметров("ПолучитьЗначения") Перем ОбщееЗначение Экспорт; @@ -13,7 +15,6 @@ &КаталогАртефактов("path/to/artifacts") &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml &ИсполняющаяСреда("stable") &ИсполняющаяСреда("1.9.3, 1.9.4") 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\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.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\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" index 09d6904..c360e20 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\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.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\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" @@ -19,7 +19,7 @@ ДескрипторыБенчмарков = Контекст.ДескрипторыБенчмарков; Конфигурация = Контекст.Конфигурация; - Расшифровка = Контекст.Расшифровка; + Запуски = Контекст.Запуски; Отчет = Контекст.Отчет; СредаОкружения = Контекст.СредаОкружения; @@ -38,7 +38,7 @@ КонецПроцедуры &ПослеКаждого -Процедура ПослеЗапуска(Контекст) Экспорт +Процедура ПослеКаждого(Контекст) Экспорт ДескрипторБенчмарка = Контекст.ДескрипторБенчмарка; Параметры = Контекст.Параметры; @@ -49,10 +49,7 @@ КонецПроцедуры -Процедура ПередЗапускомБезПараметров(Контекст) Экспорт - - ДескрипторБенчмарка = Контекст.ДескрипторБенчмарка; - ПараметрыМетода = Контекст.ПараметрыМетода; +Процедура ПередЗапускомБезПараметров() Экспорт События.Добавить("ПередЗапускомБезПараметров"); 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 edca2e2..217f892 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" @@ -66,7 +66,7 @@ ПостроительОтчета = Новый ПостроительОтчетаБенчмарков( Контекст.ДескрипторыБенчмарков, Контекст.Конфигурация, - Контекст.Расшифровка + Контекст.Запуски ); Контекст.Отчет = ПостроительОтчета.Сформировать(); @@ -81,7 +81,7 @@ Процедура ПроверитьУстановитьВерсииИсполняющейСреды(Версии) - КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки(); + КаталогУстановки = ИнформацияСредыБенчмарков.КаталогУстановки(); Если КаталогУстановки = Неопределено Тогда ВызватьИсключение "Не найден каталог с установленными версиями OneScript. |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; @@ -92,7 +92,7 @@ Для Каждого Версия Из СтрРазделить(Версии, ", ") Цикл - ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + ИмяФайла = ИнформацияСредыБенчмарков.НайтиИсполняемыйФайл(Версия); Если Не ИмяФайла = Неопределено Тогда _Лог.Отладка(СтрШаблон("Обнаружена исполняющая среда OneScript версии %1: %2", Версия, ИмяФайла)); Продолжить; @@ -109,7 +109,7 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; - ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + ИмяФайла = ИнформацияСредыБенчмарков.НайтиИсполняемыйФайл(Версия); Если ИмяФайла = Неопределено Тогда ВызватьИсключение СтрШаблон("После установки OneScript версии %1 не удалось найти исполняемый файл", Версия); КонецЕсли; 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 60a5907..17de205 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" @@ -135,7 +135,7 @@ Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.Расшифровка).Заполнено(); + Ожидаем.Что(Результат.Запуски).Заполнено(); КонецПроцедуры @@ -561,38 +561,6 @@ КонецПроцедуры -&Тест -Процедура Тест_ЭкспортВXml() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.xml", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Конфигурация - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) - .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml) - .УстановитьКоличествоИтераций(10); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.xml"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - &Тест Процедура Тест_ЭкспортВHtml() Экспорт @@ -729,7 +697,7 @@ КонецПроцедуры &Тест -Процедура Тест_ДолженПроверитьСериализациюРезультатовJson() Экспорт +Процедура ТестДолжен_СериализоватьИДесериализоватьРезультатыБенчмарков() Экспорт Тип = Тип("БенчмаркСПараметрамиМетодаИПоля"); @@ -759,14 +727,13 @@ ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); Сериализатор = Новый СериализаторРезультатовБенчмарков(); Сериализатор.ЗаписатьВJson(Результат, ИмяФайла); - РезультатПрочитанный = Сериализатор.ПрочитатьИзJson(ИмяФайла, Конфигурация); + РезультатПрочитанный = Сериализатор.ПрочитатьИзJson(ИмяФайла); // Проверка - Расшифровка = РезультатПрочитанный.Расшифровка; - ДескрипторБенчмарка = Расшифровка[0].ДескрипторБенчмарка; + Запуски = РезультатПрочитанный.Запуски; + ДескрипторБенчмарка = Запуски[0].ДескрипторБенчмарка; НаборыПараметров = ДескрипторБенчмарка.НаборыПараметров(); - Ожидаем.Что(Расшифровка, "Количество строк в расшифровке").ИмеетДлину(8); Ожидаем.Что(ДескрипторБенчмарка.ТипОбъекта(), "Тип").Равно(Тип); Ожидаем.Что(ДескрипторБенчмарка.Метод(), "Метод").Равно("Бенчмарк"); Ожидаем.Что(ДескрипторБенчмарка.Категория(), "Категория").Равно("Категория 1"); @@ -777,20 +744,22 @@ Ожидаем.Что(НаборыПараметров[1], "Набор параметров 2").ИмеетДлину(2); Ожидаем.Что(НаборыПараметров[1].Получить(0).Значение, "Набор параметров 2").Равно(5); Ожидаем.Что(НаборыПараметров[1].Получить(1).Значение, "Набор параметров 2").Равно(6); - Ожидаем.Что(Расшифровка[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); - Ожидаем.Что(Расшифровка[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@"); - Ожидаем.Что(Расшифровка[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); - Ожидаем.Что(Расшифровка[0].Параметры[2].Значение, "Параметр 1.3").Равно(4); - Ожидаем.Что(Расшифровка[1].Параметры[0].Значение, "Параметр 2.1").Содержит("БенчмаркСПараметрамиМетодаИПоля@"); - Ожидаем.Что(Расшифровка[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101'); - Ожидаем.Что(Расшифровка[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено); - Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[0].ИсполняющаяСреда.Версия, "Версия").Не_().Заполнено(); - Ожидаем.Что(Расшифровка[0].Замеры, "Количество строк в замерах").ИмеетДлину(1); - Ожидаем.Что(Расшифровка[0].Замеры[0].Этап, "Этап").Равно(ЭтапыБенчмарка.Измерение); - Ожидаем.Что(Расшифровка[0].Замеры[0].НомерИтерации, "Номер итерации").Равно(1); - Ожидаем.Что(Расшифровка[0].Замеры[0].Наносекунд, "Наносекунд").Больше(100); - Ожидаем.Что(Расшифровка[0].Статистика.Среднее, "Среднее").Больше(100); + Ожидаем.Что(Запуски, "Количество запусков").ИмеетДлину(8); + Ожидаем.Что(Запуски[0].ДескрипторБенчмарка, "Должен быть создан один объект дескриптора").Равно(Запуски[1].ДескрипторБенчмарка); + Ожидаем.Что(Запуски[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); + Ожидаем.Что(Запуски[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@"); + Ожидаем.Что(Запуски[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); + Ожидаем.Что(Запуски[0].Параметры[2].Значение, "Параметр 1.3").Равно(4); + Ожидаем.Что(Запуски[1].Параметры[0].Значение, "Параметр 2.1").Содержит("БенчмаркСПараметрамиМетодаИПоля@"); + Ожидаем.Что(Запуски[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101'); + Ожидаем.Что(Запуски[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено); + Ожидаем.Что(Запуски[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь(); + Ожидаем.Что(Запуски[0].ИсполняющаяСреда.Версия, "Версия").Не_().Заполнено(); + Ожидаем.Что(Запуски[0].Замеры, "Количество строк в замерах").ИмеетДлину(1); + Ожидаем.Что(Запуски[0].Замеры[0].Этап, "Этап").Равно(ЭтапыБенчмарка.Измерение); + Ожидаем.Что(Запуски[0].Замеры[0].НомерИтерации, "Номер итерации").Равно(1); + Ожидаем.Что(Запуски[0].Замеры[0].Наносекунд, "Наносекунд").Больше(100); + Ожидаем.Что(Запуски[0].Статистика.Среднее, "Среднее").Больше(100); КонецПроцедуры @@ -889,11 +858,14 @@ Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); // Проверка - Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(4); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(100); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(200); - Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(Ложь); - Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(Истина); + ИмяКолонки = КолонкиОтчетаБенчмарков.Параметр("Поле"); + Значения = Результат.Отчет.Таблица.ВыгрузитьКолонку(ИмяКолонки); + + Ожидаем.Что(Значения).ИмеетДлину(4); + Ожидаем.Что(Значения).Содержит(Ложь); + Ожидаем.Что(Значения).Содержит(Истина); + Ожидаем.Что(Значения).Содержит(100); + Ожидаем.Что(Значения).Содержит(200); КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" index 4a15459..d1721c2 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" @@ -17,7 +17,7 @@ Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков); - ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять; + ВыделеноБайт = Результат.Запуски[0].Статистика.ВыделяемаяПамять; Коэффициент = РазмерВБайтах / ВыделеноБайт; Ожидаем.Что(Коэффициент).Между(0.99, 1); @@ -36,7 +36,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять; + ВыделеноБайт = Результат.Запуски[0].Статистика.ВыделяемаяПамять; Ожидаем.Что(ВыделеноБайт).Между(1, 2000); @@ -46,11 +46,11 @@ Процедура Тест_Производительность() Экспорт Результат = Бенчмаркинг.Запустить(Тип("БенчмаркиСЗадержкой")); - Расшифровка = Результат.Расшифровка; + Запуски = Результат.Запуски; Отчет = Результат.Отчет; - Статистика1 = Расшифровка[0].Статистика.ВМиллисекунды(); - Статистика2 = Расшифровка[1].Статистика.ВМиллисекунды(); + Статистика1 = Запуски[0].Статистика.ВМиллисекунды(); + Статистика2 = Запуски[1].Статистика.ВМиллисекунды(); // Среднее Ожидаем.Что(Статистика1.Среднее).Больше(10); 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 6e30c4c..84252c5 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" @@ -61,7 +61,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.Расшифровка[0].Замеры.Количество()).Равно(КоличествоИтераций); + Ожидаем.Что(Результат.Запуски[0].Замеры.Количество()).Равно(КоличествоИтераций); КонецПроцедуры @@ -76,7 +76,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); + Ожидаем.Что(Результат.Запуски[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); КонецПроцедуры @@ -147,7 +147,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); + Ожидаем.Что(Результат.Запуски[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); КонецПроцедуры @@ -163,7 +163,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(1); + Ожидаем.Что(Результат.Запуски[0].Замеры[0].КоличествоОпераций).Равно(1); КонецПроцедуры @@ -292,30 +292,33 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.Расшифровка[0].Статистика.ВыделяемаяПамять).Заполнено(); + Ожидаем.Что(Результат.Запуски[0].Статистика.ВыделяемаяПамять).Заполнено(); Ожидаем.Что(Результат.Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); КонецПроцедуры &Тест -Процедура Тест_ВызовОбработчиковСобытий() Экспорт +Процедура ТестДолжен_ВызватьСтандартныеОбработчикиСобытий() Экспорт ОбъектБенчмарков = Новый БенчмаркСОбработчикамиСобытий(); Конфигурация = Новый КонфигурацияБенчмарков(ОбъектБенчмарков); ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Параметры = Новый Массив(); - Параметры.Добавить(ОбъектБенчмарков); - Параметры.Добавить(Конфигурация); + Бенчмаркинг.Запустить(ОбъектБенчмарков, Конфигурация); + + События = ОбъектБенчмарков.События; - Ожидаем.Что(Бенчмаркинг).Метод("Запустить", Параметры).Не_().ВыбрасываетИсключение(); - Ожидаем.Что(ОбъектБенчмарков.События).ИмеетДлину(4); + Ожидаем.Что(События).Содержит("ПередВсеми"); + Ожидаем.Что(События).Содержит("ПослеВсех"); + Ожидаем.Что(События).Содержит("ПередКаждым"); + Ожидаем.Что(События).Содержит("ПослеКаждого"); + Ожидаем.Что(События).Не_().Содержит("ПередЗапускомБезПараметров"); КонецПроцедуры &Тест -Процедура Тест_ВызовОбработчикаСобытияБезПараметров() Экспорт +Процедура ТестДолжен_ВызватьКастомныйОбработчикСобытияБезПараметров() Экспорт ОбъектБенчмарков = Новый БенчмаркСОбработчикамиСобытий(); @@ -334,7 +337,7 @@ КонецПроцедуры &Тест -Процедура Тест_ВызовНесколькихОбработчиковОдногоСобытия() Экспорт +Процедура ТестДолжен_ВызватьНесколькоОбработчиковДляОдногоСобытия() Экспорт ОбъектБенчмарков = Новый БенчмаркСОбработчикамиСобытий(); @@ -771,7 +774,6 @@ Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина(); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4); Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable"); 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\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" similarity index 96% rename from "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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" rename to "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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index dd7bec1..835635b 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\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -18,7 +18,7 @@ КонецПроцедуры &Тест -Процедура Тест_ДолженПроверитьСериализациюИДесериализацию() Экспорт +Процедура ТестДолжен_СериализоватьИДесериализовать() Экспорт Тип = Тип("БенчмаркСАннотациямиКонфигурации"); Конфигурация = Новый КонфигурацияБенчмарков(Тип); @@ -84,7 +84,6 @@ Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина(); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4); Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable"); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" index 378cdd1..eb38694 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -7,12 +7,12 @@ &Тест Процедура Тест_Пустой() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("", ""); + ТестовыеЗамеры = ТестовыеЗамеры("", ""); Статистика = Новый СтатистикаБенчмарка(); Параметры = Новый Массив(); - Параметры.Добавить(ТаблицаЗамеров); + Параметры.Добавить(ТестовыеЗамеры); Ожидаем.Что(Статистика).Метод("Прочитать", Параметры).ВыбрасываетИсключение("Набор замеров не должен быть пустым"); @@ -21,9 +21,9 @@ &Тест Процедура Тест_НечетныйРазмер() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101, 102"); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101, 102"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); Ожидаем.Что(Статистика.Мин, "Мин").Равно(12); @@ -45,9 +45,9 @@ &Тест Процедура Тест_ЧетныйРазмер() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 20, 4", "100, 102"); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 20, 4", "100, 102"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(17.875); Ожидаем.Что(Статистика.Мин, "Мин").Равно(4); @@ -69,9 +69,9 @@ &Тест Процедура Тест_ОдинаковыеЗначения() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("5, 5, 5, 5", "100, 100"); + ТестовыеЗамеры = ТестовыеЗамеры("5, 5, 5, 5", "100, 100"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(5); Ожидаем.Что(Статистика.Мин, "Мин").Равно(5); @@ -93,9 +93,9 @@ &Тест Процедура Тест_ОтрицательныеЗначения() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("-12, 15, -22, 25, 17, 28, 0, 4", "100, -100"); + ТестовыеЗамеры = ТестовыеЗамеры("-12, 15, -22, 25, 17, 28, 0, 4", "100, -100"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(6.875); Ожидаем.Что(Статистика.Мин, "Мин").Равно(-22); @@ -119,9 +119,9 @@ ОтношениеКБазовой = ЕдиницыИзмеренийБенчмарков.Миллисекунда.ОтношениеКБазовой; - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); @@ -145,9 +145,9 @@ ОтношениеКБазовой = ЕдиницыИзмеренийБенчмарков.Секунда.ОтношениеКБазовой; - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Статистика.ВСекунды(); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); @@ -169,9 +169,9 @@ &Тест Процедура Тест_ВНаносекунды() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101"); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Статистика.ВСекунды().ВНаносекунды(); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); @@ -193,11 +193,11 @@ &Тест Процедура Тест_Разделить() Экспорт - ТаблицаЗамеров1 = ТаблицаЗамеров("32, 16, 64, 128", "100, 102"); - ТаблицаЗамеров2 = ТаблицаЗамеров("2, 8, 16, 4", "50, 51"); + ТестовыеЗамеры1 = ТестовыеЗамеры("32, 16, 64, 128", "100, 102"); + ТестовыеЗамеры2 = ТестовыеЗамеры("2, 8, 16, 4", "50, 51"); - Статистика1 = Новый СтатистикаБенчмарка(ТаблицаЗамеров1); - Статистика2 = Новый СтатистикаБенчмарка(ТаблицаЗамеров2); + Статистика1 = Новый СтатистикаБенчмарка(ТестовыеЗамеры1); + Статистика2 = Новый СтатистикаБенчмарка(ТестовыеЗамеры2); Статистика = Статистика1.Разделить(Статистика2); @@ -218,28 +218,27 @@ КонецПроцедуры -Функция ТаблицаЗамеров(СтрокаЗамерыВремени, СтрокаЗамерыПамяти, Множитель = 1) Экспорт +Функция ТестовыеЗамеры(СтрокаЗамерыВремени, СтрокаЗамерыПамяти, Множитель = 1) Экспорт - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("Этап"); - Таблица.Колонки.Добавить("НаносекундЗаОперацию"); - Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию"); + Замеры = Новый Массив(); МассивЗамеровВремени = СтрРазделить(СтрокаЗамерыВремени, ",", Ложь); МассивЗамеровПамяти = СтрРазделить(СтрокаЗамерыПамяти, ",", Ложь); Для Каждого НаносекундЗаОперацию Из МассивЗамеровВремени Цикл - СтрокаТаблицы = Таблица.Добавить(); - СтрокаТаблицы.Этап = ЭтапыБенчмарка.Измерение; - СтрокаТаблицы.НаносекундЗаОперацию = Число(НаносекундЗаОперацию) * Множитель; + Замер = Новый РезультатИтерацииБенчмаркаДто(); + Замер.Этап = ЭтапыБенчмарка.Измерение; + Замер.НаносекундЗаОперацию = Число(НаносекундЗаОперацию) * Множитель; + Замеры.Добавить(Замер); КонецЦикла; Для Каждого ВыделяемаяПамятьЗаОперацию Из МассивЗамеровПамяти Цикл - СтрокаТаблицы = Таблица.Добавить(); - СтрокаТаблицы.Этап = ЭтапыБенчмарка.Память; - СтрокаТаблицы.ВыделяемаяПамятьЗаОперацию = Число(ВыделяемаяПамятьЗаОперацию) * Множитель; + Замер = Новый РезультатИтерацииБенчмаркаДто(); + Замер.Этап = ЭтапыБенчмарка.Память; + Замер.ВыделяемаяПамятьЗаОперацию = Число(ВыделяемаяПамятьЗаОперацию) * Множитель; + Замеры.Добавить(Замер); КонецЦикла; - Возврат Таблица; + Возврат Замеры; КонецФункции \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" index 0578660..730d60e 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" @@ -109,17 +109,17 @@ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина); Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - Расшифровка = Результат.Расшифровка; - - Ожидаем.Что(Расшифровка).ИмеетДлину(4); - Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("Бенчмарк"); - Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("stable"); - Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[1].Эталон.ДескрипторБенчмарка.Метод(), "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); - Ожидаем.Что(Расшифровка[1].Эталон.ИсполняющаяСреда.Алиас, "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); - Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (stable) должен быть эталоном").ЭтоИстина(); - Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); + Запуски = Результат.Запуски; + + Ожидаем.Что(Запуски).ИмеетДлину(4); + Ожидаем.Что(Запуски[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("Бенчмарк"); + Ожидаем.Что(Запуски[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("stable"); + Ожидаем.Что(Запуски[1].ЭтоЭталон, "БенчмаркЭталон (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[1].Эталон.ДескрипторБенчмарка.Метод(), "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Запуски[1].Эталон.ИсполняющаяСреда.Алиас, "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); + Ожидаем.Что(Запуски[2].ЭтоЭталон, "Бенчмарк (stable) должен быть эталоном").ЭтоИстина(); + Ожидаем.Что(Запуски[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); КонецПроцедуры @@ -135,17 +135,17 @@ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable"); Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - Расшифровка = Результат.Расшифровка; - - Ожидаем.Что(Расшифровка).ИмеетДлину(4); - Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("БенчмаркЭталон"); - Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("dev"); - Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) должен быть эталоном").ЭтоИстина(); - Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[2].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); - Ожидаем.Что(Расшифровка[2].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); - Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); + Запуски = Результат.Запуски; + + Ожидаем.Что(Запуски).ИмеетДлину(4); + Ожидаем.Что(Запуски[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Запуски[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("dev"); + Ожидаем.Что(Запуски[1].ЭтоЭталон, "БенчмаркЭталон (dev) должен быть эталоном").ЭтоИстина(); + Ожидаем.Что(Запуски[2].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[2].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Запуски[2].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); + Ожидаем.Что(Запуски[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); КонецПроцедуры @@ -226,7 +226,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Запуски) .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркВ""") .ПолучитьПервый(); @@ -244,7 +244,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Запуски) .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 2") .ПолучитьПервый(); @@ -264,7 +264,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); // БенчмаркБ - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Запуски) .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 1") .ПолучитьПервый(); From 591215e64a8a11645fb00dc0bb82427f5973c36e Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 00:34:29 +0300 Subject: [PATCH 08/18] =?UTF-8?q?chore:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20OneScript=20=D0=B2=20=D0=B2=D0=BE=D1=80=D0=BA=D1=84=D0=BB?= =?UTF-8?q?=D0=BE=D1=83=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a5508a..aba7b2e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: strategy: fail-fast: false matrix: - oscript_version: ['stable', 'dev'] + oscript_version: ['default', 'lts', 'stable', 'dev'] uses: autumn-library/workflows/.github/workflows/test.yml@v1 with: oscript_version: ${{ matrix.oscript_version }} From e2d5475deab97c00c95567e693ec88144294d2cd Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 01:10:15 +0300 Subject: [PATCH 09/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 3 +-- ...320\260\320\277\321\203\321\201\320\272\320\260.os" | 5 +++++ ...320\274\320\260\321\200\320\272\320\276\320\262.os" | 8 ++++---- ...320\274\320\260\321\200\320\272\320\276\320\262.os" | 4 ++-- ...321\207\320\274\320\260\321\200\320\272\320\260.os" | 4 ++-- ...20\267\320\260\321\202\320\276\321\200JsonBench.os" | 7 ++----- ...321\200\320\272\320\260\320\224\321\202\320\276.os" | 10 ---------- 7 files changed, 16 insertions(+), 25 deletions(-) diff --git a/packagedef b/packagedef index d824de1..b0f7720 100644 --- a/packagedef +++ b/packagedef @@ -21,13 +21,12 @@ .ЗависитОт("cpuinfo", "1.4.0") .ЗависитОт("delegate", "1.0.0") .ЗависитОт("annotations", "1.3.1") - .ЗависитОт("asserts", "1.5.0") + .ЗависитОт("asserts", "1.6.1") .ЗависитОт("autumn", "4.3.11") .ЗависитОт("autumn-cli", "1.2.0") .ЗависитОт("coloratos", "0.3.0") .ЗависитОт("fluent", "0.6.1") .ЗависитОт("lambdas", "0.3.2") - .ЗависитОт("xml-parser", "0.1.1") .ЗависитОт("logos", "1.7.1") .ЗависитОт("fs", "1.2.0") .ЗависитОт("tempfiles", "1.1.1") 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 3bccd12..e3a22be 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" @@ -78,6 +78,11 @@ Настройки = ПрочитатьНастройки(); Конфигурация = ПрочитатьКонфигурацию(Настройки); + Если ПодключенныеТипы.Количество() = 0 Тогда + _Лог.Предупреждение("Не найдено ни одного файла с бенчмарками для запуска"); + Возврат; + КонецЕсли; + Для Каждого Тип Из ПодключенныеТипы Цикл КонфигурацияТипа = Новый КонфигурацияБенчмарков(Тип); 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 aee5595..1e3261f 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" @@ -1137,8 +1137,8 @@ &ПослеДесериализации Процедура ПослеДесериализации(ПрочитанныеСвойства) Экспорт - ДессериализоватьОбработчики(ПрочитанныеСвойства); - ДессериализоватьЭкспортеры(ПрочитанныеСвойства); + ДесериализоватьОбработчики(ПрочитанныеСвойства); + ДесериализоватьЭкспортеры(ПрочитанныеСвойства); ОпределитьМодифицированныеПоля(); Валидировать(); @@ -1183,7 +1183,7 @@ КонецПроцедуры -Процедура ДессериализоватьОбработчики(ПрочитанныеСвойства) +Процедура ДесериализоватьОбработчики(ПрочитанныеСвойства) Для Каждого Строка Из ПрочитанныеСвойства["Handlers"] Цикл ДобавитьОбработчикСобытия(Строка["Event"], Строка["Handler"]); @@ -1191,7 +1191,7 @@ КонецПроцедуры -Процедура ДессериализоватьЭкспортеры(ПрочитанныеСвойства) +Процедура ДесериализоватьЭкспортеры(ПрочитанныеСвойства) Для Каждого СтрокаТип Из ПрочитанныеСвойства["Exporters"] Цикл ДобавитьЭкспортер(Новый(СтрокаТип)); diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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 10ccf67..fc4fe36 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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" @@ -142,13 +142,13 @@ &ПослеДесериализации Процедура ПослеДесериализации() Экспорт - ПереопределитьДескрпиторыВЗапусках(); + ПереопределитьДескрипторыВЗапусках(); ОпределитьЭталоны(); ОбновитьСтатистику(); КонецПроцедуры -Процедура ПереопределитьДескрпиторыВЗапусках() +Процедура ПереопределитьДескрипторыВЗапусках() Для Каждого Запуск Из Запуски Цикл Дескриптор = Запуск.ДескрипторБенчмарка; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\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\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 2b7be21..ba3528d 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\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\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -301,8 +301,8 @@ Процентили = Новый Структура("P0, P25, P50, P67, P80, P85, P90, P95, P100"); Для Каждого Строка Из Процентили Цикл - Вероятность = Число(Сред(Строка.Ключ, 2)); - Процентили[Строка.Ключ] = Квантиль(Вероятность); + Процент = Число(Сред(Строка.Ключ, 2)); + Процентили[Строка.Ключ] = Квантиль(Процент / 100); КонецЦикла; Возврат Процентили; diff --git "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" index 8614f89..a5d7b8a 100644 --- "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -153,19 +153,16 @@ КонецФункции Функция ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта, ТипЭлементов, ДесериализуемыеКлючи) - - КоличествоЭлементов = Объект.Количество(); - Если КоличествоЭлементов = 0 Тогда + Если Объект.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; Результат = Новый ТаблицаЗначений; ДобавленныеКолонки = Новый МножествоСоответствие; - Для ИндексЭлемента = 0 По КоличествоЭлементов - 1 Цикл + Для Каждого ЗначенияКолонок Из Объект Цикл - ЗначенияКолонок = Объект[ИндексЭлемента]; Если Не (ТипЗнч(ЗначенияКолонок) = Тип("Структура") Или ТипЗнч(ЗначенияКолонок) = Тип("Соответствие")) Тогда Продолжить; КонецЕсли; diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" index b087e5a..36707a8 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" @@ -95,12 +95,6 @@ ИменаПараметровБенчмарка = ДескрипторБенчмарка.ИменаПараметров(); КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); - Если КоличествоПараметров = 0 Тогда - ПараметрыМетода = Новый Массив(); - Иначе - ПараметрыМетода = Новый Массив(КоличествоПараметров); - КонецЕсли; - Для Каждого ДанныеПараметр Из ПрочитанныеСвойства["Parameters"] Цикл Имя = ДанныеПараметр.Ключ; @@ -112,10 +106,6 @@ ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); Параметры.Добавить(ПараметрБенчмарка); - Если ЭтоПараметрМетода Тогда - ПараметрыМетода[ИндексПараметра] = Значение; - КонецЕсли; - КонецЦикла; КонецПроцедуры From f61a448381adff553fe216f7fdc22041bbc7fada Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 01:31:16 +0300 Subject: [PATCH 10/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\321\200\320\272\320\276\320\262.os" | 8 +++++ ...0\260\321\202\320\276\321\200JsonBench.os" | 2 +- ...0\260\321\202\320\276\321\200JsonBench.os" | 2 +- ...20\272\320\260\320\224\321\202\320\276.os" | 32 ++++++++++++------- 4 files changed, 30 insertions(+), 14 deletions(-) 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 1e3261f..a051b14 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" @@ -1184,6 +1184,10 @@ КонецПроцедуры Процедура ДесериализоватьОбработчики(ПрочитанныеСвойства) + + Если Не ПрочитанныеСвойства.Свойство("Handlers") Тогда + Возврат; + КонецЕсли; Для Каждого Строка Из ПрочитанныеСвойства["Handlers"] Цикл ДобавитьОбработчикСобытия(Строка["Event"], Строка["Handler"]); @@ -1192,6 +1196,10 @@ КонецПроцедуры Процедура ДесериализоватьЭкспортеры(ПрочитанныеСвойства) + + Если Не ПрочитанныеСвойства.Свойство("Exporters") Тогда + Возврат; + КонецЕсли; Для Каждого СтрокаТип Из ПрочитанныеСвойства["Exporters"] Цикл ДобавитьЭкспортер(Новый(СтрокаТип)); diff --git "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" index a5d7b8a..36643d1 100644 --- "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -22,7 +22,7 @@ // Перем ПримитивныеТипы; -// Соответствие - Прользовательские конвертеры для типа +// Соответствие - Пользовательские конвертеры для типа // Перем Конвертеры; diff --git "a/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" index d44b208..c61dcb1 100644 --- "a/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" @@ -23,7 +23,7 @@ // Перем ПримитивныеТипы; -// Соответствие - Прользовательские конвертеры для типа +// Соответствие - Пользовательские конвертеры для типа // Перем Конвертеры; diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" index 36707a8..260aa53 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" @@ -89,24 +89,32 @@ Процедура ДесериализоватьПараметры(ПрочитанныеСвойства) ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, Метод); - ДескрипторБенчмарка.УстановитьКатегорию(ПрочитанныеСвойства["Category"]); - ДескрипторБенчмарка.ИспользоватьКакЭталон(ПрочитанныеСвойства["Baseline"]); - ИменаПараметровБенчмарка = ДескрипторБенчмарка.ИменаПараметров(); - КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); + Если ПрочитанныеСвойства.Свойство("Category") Тогда + ДескрипторБенчмарка.УстановитьКатегорию(ПрочитанныеСвойства["Category"]); + КонецЕсли; - Для Каждого ДанныеПараметр Из ПрочитанныеСвойства["Parameters"] Цикл + Если ПрочитанныеСвойства.Свойство("Baseline") Тогда + ДескрипторБенчмарка.ИспользоватьКакЭталон(ПрочитанныеСвойства["Baseline"]); + КонецЕсли; - Имя = ДанныеПараметр.Ключ; - Значение = ДанныеПараметр.Значение; + Если ПрочитанныеСвойства.Свойство("Parameters") Тогда + ИменаПараметровБенчмарка = ДескрипторБенчмарка.ИменаПараметров(); + КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); - ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); - ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; + Для Каждого ДанныеПараметр Из ПрочитанныеСвойства["Parameters"] Цикл - ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); - Параметры.Добавить(ПараметрБенчмарка); + Имя = ДанныеПараметр.Ключ; + Значение = ДанныеПараметр.Значение; - КонецЦикла; + ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); + ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; + + ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); + Параметры.Добавить(ПараметрБенчмарка); + + КонецЦикла; + КонецЕсли; КонецПроцедуры From bad4059a173dc688aee201bed0304e3fbf3d5d7d Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 16:46:36 +0300 Subject: [PATCH 11/18] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B4=D0=B5=D1=81=D0=BA=D1=80=D0=B8=D0=BF?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BE=D0=B2.=20=D0=97=D0=B0=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=97=D0=B0=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=D0=A2=D0=B5=D0=BA=D1=81=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\321\200\320\272\320\276\320\262.os" | 48 ++++++++---- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 9 +-- ...21\200\320\260\321\202\320\276\321\200.os" | 2 +- ...0\260\321\202\320\276\321\200JsonBench.os" | 77 +++++++++++-------- ...0\260\321\202\320\276\321\200JsonBench.os" | 37 +++++++-- ...20\272\320\260\320\224\321\202\320\276.os" | 2 +- tests/fixtures/verified-report.json | 38 +++++---- 8 files changed, 134 insertions(+), 81 deletions(-) diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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 54308c4..5c370c3 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\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" @@ -1,9 +1,6 @@ #Использовать fluent -&Сериализуемое("Items") -&Тип("Массив") -&ДляКаждого -&Тип("ДескрипторБенчмарка") +&Несериализуемое Перем _ДескрипторыБенчмарков; // Массив из ДескрипторБенчмарка // Коллекция дескрипторов бенчмарков @@ -109,7 +106,12 @@ // Возвращаемое значение: // КоллекцияДескрипторовБенчмарков Функция ПолучитьЭталонные() Экспорт - Возврат Скопировать().Фильтровать("Бенчмарк -> Бенчмарк.ЭтоЭталон() = Истина"); + + Коллекция = Скопировать(); + Коллекция.Фильтровать("Бенчмарк -> Бенчмарк.ЭтоЭталон() = Истина"); + + Возврат Коллекция; + КонецФункции // Создает копию коллекции дескрипторов бенчмарков @@ -135,19 +137,14 @@ // и которая возвращает Булево, Истина если элемент проходит фильтр, // Ложь в противном случае // ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение -// -// Возвращаемое значение: -// ЭтотОбъект -Функция Фильтровать(ФункцияФильтрации, ДополнительныеПараметры = Неопределено) Экспорт +Процедура Фильтровать(ФункцияФильтрации, ДополнительныеПараметры = Неопределено) Экспорт _ДескрипторыБенчмарков = ПроцессорыКоллекций .ИзКоллекции(_ДескрипторыБенчмарков) .Фильтровать(ФункцияФильтрации, ДополнительныеПараметры) .ВМассив(); - Возврат ЭтотОбъект; - -КонецФункции +КонецПроцедуры // Читает дескрипторы бенчмарков из класса // @@ -164,4 +161,29 @@ // Массив из ДескрипторБенчмарка Функция ВМассив() Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(_ДескрипторыБенчмарков)); -КонецФункции \ 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\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 a051b14..d0c9e3c 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" @@ -1135,7 +1135,7 @@ КонецПроцедуры &ПослеДесериализации -Процедура ПослеДесериализации(ПрочитанныеСвойства) Экспорт +Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт ДесериализоватьОбработчики(ПрочитанныеСвойства); ДесериализоватьЭкспортеры(ПрочитанныеСвойства); 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 73e89b2..4240ff3 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -20,8 +20,6 @@ Процедура ЗаписатьВJson(Дескрипторы, Конфигурация, ИмяФайла) Экспорт _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); - - ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); Сериализатор = Новый СериализаторJsonBench(); @@ -29,10 +27,9 @@ Настройки.ДескрипторыБенчмарков = Дескрипторы; Настройки.Конфигурация = Конфигурация; - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписьJSON.ЗаписатьБезОбработки(Сериализатор.Сериализовать(Настройки)); - ЗаписьJSON.Закрыть(); + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, "UTF-8"); + ЗаписьТекста.Записать(Сериализатор.Сериализовать(Настройки)); + ЗаписьТекста.Закрыть(); _Лог.Отладка("Завершение формирования файла: %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\277\320\260\321\200\320\260\321\202\320\276\321\200.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" index 7c76283..9c14d01 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" @@ -77,7 +77,7 @@ Возврат Ложь; КонецЕсли; - Если Не Совпадают(Структура1[Ключ], Структура2[КлючЗначение.Ключ]) Тогда + Если Не Совпадают(Структура1[Ключ], Структура2[Ключ]) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; diff --git "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" index 36643d1..0d8fc96 100644 --- "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -93,15 +93,11 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов = Неопределено, - ДесериализуемыеКлючи = Неопределено) +Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, + ТипОбъекта, ТипЭлементов = Неопределено, ДесериализуемыеКлючи = Неопределено) Экспорт Если Конвертеры[ТипОбъекта] <> Неопределено Тогда - Возврат Конвертеры[ТипОбъекта].Десериализовать(ДесериализованныйОбъект, ЭтотОбъект); + Возврат Конвертеры[ТипОбъекта].ПреобразоватьОбъектДесериализации(ЭтотОбъект, ДесериализованныйОбъект); ИначеЕсли ЭтоПримитивныйТип(ТипОбъекта) Тогда Возврат ПреобразоватьПримитивныйТип(ДесериализованныйОбъект, ТипОбъекта); ИначеЕсли ТипОбъекта = Тип("Массив") Тогда @@ -122,6 +118,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ЭтоПримитивныйТип(ТипОбъекта) Возврат ПримитивныеТипы.Содержит(ТипОбъекта); КонецФункции @@ -163,7 +163,7 @@ Для Каждого ЗначенияКолонок Из Объект Цикл - Если Не (ТипЗнч(ЗначенияКолонок) = Тип("Структура") Или ТипЗнч(ЗначенияКолонок) = Тип("Соответствие")) Тогда + Если Не ЭтоСтруктураИлиСоответствие(ЗначенияКолонок) Тогда Продолжить; КонецЕсли; @@ -220,38 +220,42 @@ СвойстваПоИменамПолей.Вставить(ИмяСвойства, Свойство); КонецЦикла; - Для Каждого КлючИЗначение Из Объект Цикл + Если ЭтоСтруктураИлиСоответствие(Объект) Тогда + + Для Каждого КлючИЗначение Из Объект Цикл - Свойство = СвойстваПоИменамПолей[КлючИЗначение.Ключ]; - Если Свойство = Неопределено Тогда - Продолжить; - КонецЕсли; + Свойство = СвойстваПоИменамПолей[КлючИЗначение.Ключ]; + Если Свойство = Неопределено Тогда + Продолжить; + КонецЕсли; - ИмяСвойства = Свойство.Имя; - ЗначениеСвойства = КлючИЗначение.Значение; + ИмяСвойства = Свойство.Имя; + ЗначениеСвойства = КлючИЗначение.Значение; - ТипыСвойства = ПолучитьТипыСвойства(Свойство, ЗначениеСвойства); - ТипСвойства = ТипыСвойства.БазовыйТип; - ТипЭлементов = ТипыСвойства.ТипЭлементов; + ТипыСвойства = ПолучитьТипыСвойства(Свойство, ЗначениеСвойства); + ТипСвойства = ТипыСвойства.БазовыйТип; + ТипЭлементов = ТипыСвойства.ТипЭлементов; - ДесериализуемыеКлючи = ПолучитьДесериализуемыеКлючи(Свойство); - ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, - ТипСвойства, - ТипЭлементов, - ДесериализуемыеКлючи); + ДесериализуемыеКлючи = ПолучитьДесериализуемыеКлючи(Свойство); + ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, + ТипСвойства, + ТипЭлементов, + ДесериализуемыеКлючи); - Если ЗначениеСвойства = Неопределено Тогда - Продолжить; - КонецЕсли; + Если ЗначениеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; - Если ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда - Лог.Ошибка("Тип свойства '%1' не соответствует ожидаемому типу '%2'", ТипЗнч(ЗначениеСвойства), ТипСвойства); - Продолжить; - КонецЕсли; + Если ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда + Лог.Ошибка("Тип свойства '%1' не соответствует ожидаемому типу '%2'", ТипЗнч(ЗначениеСвойства), ТипСвойства); + Продолжить; + КонецЕсли; - Рефлектор.УстановитьСвойство(Результат, ИмяСвойства, ЗначениеСвойства); - - КонецЦикла; + Рефлектор.УстановитьСвойство(Результат, ИмяСвойства, ЗначениеСвойства); + + КонецЦикла; + + КонецЕсли; ВызватьМетодПослеДесериализации(Результат, Объект); @@ -333,6 +337,9 @@ ПараметрыМетода = Новый Массив(); Если СвойстваМетода.КоличествоПараметров = 1 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ИначеЕсли СвойстваМетода.КоличествоПараметров = 2 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); ПараметрыМетода.Добавить(ПрочитанныеСвойства); КонецЕсли; @@ -342,4 +349,8 @@ КонецПроцедуры +Функция ЭтоСтруктураИлиСоответствие(Значение) + Возврат ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Соответствие"); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" index c61dcb1..7bed787 100644 --- "a/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" +++ "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" @@ -87,7 +87,7 @@ ТипОбъекта = ТипЗнч(Объект); Если Конвертеры[ТипОбъекта] <> Неопределено Тогда - Результат = Конвертеры[ТипОбъекта].Сериализовать(Объект, ЭтотОбъект); + Результат = Конвертеры[ТипОбъекта].ПреобразоватьОбъектСериализации(ЭтотОбъект, Объект); ИначеЕсли ТипОбъекта = Тип("Массив") Тогда Результат = ПреобразоватьМассив(Объект); ИначеЕсли ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда @@ -194,15 +194,19 @@ Результат = Новый Соответствие(); - ВызватьМетодПередСериализацией(Объект); - ПрочитатьСериализуемыеПоля(Объект, Результат); - ПрочитатьДополнительныеПоля(Объект, Результат); + СтандартнаяОбработка = Истина; + ВызватьМетодПередСериализацией(Объект, Результат, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + ПрочитатьСериализуемыеПоля(Объект, Результат); + ПрочитатьДополнительныеПоля(Объект, Результат); + КонецЕсли; Возврат Результат; КонецФункции -Процедура ВызватьМетодПередСериализацией(Объект) +Процедура ВызватьМетодПередСериализацией(Объект, Результат, СтандартнаяОбработка) ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Объект)); @@ -213,7 +217,28 @@ Продолжить; КонецЕсли; - Рефлектор.ВызватьМетод(Объект, СвойстваМетода.Имя); + ПараметрыМетода = Новый Массив(); + + Если СвойстваМетода.КоличествоПараметров = 1 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ИначеЕсли СвойстваМетода.КоличествоПараметров = 2 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ПараметрыМетода.Добавить(Результат); + ИначеЕсли СвойстваМетода.КоличествоПараметров = 3 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ПараметрыМетода.Добавить(Результат); + ПараметрыМетода.Добавить(СтандартнаяОбработка); + КонецЕсли; + + Рефлектор.ВызватьМетод(Объект, СвойстваМетода.Имя, ПараметрыМетода); + + Если СвойстваМетода.КоличествоПараметров >= 2 Тогда + Результат = ПараметрыМетода[1]; + КонецЕсли; + + Если СвойстваМетода.КоличествоПараметров >= 3 Тогда + СтандартнаяОбработка = ПараметрыМетода[2]; + КонецЕсли; КонецЦикла; diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" index 260aa53..e18d1e5 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" @@ -66,7 +66,7 @@ КонецПроцедуры &ПослеДесериализации -Процедура ПослеДесериализации(ПрочитанныеСвойства) Экспорт +Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт ДесериализоватьПараметры(ПрочитанныеСвойства); diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index 07127cf..8f33b2d 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -33,26 +33,24 @@ "ЭкспортерРезультатовБенчмарковВJson" ] }, - "BenchmarkDescriptors": { - "Items": [ - { - "Type": "ДваБенчмаркаИПоле", - "Method": "БенчмаркПервый", - "Baseline": false, - "Category": "", - "ParameterSets": [], - "ParameterSources": [] - }, - { - "Type": "ДваБенчмаркаИПоле", - "Method": "БенчмаркВторой", - "Baseline": false, - "Category": "", - "ParameterSets": [], - "ParameterSources": [] - } - ] - }, + "BenchmarkDescriptors": [ + { + "Type": "ДваБенчмаркаИПоле", + "Method": "БенчмаркПервый", + "Baseline": false, + "Category": "", + "ParameterSets": [], + "ParameterSources": [] + }, + { + "Type": "ДваБенчмаркаИПоле", + "Method": "БенчмаркВторой", + "Baseline": false, + "Category": "", + "ParameterSets": [], + "ParameterSources": [] + } + ], "Runs": [ { "Type": "ДваБенчмаркаИПоле", From dbff2890f2bfb3e6a1171b937a5f51b6b60c9f35 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 17:00:55 +0300 Subject: [PATCH 12/18] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aba7b2e..ed9c1e5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,4 +15,5 @@ jobs: with: oscript_version: ${{ matrix.oscript_version }} dotnet_version: "8.x.x" - build_package: true \ No newline at end of file + build_package: true + locale: "C" \ No newline at end of file From 192ab5b594105803ec530fc1b70d7a6d393869b7 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 17:02:49 +0300 Subject: [PATCH 13/18] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ed9c1e5..8e87019 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,4 +16,4 @@ jobs: oscript_version: ${{ matrix.oscript_version }} dotnet_version: "8.x.x" build_package: true - locale: "C" \ No newline at end of file + locale: "en_US" \ No newline at end of file From 12c4f0309c79868720580cb058e9df101500cf7d Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 17:12:44 +0300 Subject: [PATCH 14/18] =?UTF-8?q?=D0=9B=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B2=D0=BE=D1=80=D0=BA=D1=84=D0=BB=D0=BE=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 1 + .github/workflows/sonar.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59f1e0f..4abd088 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,5 +12,6 @@ jobs: with: package_mask: "benchmark-*.ospx" dotnet_version: "8.x.x" + locale: "en_US" secrets: PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 1c4d7bf..bdb75ea 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -13,5 +13,6 @@ jobs: github_repository: Stivo182/BenchmarkOneScript dotnet_version: "8.x.x" build_package: true + locale: "en_US" secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file From 285024fb900c0d61377ac2f6d749cddc1f94b334 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 17:30:42 +0300 Subject: [PATCH 15/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bsl-language-server.json | 2 +- ...\207\320\274\320\260\321\200\320\272\320\276\320\262.os" | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.bsl-language-server.json b/.bsl-language-server.json index 50e9d11..c453449 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,7 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Десериализации,Несериализуемых,Валидатор,Валидировать,Алиас" + "userWordsToIgnore": "дто,бенчмарк,бенчмарки,бенчмарков,бенчмарками,бенчмарка,бенчмарку,прогревочных,десериализатор,несериализуемое,десериализованный,сериализуемое,сериализуемый,запускатель,распарсить,регулярка,воркер,сериализовать,сериализации,сериализуемые,сериализацией,сериализуется,сериализацию,сериализуемым,сериализован,десериализации,несериализуемых,валидатор,валидировать,алиас" } } } diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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 fc4fe36..31cfcdd 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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" @@ -135,9 +135,7 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции +#Область Сериализация &ПослеДесериализации Процедура ПослеДесериализации() Экспорт @@ -160,4 +158,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file From b260bbb1e89767d5435be8e516736c549b2b628f Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 23:18:35 +0300 Subject: [PATCH 16/18] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bsl-language-server.json | 6 +- .../ObjectExtension.cs | 28 ----- ...20\260\321\200\320\272\320\276\320\262.os" | 4 +- ...20\274\320\260\321\200\320\272\320\260.os" | 32 +++++- ...20\260\321\200\320\272\320\276\320\262.os" | 14 +-- ...20\260\321\200\320\272\320\276\320\262.os" | 10 +- ...20\260\321\200\320\272\320\276\320\262.os" | 9 +- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- ...20\272\320\270\320\275\320\263\320\260.os" | 83 ++++++++------ ...20\272\320\260\320\224\321\202\320\276.os" | 2 +- tests/fixtures/verified-report.html | 49 ++++++++- tests/fixtures/verified-report.json | 39 +++++-- tests/fixtures/verified-report.md | 8 +- ...20\277\320\276\321\200\321\202\320\260.os" | 24 ++++ ...20\230\320\237\320\276\320\273\320\265.os" | 10 -- ...20\260\321\200\320\272\320\276\320\262.os" | 94 +--------------- ...21\202\320\265\321\200\320\276\320\262.os" | 103 ++++++++++++++++++ 17 files changed, 304 insertions(+), 213 deletions(-) delete mode 100644 src/BenchmarkOneScript.Extensions/ObjectExtension.cs create mode 100644 "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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" delete mode 100644 "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" diff --git a/.bsl-language-server.json b/.bsl-language-server.json index c453449..8eda71d 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,11 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "дто,бенчмарк,бенчмарки,бенчмарков,бенчмарками,бенчмарка,бенчмарку,прогревочных,десериализатор,несериализуемое,десериализованный,сериализуемое,сериализуемый,запускатель,распарсить,регулярка,воркер,сериализовать,сериализации,сериализуемые,сериализацией,сериализуется,сериализацию,сериализуемым,сериализован,десериализации,несериализуемых,валидатор,валидировать,алиас" + "userWordsToIgnore": "Дто,Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарками,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Десериализованный,Десериализуемые,Сериализуемый,Сериализуемое,Несериализуемое,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Десериализатор,Сериализовать,Сериализации,Сериализуемые,Сериализацией,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Десериализации,Несериализуемых,Валидатор,Валидировать,Алиас" + }, + "LatinAndCyrillicSymbolInWord": false, + "MagicNumber": { + "authorizedNumbers": "-1,0,1,2" } } } diff --git a/src/BenchmarkOneScript.Extensions/ObjectExtension.cs b/src/BenchmarkOneScript.Extensions/ObjectExtension.cs deleted file mode 100644 index 9bbca9d..0000000 --- a/src/BenchmarkOneScript.Extensions/ObjectExtension.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if NET6_0_OR_GREATER -using OneScript.Contexts; -#endif - -using ScriptEngine.Machine; -using ScriptEngine.Machine.Contexts; - -namespace BenchmarkOneScript.Extensions; - -[ContextClass("РасширениеОбъекта")] -public class ObjectExtension : AutoContext -{ - [ContextProperty("ХешКод", "HashCode")] - public string HashCode => _Object.GetHashCode().ToString("X"); - - IValue _Object; - - public ObjectExtension(IValue obj) - { - _Object = obj; - } - - [ScriptConstructor] - public static ObjectExtension Constructor(IValue obj) - { - return new ObjectExtension(obj); - } -} \ 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\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 523d3b8..cedb81a 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" @@ -154,7 +154,7 @@ ШаблонОшибки = "Значение параметра <%1> должно быть сериализуемым для определения эталонов между разными версиями OneScript"; - Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда + Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Параметр.Значение) Тогда ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя); Если _СписокОшибок.Найти(ТекстОшибки) = Неопределено Тогда _СписокОшибок.Добавить(ТекстОшибки); @@ -173,7 +173,7 @@ КонецЕсли; Для Каждого ОбработчикСобытия Из _Конфигурация.ОбработчикиСобытий() Цикл - Если ТипЗнч(ОбработчикСобытия.Обработчик) = Тип("Делегат") Тогда + Если ТипЗнч(ОбработчикСобытия.Обработчик) <> Тип("Строка") Тогда _СписокОшибок.Добавить(ТекстОшибки); Возврат; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index e17ab6b..e5acb1a 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -1,9 +1,6 @@ #Использовать asserts -&Сериализуемое("Items") -&Тип("Массив") -&ДляКаждого -&Тип("ПараметрБенчмарка") +&Несериализуемое Перем _Параметры; // Массив из ПараметрБенчмарка Процедура ПриСозданииОбъекта() @@ -48,4 +45,29 @@ // Массив из ПараметрБенчмарка Функция ВМассив() Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(_Параметры)); -КонецФункции \ 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\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 166d34d..bc80bdd 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" @@ -414,7 +414,7 @@ Для Каждого Колонка Из _Отчет.Колонки Цикл ИмяПараметра = КолонкаОтчетаБенчмарковПараметр.ИмяПараметра(Колонка); - Если ЗначениеЗаполнено(ИмяПараметра) И КолонкаСодержитТолькоСериализуемыеЗначения(Колонка.Имя) Тогда + Если ЗначениеЗаполнено(ИмяПараметра) Тогда ДобавитьСортировку(Сортировка, Колонка.Имя); КонецЕсли; КонецЦикла; @@ -429,18 +429,6 @@ КонецПроцедуры -Функция КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки) - - Для Каждого Строка Из _Отчет.Таблица Цикл - Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Строка[ИмяКолонки]) Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; - -КонецФункции - Функция ИспользуетсяЭталон() ЕстьЭталоннаяВерсия = _Конфигурация.ВерсииИсполняющейСреды().Найти(Истина, "ЭтоЭталон") <> Неопределено; 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 4240ff3..6a95be4 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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,6 +1,5 @@ #Использовать logos #Использовать "../../dto" -#Использовать "../../custom-jason" Перем _Лог; // Лог @@ -21,14 +20,12 @@ _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); - Сериализатор = Новый СериализаторJsonBench(); - Настройки = Новый НастройкиБенчмарковДто(); Настройки.ДескрипторыБенчмарков = Дескрипторы; Настройки.Конфигурация = Конфигурация; ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, "UTF-8"); - ЗаписьТекста.Записать(Сериализатор.Сериализовать(Настройки)); + ЗаписьТекста.Записать(СериализацияОбъектовБенчмаркинга.ВJson(Настройки)); ЗаписьТекста.Закрыть(); _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); @@ -47,11 +44,10 @@ _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, "UTF-8"); - Строка = ЧтениеТекста.Прочитать(); + Json = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); - Десериализатор = Новый ДесериализаторJsonBench(); - Настройки = Десериализатор.Десериализовать(Строка, Тип("НастройкиБенчмарковДто")); + Настройки = СериализацияОбъектовБенчмаркинга.ИзJson(Json, Тип("НастройкиБенчмарковДто")); _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); 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\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/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\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 b33abbd..2d444ae 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\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/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\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" @@ -1,5 +1,4 @@ #Использовать logos -#Использовать "../../custom-jason" Перем _Лог; // Лог @@ -23,11 +22,8 @@ _Лог.Отладка("Начало сериализации результатов в JSON-файл: %1", ПолноеИмяФайла); - Сериализатор = Новый СериализаторJsonBench(); - Json = Сериализатор.Сериализовать(РезультатыБенчмарков); - ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, "UTF-8"); - ЗаписьТекста.Записать(Json); + ЗаписьТекста.Записать(СериализацияОбъектовБенчмаркинга.ВJson(РезультатыБенчмарков)); ЗаписьТекста.Закрыть(); _Лог.Отладка("Сериализация в JSON-файл завершена: %1", ПолноеИмяФайла); @@ -49,8 +45,7 @@ Json = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); - Десериализатор = Новый ДесериализаторJsonBench(); - РезультатыБенчмарков = Десериализатор.Десериализовать(Json, Тип("РезультатыБенчмарков")); + РезультатыБенчмарков = СериализацияОбъектовБенчмаркинга.ИзJson(Json, Тип("РезультатыБенчмарков")); _Лог.Отладка("Десериализация из JSON-файла завершена: %1", ПолноеИмяФайла); diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\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\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 69f0eed..b7804c7 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\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\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -11,7 +11,7 @@ ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда Представление = ПредставлениеБулево(Значение); Иначе - Представление = Строка(СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Значение)); + Представление = Строка(Значение); КонецЕсли; Если Не ЕдиницаИзмерения = Неопределено И ДополнитьЕдиницейИзмерения Тогда diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" index e50423e..5a6d866 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" @@ -1,64 +1,85 @@ -Перем _СериализуемыеТипы; // Неопределено, Соответствие +#Использовать "../../custom-jason" + +Перем _ПримитивныеТипы; // МножествоСоответствие, Неопределено #Область ПрограммныйИнтерфейс -// Подготавливает значение для безопасной сериализации или вывода. +// Сериализует переданное значение в строку JSON. +// +// Параметры: +// Значение - Произвольный - Значение, которое требуется сериализовать в JSON. +// +// Возвращаемое значение: +// Строка - Строка JSON +Функция ВJson(Значение) Экспорт + + Сериализатор = Новый СериализаторJsonBench(); + Возврат Сериализатор.Сериализовать(Значение); + +КонецФункции + +// Десериализует строку JSON в объект указанного типа. +// +// Параметры: +// Json - Строка - Строка JSON. +// ТипОбъекта - Тип - Тип объекта, в который необходимо выполнить десериализацию. +// +// Возвращаемое значение: +// Произвольный - Экземпляр объекта указанного типа. +Функция ИзJson(Json, ТипОбъекта) Экспорт + + Десериализатор = Новый ДесериализаторJsonBench(); + Возврат Десериализатор.Десериализовать(Json, ТипОбъекта); + +КонецФункции + +// Подготавливает значение для безопасного вывода. // // Параметры: // Значение - Произвольный - Любое значение для обработки // // Возвращаемое значение: -// Произвольный - Обработанное значение по правилам: -// 1. Для сериализуемых типов (число, строка, булево и др.) - исходное значение -// 2. Для несериализуемых типов: -// а) Если строковое представление совпадает с именем типа - "Тип@ХешКод" -// б) Иначе - обычное строковое представление -Функция ПодготовитьЗначение(Значение) Экспорт - - Если ЗначениеСериализуется(Значение) Тогда - Возврат Значение; - КонецЕсли; +// Произвольный +Функция ПривестиКПримитиву(Значение) Экспорт - Представление = Строка(Значение); - Тип = ТипЗнч(Значение); - Если Представление = Строка(Тип) Тогда - Представление = СтрШаблон("%1@%2", Тип, Новый РасширениеОбъекта(Значение).ХешКод); + Если ЭтоПримитив(Значение) Тогда + Возврат Значение; КонецЕсли; - Возврат Представление; + Возврат Строка(Значение); КонецФункции -// Проверяет, относится ли значение к сериализуемым типам данных +// Проверяет, относится ли значение к примитивным типам данных. // // Параметры: // Значение - Произвольный - Проверяемое значение // // Возвращаемое значение: // Булево -Функция ЗначениеСериализуется(Значение) Экспорт - Возврат СериализуемыеТипы()[ТипЗнч(Значение)] = Истина; +Функция ЭтоПримитив(Значение) Экспорт + Возврат ПримитивныеТипы().Содержит(ТипЗнч(Значение)); КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции -Функция СериализуемыеТипы() +Функция ПримитивныеТипы() - Если Не _СериализуемыеТипы = Неопределено Тогда - Возврат _СериализуемыеТипы; + Если Не _ПримитивныеТипы = Неопределено Тогда + Возврат _ПримитивныеТипы; КонецЕсли; - _СериализуемыеТипы = Новый Соответствие(); - _СериализуемыеТипы.Вставить(Тип("Число"), Истина); - _СериализуемыеТипы.Вставить(Тип("Строка"), Истина); - _СериализуемыеТипы.Вставить(Тип("Булево"), Истина); - _СериализуемыеТипы.Вставить(Тип("Дата"), Истина); - _СериализуемыеТипы.Вставить(Тип("Неопределено"), Истина); - _СериализуемыеТипы.Вставить(Тип("Null"), Истина); + _ПримитивныеТипы = Новый МножествоСоответствие(); + _ПримитивныеТипы.Добавить(Тип("Число")); + _ПримитивныеТипы.Добавить(Тип("Строка")); + _ПримитивныеТипы.Добавить(Тип("Булево")); + _ПримитивныеТипы.Добавить(Тип("Дата")); + _ПримитивныеТипы.Добавить(Тип("Неопределено")); + _ПримитивныеТипы.Добавить(Тип("Null")); - Возврат _СериализуемыеТипы; + Возврат _ПримитивныеТипы; КонецФункции diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" index e18d1e5..53962e7 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" @@ -78,7 +78,7 @@ ПодготовленныеПараметры = Новый Структура(); Для Каждого Параметр Из Параметры Цикл - Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); + Значение = СериализацияОбъектовБенчмаркинга.ПривестиКПримитиву(Параметр.Значение); ПодготовленныеПараметры.Вставить(Параметр.Имя, Значение); КонецЦикла; diff --git a/tests/fixtures/verified-report.html b/tests/fixtures/verified-report.html index 5a9de89..7fb22c4 100644 --- a/tests/fixtures/verified-report.html +++ b/tests/fixtures/verified-report.html @@ -23,6 +23,15 @@ Значение +П1 + + +П2 + + +П + + Mean @@ -32,6 +41,12 @@ StdDev +Min + + +Max + + Op/s @@ -39,12 +54,21 @@ -БенчмаркПервый +БенчмаркВторой 100 + + + + + + +01.01.2000 0:00:00 + + 1.0 ms @@ -54,15 +78,30 @@ 0.0 ns +1.0 ms + + +1.0 ms + + 1,000 -БенчмаркВторой +БенчмаркПервый 100 + + +1 + + +Тест + + + 1.0 ms @@ -74,6 +113,12 @@ 0.0 ns +1.0 ms + + +1.0 ms + + 1,000 diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index 8f33b2d..1db0d2d 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -26,7 +26,10 @@ } ], "ParameterSources": [], - "Columns": [], + "Columns": [ + "Мин", + "Макс" + ], "RuntimeVersions": [], "Handlers": [], "Exporters": [ @@ -35,25 +38,40 @@ }, "BenchmarkDescriptors": [ { - "Type": "ДваБенчмаркаИПоле", + "Type": "БенчмаркиДляЭкспорта", "Method": "БенчмаркПервый", "Baseline": false, "Category": "", - "ParameterSets": [], + "ParameterSets": [ + [ + { + "Name": "П1", + "Value": 1, + "IsMethodParameter": true + }, + { + "Name": "П2", + "Value": "Тест", + "IsMethodParameter": true + } + ] + ], "ParameterSources": [] }, { - "Type": "ДваБенчмаркаИПоле", + "Type": "БенчмаркиДляЭкспорта", "Method": "БенчмаркВторой", "Baseline": false, "Category": "", "ParameterSets": [], - "ParameterSources": [] + "ParameterSources": [ + "ПараметрыДляВторого" + ] } ], "Runs": [ { - "Type": "ДваБенчмаркаИПоле", + "Type": "БенчмаркиДляЭкспорта", "Method": "БенчмаркПервый", "Category": "", "Baseline": false, @@ -191,11 +209,13 @@ } ], "Parameters": { - "Значение": 100 + "Значение": 100, + "П1": 1, + "П2": "Тест" } }, { - "Type": "ДваБенчмаркаИПоле", + "Type": "БенчмаркиДляЭкспорта", "Method": "БенчмаркВторой", "Category": "", "Baseline": false, @@ -333,7 +353,8 @@ } ], "Parameters": { - "Значение": 100 + "Значение": 100, + "П": "2000-01-01T00:00:00" } } ] diff --git a/tests/fixtures/verified-report.md b/tests/fixtures/verified-report.md index 046dc30..4a972d5 100644 --- a/tests/fixtures/verified-report.md +++ b/tests/fixtures/verified-report.md @@ -1,7 +1,7 @@ BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores -| Method | Значение | Mean | StdErr | StdDev | Op/s | -|----------------|---------:|-------:|-------:|-------:|------:| -| БенчмаркПервый | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | -| БенчмаркВторой | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | +| Method | Значение | П1 | П2 | П | Mean | StdErr | StdDev | Min | Max | Op/s | +|----------------|---------:|----|------|--------------------|-------:|-------:|-------:|-------:|-------:|------:| +| БенчмаркВторой | 100 | | | 01.01.2000 0:00:00 | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | +| БенчмаркПервый | 100 | 1 | Тест | | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | 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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" new file mode 100644 index 0000000..77154a1 --- /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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" @@ -0,0 +1,24 @@ +&Параметры(100) +Перем Значение Экспорт; + +&КолонкаМин +&КолонкаМакс +Процедура ПриСозданииОбъекта() + +КонецПроцедуры + +&Бенчмарк +&Параметры(1, "Тест") +Процедура БенчмаркПервый(П1, П2) Экспорт +КонецПроцедуры + +&Бенчмарк +&ИсточникПараметров("ПараметрыДляВторого") +Процедура БенчмаркВторой(П) Экспорт +КонецПроцедуры + +Функция ПараметрыДляВторого() Экспорт + М = Новый Массив(); + М.Добавить(Дата(2000, 1, 1)); + Возврат М; +КонецФункции \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" deleted file mode 100644 index 2d39e9a..0000000 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" +++ /dev/null @@ -1,10 +0,0 @@ -&Параметры(100) -Перем Значение Экспорт; - -&Бенчмарк -Процедура БенчмаркПервый() Экспорт -КонецПроцедуры - -&Бенчмарк -Процедура БенчмаркВторой() Экспорт -КонецПроцедуры \ 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 17de205..1734d95 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" @@ -500,96 +500,6 @@ КонецПроцедуры -&Тест -Процедура Тест_ЭкспортВMarkdown() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.md", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Markdown); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.md"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - -&Тест -Процедура Тест_ЭкспортВJson() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.json", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Конфигурация - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) - .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) - .УстановитьКоличествоИтераций(10); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.json"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - -&Тест -Процедура Тест_ЭкспортВHtml() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.html", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.html"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - &Тест Процедура Тест_ДолженПроверитьПередачуКонфигурацииПриЗапускеИзКаталога() Экспорт @@ -747,10 +657,10 @@ Ожидаем.Что(Запуски, "Количество запусков").ИмеетДлину(8); Ожидаем.Что(Запуски[0].ДескрипторБенчмарка, "Должен быть создан один объект дескриптора").Равно(Запуски[1].ДескрипторБенчмарка); Ожидаем.Что(Запуски[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); - Ожидаем.Что(Запуски[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@"); + Ожидаем.Что(Запуски[0].Параметры[0].Значение, "Параметр 1.1").Равно("ТаблицаЗначений"); Ожидаем.Что(Запуски[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); Ожидаем.Что(Запуски[0].Параметры[2].Значение, "Параметр 1.3").Равно(4); - Ожидаем.Что(Запуски[1].Параметры[0].Значение, "Параметр 2.1").Содержит("БенчмаркСПараметрамиМетодаИПоля@"); + Ожидаем.Что(Запуски[1].Параметры[0].Значение, "Параметр 2.1").Равно("БенчмаркСПараметрамиМетодаИПоля"); Ожидаем.Что(Запуски[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101'); Ожидаем.Что(Запуски[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено); Ожидаем.Что(Запуски[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь(); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" new file mode 100644 index 0000000..e72057d --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" @@ -0,0 +1,103 @@ +#Использовать asserts +#Использовать delegate +#Использовать fs +#Использовать "helpers" + +&После +Процедура ПослеЗапускаТеста() Экспорт + + КаталогАртефактов = ".\BenchmarkArtifacts"; + + ФС.УдалитьФайлы(КаталогАртефактов); + +КонецПроцедуры + +&Тест +Процедура Тест_ЭкспортВMarkdown() Экспорт + + Тип = Тип("БенчмаркиДляЭкспорта"); + ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); + ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.md", "UTF-8"); + ТекстЭталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); + Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Markdown); + + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "БенчмаркиДляЭкспорта-report.md"); + + Бенчмаркинг.Запустить(Тип, Конфигурация); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Ожидаем.Что(Текст).Равно(ТекстЭталон); + +КонецПроцедуры + +&Тест +Процедура Тест_ЭкспортВJson() Экспорт + + Тип = Тип("БенчмаркиДляЭкспорта"); + ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); + ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.json", "UTF-8"); + ТекстЭталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) + .УстановитьКоличествоИтераций(10); + + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "БенчмаркиДляЭкспорта-report.json"); + + Бенчмаркинг.Запустить(Тип, Конфигурация); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Ожидаем.Что(Текст).Равно(ТекстЭталон); + +КонецПроцедуры + +&Тест +Процедура Тест_ЭкспортВHtml() Экспорт + + Тип = Тип("БенчмаркиДляЭкспорта"); + ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); + ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.html", "UTF-8"); + ТекстЭталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); + Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html); + + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "БенчмаркиДляЭкспорта-report.html"); + + Бенчмаркинг.Запустить(Тип, Конфигурация); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Ожидаем.Что(Текст).Равно(ТекстЭталон); + +КонецПроцедуры \ No newline at end of file From 7c8d241213e80d744ec679e17b711a8f2248bab6 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 23:33:56 +0300 Subject: [PATCH 17/18] =?UTF-8?q?=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D1=82=D0=B8=D0=BF=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BE=D1=80=D1=82=D0=B8=D1=80=D1=83=D0=B5=D0=BC=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...274\320\260\321\200\320\272\320\276\320\262.os" | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 bc80bdd..0620160 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" @@ -414,13 +414,25 @@ Для Каждого Колонка Из _Отчет.Колонки Цикл ИмяПараметра = КолонкаОтчетаБенчмарковПараметр.ИмяПараметра(Колонка); - Если ЗначениеЗаполнено(ИмяПараметра) Тогда + Если ЗначениеЗаполнено(ИмяПараметра) И КолонкаСодержитТолькоПримитивы(Колонка.Имя) Тогда ДобавитьСортировку(Сортировка, Колонка.Имя); КонецЕсли; КонецЦикла; КонецПроцедуры +Функция КолонкаСодержитТолькоПримитивы(ИмяКолонки) + + Для Каждого Строка Из _Отчет.Таблица Цикл + Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Строка[ИмяКолонки]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + Процедура ДобавитьСортировку(Сортировка, ИмяКолонки, Направление = "") Если Не _Отчет.Таблица.Колонки.Найти(ИмяКолонки) = Неопределено Тогда From 9ed0eb34405d8f473ebf29a6aaa5d89bf38913c1 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 29 Jan 2026 23:49:38 +0300 Subject: [PATCH 18/18] =?UTF-8?q?=D0=98=D0=B7-=D0=B7=D0=B0=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=BB=D0=B8=20=D0=B4=D0=B0=D1=82=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=BE=D1=85=D0=BE=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D1=83=D0=B5=D1=82=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\276\321\200\321\202\320\260-report.html" | 128 ++++++++++++++++++ ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- tests/fixtures/verified-report.html | 2 +- tests/fixtures/verified-report.json | 2 +- tests/fixtures/verified-report.md | 8 +- ...20\277\320\276\321\200\321\202\320\260.os" | 2 +- ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- 7 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 "BenchmarkArtifacts/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260-report.html" diff --git "a/BenchmarkArtifacts/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260-report.html" "b/BenchmarkArtifacts/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260-report.html" new file mode 100644 index 0000000..c7857be --- /dev/null +++ "b/BenchmarkArtifacts/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260-report.html" @@ -0,0 +1,128 @@ + + + + + + + + +
BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock
+MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method + +Значение + +П1 + +П2 + +П + +Mean + +StdErr + +StdDev + +Min + +Max + +Op/s +
+БенчмаркВторой + +100 + + + + + +Массив + +1.0 ms + +0.0 ns + +0.0 ns + +1.0 ms + +1.0 ms + +1,000 +
+БенчмаркПервый + +100 + +1 + +Тест + + + +1.0 ms + +0.0 ns + +0.0 ns + +1.0 ms + +1.0 ms + +1,000 +
+ + \ 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\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 cedb81a..914bbb7 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" @@ -152,7 +152,7 @@ Процедура ПроверитьПараметрНаВозможностьСериализации(Параметр) ШаблонОшибки = - "Значение параметра <%1> должно быть сериализуемым для определения эталонов между разными версиями OneScript"; + "Значение параметра <%1> должно быть примитивным для определения эталонов между разными версиями OneScript"; Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Параметр.Значение) Тогда ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя); diff --git a/tests/fixtures/verified-report.html b/tests/fixtures/verified-report.html index 7fb22c4..c7857be 100644 --- a/tests/fixtures/verified-report.html +++ b/tests/fixtures/verified-report.html @@ -66,7 +66,7 @@ -01.01.2000 0:00:00 +Массив 1.0 ms diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index 1db0d2d..17b09ee 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -354,7 +354,7 @@ ], "Parameters": { "Значение": 100, - "П": "2000-01-01T00:00:00" + "П": "Массив" } } ] diff --git a/tests/fixtures/verified-report.md b/tests/fixtures/verified-report.md index 4a972d5..43879c1 100644 --- a/tests/fixtures/verified-report.md +++ b/tests/fixtures/verified-report.md @@ -1,7 +1,7 @@ BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores -| Method | Значение | П1 | П2 | П | Mean | StdErr | StdDev | Min | Max | Op/s | -|----------------|---------:|----|------|--------------------|-------:|-------:|-------:|-------:|-------:|------:| -| БенчмаркВторой | 100 | | | 01.01.2000 0:00:00 | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | -| БенчмаркПервый | 100 | 1 | Тест | | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | +| Method | Значение | П1 | П2 | П | Mean | StdErr | StdDev | Min | Max | Op/s | +|----------------|---------:|----|------|--------|-------:|-------:|-------:|-------:|-------:|------:| +| БенчмаркВторой | 100 | | | Массив | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | +| БенчмаркПервый | 100 | 1 | Тест | | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | 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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" index 77154a1..59bb2d9 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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" @@ -19,6 +19,6 @@ Функция ПараметрыДляВторого() Экспорт М = Новый Массив(); - М.Добавить(Дата(2000, 1, 1)); + М.Добавить(Новый Массив()); Возврат М; КонецФункции \ 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 1734d95..ad78651 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" @@ -556,7 +556,7 @@ .Что(Бенчмаркинг) .Метод("Запустить", ПараметрыМетода) .ВыбрасываетИсключение( - "Значение параметра <Значение> должно быть сериализуемым для определения эталонов между разными версиями OneScript" + "Значение параметра <Значение> должно быть примитивным для определения эталонов между разными версиями OneScript" ); КонецПроцедуры