diff --git "a/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" "b/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" index f3aea31..9666f3a 100644 --- "a/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" +++ "b/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" @@ -30,6 +30,7 @@ #### Аннотации ```bsl +&КолонкаМедиана &КолонкаНижнийКвартиль &КолонкаВерхнийКвартиль Процедура ПриСозданииОбъекта() @@ -38,6 +39,7 @@ #### API ```bsl +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Медиана); Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.НижнийКвартиль); Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.ВерхнийКвартиль); ``` diff --git a/packagedef b/packagedef index e6bd62c..d9e1311 100644 --- a/packagedef +++ b/packagedef @@ -24,6 +24,7 @@ .ЗависитОт("autumn-cli", "1.1.0") .ЗависитОт("coloratos", "0.3.0") .ЗависитОт("fluent", "0.6.1") + .ЗависитОт("lambdas", "0.3.2") .ЗависитОт("logos", "1.7.1") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("coverage") 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 d7af8c5..bcff1d4 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" @@ -1,6 +1,7 @@ &КолонкаМин &КолонкаМакс &КолонкаНижнийКвартиль +&КолонкаМедиана &КолонкаВерхнийКвартиль &КолонкаПроцентиль &КолонкаRatioSD 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\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.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\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" new file mode 100644 index 0000000..05baa42 --- /dev/null +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" @@ -0,0 +1,14 @@ +// Добавляет в отчет колонку с медианой. +// Медиана - это значение, разделяющее упорядоченные измерения на две равные части +// +// - Применяется только к методу ПриСозданииОбъекта +// - Добавляется автоматически при значительном отклонении от среднего (mean) +// +// Пример: +// &КолонкаМедиана +// Процедура ПриСозданииОбъекта() +// // ... +// КонецПроцедуры +&Аннотация("КолонкаМедиана") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ 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\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 fe20c64..5bced76 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" @@ -17,7 +17,7 @@ Колонка.ЭтоЧисло = Истина; Колонка.ФорматнаяСтрока = ПредставленияПоказателейБенчмарков.ФорматнаяСтрокаЧисла(Разрядность); Колонка.ЗначениеДелегат = Делегаты.Создать(ЭтотОбъект, "Значение"); - Колонка.ФункцияСкрытия = "Элемент -> Элемент >= 0 И Элемент < 0.02"; + Колонка.ФункцияСкрытия = "Элемент -> Элемент.Значение >= 0 И Элемент.Значение < 0.02"; Возврат Колонка; 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 eb34b90..7f88dc6 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" @@ -12,6 +12,8 @@ Колонка.ЕдиницаИзмерения = ЕдиницыИзмеренийБенчмарков.Наносекунда; Колонка.ЭтоЧисло = Истина; Колонка.ЗначениеДелегат = Делегаты.Создать(ЭтотОбъект, "Значение"); + Колонка.ФункцияСкрытия = "Элемент -> + |МатематическиеФункцииБенчмарков.Abs(Элемент.Значение - Элемент.Статистика.Среднее) < Элемент.Статистика.Среднее * 0.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 b049924..066330e 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" @@ -1,4 +1,4 @@ -#Использовать fluent +#Использовать lambdas Перем _ДескрипторыБенчмарков; // Массив из ДескрипторБенчмарка Перем _Конфигурация; // КонфигурацияБенчмарков @@ -51,6 +51,7 @@ Процедура ДобавитьКолонки() ДобавитьКолонкуПорядкаПоУмолчанию(); + ДобавитьКолонкуРезультатЗапуска(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьМетод()); ДобавитьКолонкуКатегория(); ДобавитьКолонкиПараметров(); @@ -75,6 +76,10 @@ _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); КонецПроцедуры +Процедура ДобавитьКолонкуРезультатЗапуска() + _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРезультатЗапуска()); +КонецПроцедуры + Процедура ДобавитьКолонкиПараметров() Для Каждого Параметр Из _Конфигурация.Параметры() Цикл @@ -185,21 +190,10 @@ СкрываемыеКолонки = Новый Массив(); СкрываемыеКолонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); + СкрываемыеКолонки.Добавить(ИмяКолонкиРезультатЗапуска()); Для Каждого Колонка Из _Отчет.Колонки Цикл - Если ЕстьКолонкаКонфигурации(Колонка.Имя) Или Не ЗначениеЗаполнено(Колонка.ФункцияСкрытия) Тогда - Продолжить; - КонецЕсли; - - ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(_Отчет.Таблица.ВыгрузитьКолонку(Колонка.Имя)); - - Если Колонка.ЭтоЧисло Тогда - ПроцессорКоллекций.Фильтровать("Элемент -> ТипЗнч(Элемент) = Тип(""Число"")"); - КонецЕсли; - - Скрывать = ПроцессорКоллекций.ВсеСоответствуют(Колонка.ФункцияСкрытия); - - Если Скрывать Тогда + Если СкрыватьКолонку(Колонка) Тогда СкрываемыеКолонки.Добавить(Колонка); КонецЕсли; КонецЦикла; @@ -217,6 +211,38 @@ КонецПроцедуры +Функция СкрыватьКолонку(Колонка) + + Если ЕстьКолонкаКонфигурации(Колонка.Имя) Или Не ЗначениеЗаполнено(Колонка.ФункцияСкрытия) Тогда + Возврат Ложь; + КонецЕсли; + + Действие = Лямбда.Выражение(Колонка.ФункцияСкрытия) + .Интерфейс(ФункциональныеИнтерфейсы.УниФункция()) + .ВДействие(); + + Скрывать = Истина; + Для Каждого СтрокаОтчета Из _Отчет.Таблица Цикл + + Контекст = Новый Структура(); + Контекст.Вставить("Значение", СтрокаОтчета[Колонка.Имя]); + Контекст.Вставить("Статистика", СтрокаОтчета.РезультатЗапуска.Статистика); + + Попытка + Скрывать = Действие.Выполнить(Контекст) = Истина; + Исключение + Продолжить; + КонецПопытки; + + Если Не Скрывать Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Скрывать; + +КонецФункции + Функция ЕстьКолонкаКонфигурации(ИмяКолонки) Возврат Не _КолонкиКонфигурации.Найти(ИмяКолонки) = Неопределено; КонецФункции @@ -235,6 +261,7 @@ СтрокаОтчета = _Отчет.Таблица.Добавить(); СтрокаОтчета[ИмяКолонкиПорядокПоУмолчанию()] = НомерБенчмарка; + СтрокаОтчета[ИмяКолонкиРезультатЗапуска()] = СтрокаРезультат; Для Каждого Колонка Из _Отчет.Колонки Цикл СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРезультат, Колонка); @@ -410,4 +437,8 @@ Возврат "ПорядокПоУмолчанию"; КонецФункции +Функция ИмяКолонкиРезультатЗапуска() + Возврат "РезультатЗапуска"; +КонецФункции + #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index c8ae707..b732f30 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" @@ -200,7 +200,7 @@ Процедура ПрочитатьАннотацииКолонкиБезПараметров(СвойстваКонструктора, Конфигурация) - ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль, RatioSD"; + ПереченьКолонок = "Мин, Макс, Медиана, НижнийКвартиль, ВерхнийКвартиль, RatioSD"; Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); Для Каждого ИмяКолонки Из Колонки Цикл 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 26dc86e..e532daa 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" @@ -132,4 +132,8 @@ Возврат Результат; +КонецФункции + +Функция Abs(Значение) Экспорт + Возврат ?(Значение < 0, -Значение, Значение); КонецФункции \ 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\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 3f68460..487e2ea 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" @@ -1,5 +1,6 @@ &КолонкаМин &КолонкаМакс +&КолонкаМедиана &КолонкаНижнийКвартиль &КолонкаВерхнийКвартиль &КолонкаПроцентиль(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 f39140a..1fcdb65 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" @@ -385,7 +385,7 @@ Объект = Новый БенчмаркиСКолонками(); - ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль, RatioSD"; + ПереченьКолонок = "Мин, Макс, Медиана, НижнийКвартиль, ВерхнийКвартиль, RatioSD"; Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); Конфигурация = Новый КонфигурацияБенчмарков(Объект); @@ -405,7 +405,7 @@ Объект = Новый ПустойБенчмарк(); - ПереченьКолонок = "Мин, Макс, НижнийКвартиль, ВерхнийКвартиль, RatioSD"; + ПереченьКолонок = "Мин, Макс, Медиана, НижнийКвартиль, ВерхнийКвартиль, RatioSD"; Колонки = СтрРазделить(ПереченьКолонок, ", ", Ложь); Конфигурация = Новый КонфигурацияБенчмарков(Объект);