diff --git "a/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.md" "b/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.md" index 9f2c7b1..41f4d6e 100644 --- "a/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.md" +++ "b/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.md" @@ -1,31 +1,31 @@ > BenchmarkOneScript v0.8.0, OneScript v2.0.0, Microsoft Windows NT 10.0.26200.0 \ 13th Gen Intel Core i5-13600KF, 1 CPU, 20 logical and 14 physical cores -| Method | ВерхняяГраница | РазмерМассива | Baseline | Mean | StdErr | StdDev | Ratio | RatioSD | Op/s | Allocated | -|-------------------------------------|---------------:|--------------:|----------|-----------:|-------------:|------------:|-------:|--------:|--------:|-------------:| -| ВстроеннаяСортировка | 65,000 | 1,000 | Yes | 1.709 ms | 36.33 us | 162.5 us | 1.00 | 0.00 | 585.245 | 307.2 KB | -| СортировкаПузырьком | 65,000 | 1,000 | No | 243.252 ms | 396.27 us | 1,772.2 us | 143.29 | 10.08 | 4.111 | 172,131.1 KB | -| СортировкаВставками | 65,000 | 1,000 | No | 104.060 ms | 714.25 us | 3,194.2 us | 61.30 | 4.67 | 9.610 | 63,426.5 KB | -| СортировкаВставкамиБинарная | 65,000 | 1,000 | No | 80.239 ms | 533.62 us | 2,386.4 us | 47.26 | 3.58 | 12.463 | 48,979.8 KB | -| СортировкаВыбором | 65,000 | 1,000 | No | 85.888 ms | 143.25 us | 640.6 us | 50.59 | 3.56 | 11.643 | 70,733.5 KB | -| СортировкаШелла | 65,000 | 1,000 | No | 5.926 ms | 77.61 us | 347.1 us | 3.49 | 0.32 | 168.743 | 3,553.5 KB | -| БыстраяСортировка | 65,000 | 1,000 | No | 5.629 ms | 92.57 us | 414.0 us | 3.32 | 0.33 | 177.657 | 2,514.2 KB | -| СортировкаСлиянием | 65,000 | 1,000 | No | 6.871 ms | 77.12 us | 344.9 us | 4.05 | 0.35 | 145.541 | 4,197.8 KB | -| ПирамидальнаяСортировка | 65,000 | 1,000 | No | 9.835 ms | 102.57 us | 458.7 us | 5.79 | 0.48 | 101.673 | 5,311.3 KB | -| СортировкаРасческой | 65,000 | 1,000 | No | 7.954 ms | 99.66 us | 445.7 us | 4.68 | 0.42 | 125.731 | 5,419.6 KB | -| СортировкаПодсчётом | 65,000 | 1,000 | No | 24.089 ms | 276.59 us | 1,237.0 us | 14.19 | 1.22 | 41.513 | 13,588.3 KB | -| ПоразряднаяСортировка | 65,000 | 1,000 | No | 2.547 ms | 63.16 us | 282.5 us | 1.50 | 0.19 | 392.614 | 1,766.5 KB | -| ВстроеннаяСортировка | 65,000 | 10,000 | Yes | 12.613 ms | 499.40 us | 2,233.4 us | 1.00 | 0.00 | 79.283 | 3,049.4 KB | -| СортировкаШелла | 65,000 | 10,000 | No | 88.231 ms | 440.89 us | 1,971.7 us | 7.16 | 1.00 | 11.334 | 51,800.3 KB | -| БыстраяСортировка | 65,000 | 10,000 | No | 79.262 ms | 413.29 us | 1,848.3 us | 6.44 | 0.90 | 12.616 | 31,203.7 KB | -| СортировкаСлиянием | 65,000 | 10,000 | No | 98.830 ms | 729.69 us | 3,263.3 us | 8.02 | 1.13 | 10.118 | 59,095.7 KB | -| ПирамидальнаяСортировка | 65,000 | 10,000 | No | 137.246 ms | 542.38 us | 2,425.6 us | 11.14 | 1.54 | 7.286 | 73,992.8 KB | -| СортировкаРасческой | 65,000 | 10,000 | No | 120.794 ms | 596.17 us | 2,666.2 us | 9.81 | 1.36 | 8.279 | 82,726.2 KB | -| СортировкаПодсчётом | 65,000 | 10,000 | No | 31.852 ms | 535.45 us | 2,394.6 us | 2.59 | 0.40 | 31.396 | 16,963.3 KB | -| ПоразряднаяСортировка | 65,000 | 10,000 | No | 27.049 ms | 465.41 us | 2,081.4 us | 2.20 | 0.34 | 36.969 | 16,483.3 KB | -| ВстроеннаяСортировка | 65,000 | 100,000 | Yes | 174.752 ms | 10,562.95 us | 47,239.0 us | 1.00 | 0.00 | 5.722 | 30,471.2 KB | -| СортировкаПодсчётом | 65,000 | 100,000 | No | 99.235 ms | 1,402.77 us | 6,273.4 us | 0.62 | 0.21 | 10.077 | 50,713.4 KB | -| ПоразряднаяСортировка | 65,000 | 100,000 | No | 230.053 ms | 1,692.45 us | 7,568.9 us | 1.44 | 0.48 | 4.347 | 163,873.1 KB | +| Method | ВерхняяГраница | РазмерМассива | Baseline | Mean | StdErr | StdDev | Ratio | RatioSD | Op/s | Allocated | +|--------------------------------|---------------:|--------------:|----------|-----------:|------------:|-----------:|-------:|--------:|--------:|-------------:| +| Встроенная | 65,000 | 1,000 | Yes | 1.967 ms | 94.75 us | 519.0 us | 1.00 | 0.00 | 508.320 | 307.2 KB | +| Пузырьком O(n^2) | 65,000 | 1,000 | No | 251.488 ms | 536.47 us | 2,938.4 us | 138.47 | 42.83 | 3.976 | 170,930.5 KB | +| Вставками O(n^2) | 65,000 | 1,000 | No | 104.755 ms | 332.50 us | 1,821.2 us | 57.68 | 17.86 | 9.546 | 62,466.1 KB | +| Бинарные вставки O(n^2) | 65,000 | 1,000 | No | 80.723 ms | 432.39 us | 2,368.3 us | 44.45 | 13.80 | 12.388 | 48,259.2 KB | +| Выбором (двойная) O(n^2) | 65,000 | 1,000 | No | 90.969 ms | 247.14 us | 1,353.6 us | 50.09 | 15.50 | 10.993 | 70,733.2 KB | +| Шелла (Ciura) O(n^1.25) | 65,000 | 1,000 | No | 6.086 ms | 73.44 us | 402.3 us | 3.35 | 1.06 | 164.306 | 3,485.5 KB | +| Быстрая O(n log n) | 65,000 | 1,000 | No | 5.619 ms | 62.22 us | 340.8 us | 3.09 | 0.98 | 177.966 | 2,518.0 KB | +| Слиянием O(n log n) | 65,000 | 1,000 | No | 6.713 ms | 81.59 us | 446.9 us | 3.70 | 1.17 | 148.959 | 4,126.7 KB | +| Пирамидальная O(n log n) | 65,000 | 1,000 | No | 10.461 ms | 87.70 us | 480.4 us | 5.76 | 1.80 | 95.595 | 5,321.8 KB | +| Расчёской O(n log n) | 65,000 | 1,000 | No | 8.414 ms | 91.53 us | 501.4 us | 4.63 | 1.46 | 118.853 | 5,636.5 KB | +| Подсчётом O(n + k) | 65,000 | 1,000 | No | 25.184 ms | 301.27 us | 1,650.1 us | 13.87 | 4.39 | 39.708 | 13,588.3 KB | +| Поразрядная LSD-256 O(d*(n+b)) | 65,000 | 1,000 | No | 2.642 ms | 57.52 us | 315.1 us | 1.45 | 0.48 | 378.535 | 1,765.2 KB | +| Встроенная | 65,000 | 10,000 | Yes | 11.295 ms | 602.10 us | 3,297.9 us | 1.00 | 0.00 | 88.535 | 3,049.4 KB | +| Шелла (Ciura) O(n^1.25) | 65,000 | 10,000 | No | 93.066 ms | 463.43 us | 2,538.3 us | 8.90 | 2.38 | 10.745 | 51,726.1 KB | +| Быстрая O(n log n) | 65,000 | 10,000 | No | 78.345 ms | 456.59 us | 2,500.8 us | 7.50 | 2.01 | 12.764 | 30,851.2 KB | +| Слиянием O(n log n) | 65,000 | 10,000 | No | 99.145 ms | 464.58 us | 2,544.6 us | 9.49 | 2.54 | 10.086 | 59,235.3 KB | +| Пирамидальная O(n log n) | 65,000 | 10,000 | No | 143.819 ms | 667.90 us | 3,658.2 us | 13.76 | 3.68 | 6.953 | 73,970.5 KB | +| Расчёской O(n log n) | 65,000 | 10,000 | No | 126.841 ms | 890.02 us | 4,874.9 us | 12.14 | 3.26 | 7.884 | 82,811.6 KB | +| Подсчётом O(n + k) | 65,000 | 10,000 | No | 33.581 ms | 553.81 us | 3,033.4 us | 3.21 | 0.90 | 29.779 | 16,963.3 KB | +| Поразрядная LSD-256 O(d*(n+b)) | 65,000 | 10,000 | No | 27.221 ms | 370.16 us | 2,027.4 us | 2.60 | 0.72 | 36.737 | 16,484.2 KB | +| Встроенная | 65,000 | 100,000 | Yes | 105.520 ms | 987.67 us | 5,409.7 us | 1.00 | 0.00 | 9.477 | 30,471.2 KB | +| Подсчётом O(n + k) | 65,000 | 100,000 | No | 101.292 ms | 1,168.65 us | 6,401.0 us | 0.96 | 0.08 | 9.872 | 50,713.3 KB | +| Поразрядная LSD-256 O(d*(n+b)) | 65,000 | 100,000 | No | 241.630 ms | 1,249.75 us | 6,845.2 us | 2.30 | 0.13 | 4.139 | 163,855.1 KB | ``` ВерхняяГраница : Значение параметра 'ВерхняяГраница' diff --git "a/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.os" "b/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.os" index 1a01749..e56b626 100644 --- "a/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.os" +++ "b/samples/benchmarks/examples/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\276\320\272.os" @@ -3,7 +3,7 @@ // Сравнительный бенчмарк алгоритмов сортировки. // // Реализованы 11 алгоритмов - от квадратичных до линейных: -// O(n²) : Пузырёк, Вставки, Вставки (бин.), Выбором +// O(n^2) : Пузырёк, Вставки, Вставки (бин.), Выбором // O(n log n) : Шелла (Ciura), Быстрая, Слиянием, Пирамидальная, Расчёска // O(n + k) : Подсчётом, Поразрядная (LSD Radix-256) @@ -19,7 +19,7 @@ #Область ОбработчикиСобытий -&КоличествоИтераций(20) +&КоличествоИтераций(30) &МониторингПамяти Процедура ПриСозданииОбъекта() ГСЧ = Новый ГенераторСлучайныхЧисел(); @@ -52,12 +52,12 @@ КонецПроцедуры -&ПослеКаждогоКейса +&ПослеИтерации Процедура ПроверитьСортировку(Контекст) Экспорт РазмерМассива = РазмерМассива(Контекст.Кейс); Размер = ТестовыйМассив.Количество(); - + // Проверка 1: размер не изменился Если Размер <> РазмерМассива Тогда ВызватьИсключение "Ошибка: размер массива изменился (" @@ -94,7 +94,7 @@ // Встроенная сортировка (эталон). // Сортирует через ТаблицаЗначений.Сортировать(), затем копирует обратно в массив. // Служит базой для Ratio - все остальные алгоритмы сравниваются с этим. -&Бенчмарк +&Бенчмарк(Наименование = "Встроенная") &Эталон &Параметры(1000) &Параметры(10000) @@ -109,10 +109,10 @@ КонецПроцедуры -// Сортировка пузырьком - O(n²). +// Сортировка пузырьком - O(n^2). // Простейший алгоритм: соседние элементы сравниваются и меняются местами. // Всегда выполняет n*(n-1)/2 сравнений независимо от входных данных. -&Бенчмарк +&Бенчмарк(Наименование = "Пузырьком O(n^2)") &Параметры(1000) Процедура СортировкаПузырьком(РазмерМассива) Экспорт @@ -130,10 +130,10 @@ КонецПроцедуры -// Сортировка вставками - O(n²), лучший O(n). +// Сортировка вставками - O(n^2), лучший O(n). // Каждый элемент сдвигается влево до своей позиции. // Эффективна на малых и почти отсортированных массивах; используется как базис в гибридных алгоритмах. -&Бенчмарк +&Бенчмарк(Наименование = "Вставками O(n^2)") &Параметры(1000) Процедура СортировкаВставками(РазмерМассива) Экспорт @@ -153,9 +153,9 @@ КонецПроцедуры -// Бинарная сортировка вставками - O(n²) сдвигов, O(n log n) сравнений. +// Бинарная сортировка вставками - O(n^2) сдвигов, O(n log n) сравнений. // Позиция вставки ищется бинарным поиском, но сдвиг элементов остаётся линейным. -&Бенчмарк +&Бенчмарк(Наименование = "Бинарные вставки O(n^2)") &Параметры(1000) Процедура СортировкаВставкамиБинарная(РазмерМассива) Экспорт @@ -190,10 +190,10 @@ КонецПроцедуры -// Двойная сортировка выбором - O(n²). +// Двойная сортировка выбором - O(n^2). // На каждом проходе находит минимум и максимум, сужая границы с двух сторон. // Вдвое меньше проходов, чем классическая сортировка выбором. -&Бенчмарк +&Бенчмарк(Наименование = "Выбором (двойная) O(n^2)") &Параметры(1000) Процедура СортировкаВыбором(РазмерМассива) Экспорт @@ -244,7 +244,7 @@ // Обобщение сортировки вставками с убывающим шагом. // Последовательность Ciura [1,4,10,23,57,132,301,701] эмпирически оптимальна; // для массивов >701 элемента шаги продолжаются с множителем ×2.25. -&Бенчмарк +&Бенчмарк(Наименование = "Шелла (Ciura) O(n^1.25)") &Параметры(1000) &Параметры(10000) Процедура СортировкаШелла(РазмерМассива) Экспорт @@ -302,7 +302,7 @@ // Гибрид быстрой + пирамидальной + вставками. // Медиана трёх для выбора опорного, лимит глубины 2·log2(n) с переходом на пирамидальную, // участки < МинимальныйРазмерВставки досортировываются вставками. -&Бенчмарк +&Бенчмарк(Наименование = "Быстрая O(n log n)") &Параметры(1000) &Параметры(10000) Процедура БыстраяСортировка(РазмерМассива) Экспорт @@ -406,7 +406,7 @@ // Блоки размером МинимальныйРазмерВставки сортируются вставками, // затем попарно сливаются с удвоением ширины. Единый буфер на все слияния. // Оптимизация: пропуск слияния, если граница уже упорядочена. -&Бенчмарк +&Бенчмарк(Наименование = "Слиянием O(n log n)") &Параметры(1000) &Параметры(10000) Процедура СортировкаСлиянием(РазмерМассива) Экспорт @@ -494,7 +494,7 @@ // Пирамидальная сортировка - O(n log n). // Построение max-heap за O(n), затем n извлечений вершины. // Просеивание (sift-down) заинлайнено для производительности в интерпретаторе. -&Бенчмарк +&Бенчмарк(Наименование = "Пирамидальная O(n log n)") &Параметры(1000) &Параметры(10000) Процедура ПирамидальнаяСортировка(РазмерМассива) Экспорт @@ -645,7 +645,7 @@ // Сортировка расчёской - O(n log n) в среднем. // Улучшение пузырька: шаг сравнения уменьшается с коэффициентом 1.3 до 1. // Эффективно устраняет «черепах» - мелкие элементы в конце массива. -&Бенчмарк +&Бенчмарк(Наименование = "Расчёской O(n log n)") &Параметры(1000) &Параметры(10000) Процедура СортировкаРасческой(РазмерМассива) Экспорт @@ -679,7 +679,7 @@ // Сортировка подсчётом - O(n + k), где k = ВерхняяГраница. // Не основана на сравнениях: считает количество вхождений каждого значения. // Эффективна при k ≈ n; при k >> n большая часть работы - пустой пробег по счётчикам. -&Бенчмарк +&Бенчмарк(Наименование = "Подсчётом O(n + k)") &Параметры(1000) &Параметры(10000) &Параметры(100000) @@ -711,7 +711,7 @@ // Поразрядная сортировка (LSD Radix-256) - O(d·(n+b)), где d=2, b=256. // Два прохода по основанию 256: сначала младшие 8 бит, затем старшие. // Покрывает значения [0..65535]. Стабильная, не основана на сравнениях. -&Бенчмарк +&Бенчмарк(Наименование = "Поразрядная LSD-256 O(d*(n+b))") &Параметры(1000) &Параметры(10000) &Параметры(100000) @@ -807,4 +807,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\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" "b/src/BenchmarkOneScript/core/\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" index 55e3154..01de41a 100644 --- "a/src/BenchmarkOneScript/core/\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" +++ "b/src/BenchmarkOneScript/core/\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" @@ -1,14 +1,23 @@ // Указывает, что метод должен быть измерен как бенчмарк в рамках тестирования производительности. // -// Методы с этой аннотацией автоматически включаются в процесс бенчмаркинга. -// При запуске будут замеряться время выполнения, аллокации памяти (если включен мониторинг памяти), +// Методы с этой аннотацией автоматически включаются в процесс бенчмаркинга. +// При запуске будут замеряться время выполнения, аллокации памяти (если включен мониторинг памяти), // и другие параметры производительности. // +// Параметры: +// Наименование - Строка - Наименование бенчмарка. Если указано, отображается в колонке Method отчета +// вместо имени метода. +// // Примеры: // &Бенчмарк // Процедура МойБенчмарк() Экспорт // // Тестируемый код // КонецПроцедуры +// +// &Бенчмарк(Наименование = "Мое наименование") +// Процедура МойБенчмарк() Экспорт +// // Тестируемый код +// КонецПроцедуры &Аннотация("Бенчмарк") -Процедура ПриСозданииОбъекта() -КонецПроцедуры \ 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 c97fff9..fd98221 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,6 +13,10 @@ &Заполнено Перем _Метод; // Строка - Метод бенчмарка +&Сериализуемое("Title") +&Тип("Строка") +Перем _Наименование; // Строка - Наименование бенчмарка + &Сериализуемое("Baseline") &Тип("Булево") Перем _ЭтоЭталон; // Булево @@ -46,6 +50,7 @@ _НаборыПараметров = Новый Массив(); _ЭтоЭталон = Ложь; _Категория = ""; + _Наименование = ""; _ИсточникиПараметров = Новый Массив(); Если Не Объект = Неопределено Тогда @@ -90,6 +95,14 @@ Возврат _Категория; КонецФункции +// Наименование бенчмарка +// +// Возвращаемое значение: +// Строка +Функция Наименование() Экспорт + Возврат _Наименование; +КонецФункции + // Наборы параметров, используемые для запуска бенчмарков с различными входными данными. // // Возвращаемое значение: @@ -149,6 +162,23 @@ КонецФункции +// Устанавливает наименование бенчмарка. +// +// Если наименование указано, оно отображается в колонке Method отчёта вместо имени метода. +// +// Параметры: +// Наименование - Строка +// +// Возвращаемое значение: +// ЭтотОбъект +Функция УстановитьНаименование(Наименование) Экспорт + + _Наименование = Наименование; + + Возврат ЭтотОбъект; + +КонецФункции + // Добавляет параметры бенчмарка, позволяя запускать тесты с различными наборами входных данных. // // Принимает значения только примитивного типа. @@ -268,6 +298,7 @@ Дескриптор.ИспользоватьКакЭталон(ЭтоЭталон()); Дескриптор.УстановитьКатегорию(Категория()); + Дескриптор.УстановитьНаименование(Наименование()); Возврат Дескриптор; @@ -380,4 +411,4 @@ КонецЕсли; КонецПроцедуры -#КонецОбласти \ 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\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\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\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 b6fc3ad..72f95f4 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\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\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" @@ -63,6 +63,7 @@ ДескрипторБенчмарка = Новый ДескрипторБенчмарка(_ИсточникБенчмарков, СвойстваМетода.Имя); + ПрочитатьНаименованиеИзАннотацииБенчмарк(СвойстваМетода, ДескрипторБенчмарка); ПрочитатьАннотациюЭталон(СвойстваМетода, ДескрипторБенчмарка); ПрочитатьАннотациюКатегория(СвойстваМетода, ДескрипторБенчмарка); ПрочитатьАннотациюПараметры(СвойстваМетода, ДескрипторБенчмарка); @@ -72,6 +73,25 @@ КонецФункции +// Читает параметр Наименование из аннотации &Бенчмарк и устанавливает его в дескриптор +// +// Параметры: +// СвойстваМетода - СтрокаТаблицыЗначений - Свойства метода, полученные через рефлектор +// ДескрипторБенчмарка - ДескрипторБенчмарка - Дескриптор для заполнения +Процедура ПрочитатьНаименованиеИзАннотацииБенчмарк(СвойстваМетода, ДескрипторБенчмарка) + + Аннотация = РаботаСАннотациями.ПолучитьАннотацию(СвойстваМетода, "Бенчмарк"); + Если Аннотация = Неопределено Тогда + Возврат; + КонецЕсли; + + Наименование = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "Наименование", ""); + Если ЗначениеЗаполнено(Наименование) Тогда + ДескрипторБенчмарка.УстановитьНаименование(Наименование); + КонецЕсли; + +КонецПроцедуры + // Читает аннотацию &Эталон и помечает бенчмарк как эталонный, если она присутствует // // Параметры: 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\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/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\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 20e24e2..fc09af8 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\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/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\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" @@ -22,6 +22,13 @@ // Произвольный Функция Значение(РезультатЗапускаКейса, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат РезультатЗапускаКейса.Кейс.ДескрипторБенчмарка().Метод(); + Дескриптор = РезультатЗапускаКейса.Кейс.ДескрипторБенчмарка(); -КонецФункции \ No newline at end of file + Наименование = Дескриптор.Наименование(); + Если ЗначениеЗаполнено(Наименование) Тогда + Возврат Наименование; + КонецЕсли; + + Возврат Дескриптор.Метод(); + +КонецФункции diff --git "a/tests/fixtures/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\241\320\235\320\260\320\270\320\274\320\265\320\275\320\276\320\262\320\260\320\275\320\270\320\265\320\274.os" "b/tests/fixtures/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\241\320\235\320\260\320\270\320\274\320\265\320\275\320\276\320\262\320\260\320\275\320\270\320\265\320\274.os" new file mode 100644 index 0000000..5e9cea8 --- /dev/null +++ "b/tests/fixtures/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\241\320\235\320\260\320\270\320\274\320\265\320\275\320\276\320\262\320\260\320\275\320\270\320\265\320\274.os" @@ -0,0 +1,7 @@ +&Бенчмарк(Наименование = "Тестовое наименование бенчмарка") +Процедура БенчмаркСНаименованием() Экспорт +КонецПроцедуры + +&Бенчмарк +Процедура БенчмаркБезНаименования() Экспорт +КонецПроцедуры diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index 49cb5b9..59d053b 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -50,6 +50,7 @@ { "Type": "БенчмаркиДляЭкспорта", "Method": "БенчмаркПервый", + "Title": "", "Baseline": false, "Category": "", "ParameterSets": [ @@ -73,6 +74,7 @@ { "Type": "БенчмаркиДляЭкспорта", "Method": "БенчмаркВторой", + "Title": "", "Baseline": false, "Category": "", "ParameterSets": [], 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 7c11181..49ffc5c 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" @@ -220,7 +220,8 @@ .ДобавитьИсточникПараметров("Источник1") .ДобавитьИсточникПараметров("Источник2") .ИспользоватьКакЭталон() - .УстановитьКатегорию("Категория"); + .УстановитьКатегорию("Категория") + .УстановитьНаименование("Наименование для копии"); // Действие КопияДескриптора = Дескриптор.Скопировать(); @@ -235,6 +236,7 @@ Ожидаем.Что(НаборыПараметров[1].Получить(1).Значение()).Равно(200); Ожидаем.Что(КопияДескриптора.ЭтоЭталон()).ЭтоИстина(); Ожидаем.Что(КопияДескриптора.Категория()).Равно("Категория"); + Ожидаем.Что(КопияДескриптора.Наименование()).Равно("Наименование для копии"); Ожидаем.Что(ИсточникиПараметров[0]).Равно("Источник1"); Ожидаем.Что(ИсточникиПараметров[1]).Равно("Источник2"); @@ -655,4 +657,59 @@ .Метод("Запустить", ПараметрыМетода) .ВыбрасываетИсключение("Не найдено ни одного дескриптора бенчмарка для запуска"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ИзвлечьНаименованиеИзАннотацииБенчмарк() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСНаименованием"); + + // Действие + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + + // Проверка + ДескрипторСНаименованием = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркСНаименованием"); + ДескрипторБезНаименования = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБезНаименования"); + + Ожидаем.Что(ДескрипторСНаименованием.Наименование()).Равно("Тестовое наименование бенчмарка"); + Ожидаем.Что(ДескрипторБезНаименования.Наименование()).Равно(""); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_УстановитьНаименованиеЧерезМетодДескриптора() Экспорт + + // Подготовка + Тип = Тип("ПустойБенчмарк"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.ПолучитьПервый(); + + // Действие + Дескриптор.УстановитьНаименование("Мое наименование"); + + // Проверка + Ожидаем.Что(Дескриптор.Наименование()).Равно("Мое наименование"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ВключитьНаименованиеВОтчет() Экспорт + + // Подготовка + Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию(); + + // Действие + Результат = Бенчмаркинг.Запустить(Тип("БенчмаркСНаименованием"), Конфигурация); + + // Проверка + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + + ДескрипторСНаименованием = Результат.Отчет.Таблица[0]; + ДескрипторБезНаименования = Результат.Отчет.Таблица[1]; + + Ожидаем.Что(ДескрипторСНаименованием[КолонкиОтчетаБенчмарков.Метод]).Равно("Тестовое наименование бенчмарка"); + Ожидаем.Что(ДескрипторБезНаименования[КолонкиОтчетаБенчмарков.Метод]).Равно("БенчмаркБезНаименования"); + +КонецПроцедуры