diff --git "a/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\237\321\200\320\270\320\274\320\265\321\200.os" index 2689421..7b77dbb 100644 --- "a/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\237\321\200\320\270\320\274\320\265\321\200.os" +++ "b/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -1,3 +1,6 @@ +// BSLLS:MagicNumber-off +// BSLLS:CommentedCode-off + #Использовать benchmark #Использовать "../benchmarks" @@ -6,5 +9,7 @@ Конфигурация = Новый КонфигурацияБенчмарков(Тип); Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Мин); Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Макс); +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(33)); // 33-й процентиль +//Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль); // Процентили по умолчанию Бенчмаркинг.Запустить(Тип, Конфигурация); \ No newline at end of file diff --git "a/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260.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\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260.os" index ec9f303..37279f1 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\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260.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\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260.os" @@ -2,6 +2,7 @@ &КолонкаМакс &КолонкаНижнийКвартиль &КолонкаВерхнийКвартиль +&КолонкаПроцентиль Процедура ПриСозданииОбъекта() КонецПроцедуры 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" new file mode 100644 index 0000000..460530a --- /dev/null +++ "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" @@ -0,0 +1,145 @@ +#Использовать delegate +#Использовать fluent + +// Создает экземпляр колонки +// +// Параметры: +// Процентиль - Число +// +// Возвращаемое значение: +// КолонкаОтчетаБенчмарков +Функция Создать(Процентиль) Экспорт + + Колонка = Новый КолонкаОтчетаБенчмарков(ИмяКолонки(Процентиль)); + Колонка.Заголовок = "P" + Процентиль; + Колонка.Описание = СтрШаблон("%1-й процентиль", Процентиль); + Колонка.ЕдиницаИзмерения = ЕдиницыИзмеренийБенчмарков.Наносекунда; + Колонка.ЗначениеДелегат = Делегаты.Создать(ЭтотОбъект, "Значение"); + + Возврат Колонка; + +КонецФункции + +// Возвращает значение колонки +// +// Параметры: +// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// Колонка - КолонкаОтчетаБенчмарков +// +// Возвращаемое значение: +// Число +Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off + + Процентиль = ПроцентильПоКолонке(Колонка.Имя); + + Возврат СтрокаРезультата.Статистика.Квантиль(Процентиль / 100); + +КонецФункции + +// Создает экземпляр колонки по имении +// +// Параметры: +// ИмяКолонки - Строка, Массив из Строка - Имена колонок +// +// Возвращаемое значение: +// Массив из КолонкаОтчетаБенчмарков +Функция СоздатьПоИмени(ИмяКолонки) Экспорт + + Если ТипЗнч(ИмяКолонки) = Тип("Массив") Тогда + ИменаКолонок = ИмяКолонки; + Иначе + ИменаКолонок = Новый Массив(); + ИменаКолонок.Добавить(ИмяКолонки); + КонецЕсли; + + Процентили = Новый Массив(); + Для Каждого Имя Из ИменаКолонок Цикл + + Если Не ЭтоИмяКолонки(Имя) Тогда + Продолжить; + КонецЕсли; + + Если Имя = КолонкиОтчетаБенчмарков.Процентиль Тогда + Для Каждого Процентиль Из ПроцентилиПоУмолчанию() Цикл + Процентили.Добавить(Процентиль); + КонецЦикла; + Иначе + Процентиль = Сред(Имя, СтрДлина(Префикс() + 1)); + Процентили.Добавить(СтрокаВЧисло(Процентиль)); + КонецЕсли; + + КонецЦикла; + + Процентили = ПроцессорыКоллекций.ИзКоллекции(Процентили) + .Различные() + .Сортировать() + .ВМассив(); + + Колонки = Новый Массив(); + Для Каждого Процентиль Из Процентили Цикл + Колонки.Добавить(Создать(Процентиль)); + КонецЦикла; + + Возврат Колонки; + +КонецФункции + +// Имя колонки +// +// Параметры: +// Процентиль - Число, Неопределено +// +// Возвращаемое значение: +// Строка +Функция ИмяКолонки(Процентиль) Экспорт + Возврат Префикс() + Процентиль; +КонецФункции + +// Имя колонки является колонкой процентеля +// +// Параметры: +// ИмяКолонки - Строка +// +// Возвращаемое значение: +// Булево +Функция ЭтоИмяКолонки(ИмяКолонки) Экспорт + Возврат ИмяКолонки = КолонкиОтчетаБенчмарков.Процентиль Или СтрНачинаетсяС(ИмяКолонки, Префикс()); +КонецФункции + +// Процентили по умолчанию +// +// Возвращаемое значение: +// Массив из Число +// +// BSLLS:MagicNumber-off +Функция ПроцентилиПоУмолчанию() Экспорт + + Процентили = Новый Массив(); + Процентили.Добавить(0); + Процентили.Добавить(25); + Процентили.Добавить(50); + Процентили.Добавить(67); + Процентили.Добавить(80); + Процентили.Добавить(85); + Процентили.Добавить(90); + Процентили.Добавить(95); + Процентили.Добавить(100); + + Возврат Процентили; + +КонецФункции + +Функция ПроцентильПоКолонке(ИмяКолонки) + Возврат СтрокаВЧисло(СтрЗаменить(ИмяКолонки, Префикс(), "")); +КонецФункции + +Функция Префикс() + Возврат "Процентиль_"; +КонецФункции + +Функция СтрокаВЧисло(Строка) Экспорт + + ОписаниеТипа = Новый ОписаниеТипов("Число"); + Возврат ОписаниеТипа.ПривестиЗначение(Строка); + +КонецФункции \ 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 b3ada1b..27e3eae 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" @@ -425,7 +425,6 @@ КонецФункции - // Делегаты обработчиков по имени события // // Параметры: @@ -477,7 +476,7 @@ Функция ДобавитьКолонку(Колонка) Экспорт Если _Колонки.Найти(Колонка) = Неопределено Тогда - _Колонки.Добавить(КолонкиОтчетаБенчмарков[Колонка]); + _Колонки.Добавить(Колонка); КонецЕсли; Возврат ЭтотОбъект; 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 8374124..c55e222 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" @@ -50,12 +50,13 @@ ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСреднее()); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСтандартнаяОшибка()); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСтандартноеОтклонение()); + ДобавитьКолонкуКоэффициентОтношенияСреднего(); + ДобавитьКолонкуМин(); ДобавитьКолонкуНижнийКвартиль(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьМедиана()); ДобавитьКолонкуВерхнийКвартиль(); - ДобавитьКолонкуМин(); ДобавитьКолонкуМакс(); - ДобавитьКолонкуКоэффициентОтношенияСреднего(); + ДобавитьКолонкиПроцентилей(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьОперацийВСекунду()); ДобавитьКолонкуВыделяемаяПамять(); @@ -148,6 +149,14 @@ КонецПроцедуры +Процедура ДобавитьКолонкиПроцентилей() + + Для Каждого Колонка Из КолонкаОтчетаБенчмарковПроцентиль.СоздатьПоИмени(_КолонкиКонфигурации) Цикл + ДобавитьКолонку(Колонка); + КонецЦикла; + +КонецПроцедуры + Процедура ДобавитьКолонку(Колонка) Если Не _Отчет.Таблица.Колонки.Найти(Колонка.Имя) = Неопределено Тогда 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 8ea2f14..cf89350 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" @@ -15,6 +15,7 @@ Перем ВыделяемаяПамять Экспорт; // Число Перем _ИсходныеДанные; // Структура +Перем _УпорядоченныеЗамерыВремени; // Массив из Число // Статистика бенчмарка // @@ -36,6 +37,17 @@ #Область ПрограммныйИнтерфейс +// Квантиль +// +// Параметры: +// Вероятность - Число +// +// Возвращаемое значение: +// Число +Функция Квантиль(Вероятность) Экспорт + Возврат МатематическиеФункцииБенчмарков.Квантиль(_УпорядоченныеЗамерыВремени, Вероятность); +КонецФункции + // Читает замеры и формирует статистику // // Параметры: @@ -68,6 +80,8 @@ ОперацийВСекунду = ?(_ИсходныеДанные.Среднее = 0, 0, НаносекундВСекунде / _ИсходныеДанные.Среднее); ВыделяемаяПамять = МатематическиеФункцииБенчмарков.Среднее(ЗамерыПамяти); + _УпорядоченныеЗамерыВремени = ЗамерыВремени; + ВНаносекунды(); Возврат ЭтотОбъект; 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 32d82c8..5fc24d5 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" @@ -193,6 +193,13 @@ Процедура ПрочитатьАннотацииКолонок(СвойстваКонструктора, Конфигурация) + ПрочитатьАннотацииКолонкиБезПараметров(СвойстваКонструктора, Конфигурация); + ПрочитатьАннотацииКолонкиПроцентиля(СвойстваКонструктора, Конфигурация); + +КонецПроцедуры + +Процедура ПрочитатьАннотацииКолонкиБезПараметров(СвойстваКонструктора, Конфигурация) + ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль"; Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); @@ -204,4 +211,26 @@ КонецПроцедуры +Процедура ПрочитатьАннотацииКолонкиПроцентиля(СвойстваКонструктора, Конфигурация) + + Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваКонструктора, "КолонкаПроцентиль"); + + КоличествоДобавлено = 0; + Для Каждого Аннотация Из Аннотации Цикл + + Процентили = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение"); + + Для Каждого Процентиль Из Процентили Цикл + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(Процентиль)); + КоличествоДобавлено = КоличествоДобавлено + 1; + КонецЦИкла; + + КонецЦикла; + + Если Аннотации.Количество() > 0 И КоличествоДобавлено = 0 Тогда + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ 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\273\320\276\320\275\320\272\320\270\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\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\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 a8ef361..f4d8e35 100644 --- "a/src/BenchmarkOneScript/core/\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\270\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\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\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" @@ -16,6 +16,7 @@ Перем ВыделяемаяПамять Экспорт; // Строка Перем Мин Экспорт; // Строка Перем Макс Экспорт; // Строка +Перем Процентиль Экспорт; // Строка Функция СоздатьМетод() Экспорт Возврат КолонкаОтчетаБенчмарковМетод.Создать(); @@ -73,6 +74,14 @@ Возврат КолонкаОтчетаБенчмарковВерхнийКвартиль.Создать(); КонецФункции +Функция СоздатьПроцентиль(Процентиль) Экспорт + Возврат КолонкаОтчетаБенчмарковПроцентиль.Создать(Процентиль); +КонецФункции + +Функция Процентиль(Процентиль) Экспорт + Возврат КолонкаОтчетаБенчмарковПроцентиль.ИмяКолонки(Процентиль); +КонецФункции + Функция СоздатьПараметр(ИмяПараметра) Экспорт Возврат КолонкаОтчетаБенчмарковПараметр.Создать(ИмяПараметра); КонецФункции @@ -94,4 +103,5 @@ Категория = "Категория"; ВыделяемаяПамять = "ВыделяемаяПамять"; Мин = "Мин"; -Макс = "Макс"; \ 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\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\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\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\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 96cb97f..4fd3b80 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\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\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\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" @@ -148,6 +148,27 @@ КонецФункции +Функция Квантиль(УпорядоченныеЗначения, Вероятность) Экспорт + + Количество = УпорядоченныеЗначения.Количество(); + + Позиция = Вероятность * (Количество - 1); + + ИндексПозиции = Цел(Позиция); + ДробнаяЧасть = Позиция - ИндексПозиции; + + Если ИндексПозиции < 0 Тогда + Возврат УпорядоченныеЗначения[0]; + ИначеЕсли ИндексПозиции >= Количество - 1 Тогда + Возврат УпорядоченныеЗначения[Количество - 1]; + Иначе + НижнееЗначение = УпорядоченныеЗначения[ИндексПозиции]; + ВерхнееЗначение = УпорядоченныеЗначения[ИндексПозиции + 1]; + Возврат НижнееЗначение + ДробнаяЧасть * (ВерхнееЗначение - НижнееЗначение); + КонецЕсли; + +КонецФункции + Функция ТолькоЧисла(Значения, ВключаяНеопределено = Ложь) Экспорт ТипЧисло = Тип("Число"); 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\241\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\274\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\270\320\241\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\274\320\270.os" index d3a70f1..6c59403 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\241\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\274\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\270\320\241\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\274\320\270.os" @@ -2,6 +2,7 @@ &КолонкаМакс &КолонкаНижнийКвартиль &КолонкаВерхнийКвартиль +&КолонкаПроцентиль(10, 80) Процедура ПриСозданииОбъекта() КонецПроцедуры 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 83b1166..db91ba4 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" @@ -383,10 +383,11 @@ &Тест Процедура Тест_КолонкиИзАннотации() Экспорт - ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль"; - Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); Объект = Новый БенчмаркиСКолонками(); + ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль"; + Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); + Конфигурация = Новый КонфигурацияБенчмарков(Объект); ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); @@ -403,10 +404,11 @@ &Тест Процедура Тест_ДобавлениеКолонок() Экспорт - ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль"; - Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); Объект = Новый ПустойБенчмарк(); + ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль"; + Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); + Конфигурация = Новый КонфигурацияБенчмарков(Объект); ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); @@ -424,6 +426,27 @@ КонецПроцедуры +&Тест +Процедура Тест_ДобавлениеОдинаковыхКолонок() Экспорт + + Объект = Новый ПустойБенчмарк(); + + ИмяКолонки = КолонкиОтчетаБенчмарков.Мин; + + Конфигурация = Новый КонфигурацияБенчмарков(Объект); + Конфигурация.ДобавитьКолонку(ИмяКолонки); + Конфигурация.ДобавитьКолонку(ИмяКолонки); + + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Объект, Конфигурация); + ТаблицаОтчета = Результат.Отчет.Таблица; + + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(ИмяКолонки)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][ИмяКолонки]).Заполнено(); + +КонецПроцедуры + &Тест Процедура Тест_УдалениеКолонок() Экспорт @@ -440,4 +463,97 @@ Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(Колонка)).ЭтоНеопределено(); +КонецПроцедуры + +&Тест +Процедура Тест_КолонкиПроцентилейИзАннотации() Экспорт + + Объект = Новый БенчмаркиСКолонками(); + + Конфигурация = Новый КонфигурацияБенчмарков(Объект); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Объект, Конфигурация); + ТаблицаОтчета = Результат.Отчет.Таблица; + + КолонкаПроцентиль10 = КолонкиОтчетаБенчмарков.Процентиль(10); + КолонкаПроцентиль80 = КолонкиОтчетаБенчмарков.Процентиль(80); + + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(КолонкаПроцентиль10)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][КолонкаПроцентиль10]).Заполнено(); + + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(КолонкаПроцентиль80)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][КолонкаПроцентиль80]).Заполнено(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДобавлениеКолонкиПроцентилей() Экспорт + + Объект = Новый ПустойБенчмарк(); + + Конфигурация = Новый КонфигурацияБенчмарков(Объект); + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(10)); + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(80)); + + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Объект, Конфигурация); + ТаблицаОтчета = Результат.Отчет.Таблица; + + КолонкаПроцентиль10 = КолонкиОтчетаБенчмарков.Процентиль(10); + КолонкаПроцентиль80 = КолонкиОтчетаБенчмарков.Процентиль(80); + + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(КолонкаПроцентиль10)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][КолонкаПроцентиль10]).Заполнено(); + + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(КолонкаПроцентиль80)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][КолонкаПроцентиль80]).Заполнено(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДобавлениеКолонкиПроцентилейПоУмолчанию() Экспорт + + Объект = Новый ПустойБенчмарк(); + + Конфигурация = Новый КонфигурацияБенчмарков(Объект); + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль); + + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Объект, Конфигурация); + ТаблицаОтчета = Результат.Отчет.Таблица; + + Для Каждого Процентиль Из КолонкаОтчетаБенчмарковПроцентиль.ПроцентилиПоУмолчанию() Цикл + ИмяКолонки = КолонкиОтчетаБенчмарков.Процентиль(Процентиль); + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(ИмяКолонки)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][ИмяКолонки]).Заполнено(); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура Тест_ДобавлениеКолонкиПроцентилейПоУмолчаниюИПроизвольная() Экспорт + + Объект = Новый ПустойБенчмарк(); + + Конфигурация = Новый КонфигурацияБенчмарков(Объект); + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль); + Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(33)); + + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Объект, Конфигурация); + ТаблицаОтчета = Результат.Отчет.Таблица; + + Процентили = КолонкаОтчетаБенчмарковПроцентиль.ПроцентилиПоУмолчанию(); + Процентили.Добавить(33); + + Для Каждого Процентиль Из КолонкаОтчетаБенчмарковПроцентиль.ПроцентилиПоУмолчанию() Цикл + ИмяКолонки = КолонкиОтчетаБенчмарков.Процентиль(Процентиль); + Ожидаем.Что(ТаблицаОтчета.Колонки.Найти(ИмяКолонки)).Не_().ЭтоНеопределено(); + Ожидаем.Что(ТаблицаОтчета[0][ИмяКолонки]).Заполнено(); + КонецЦикла; + КонецПроцедуры \ No newline at end of file