mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-03-17 20:48:01 +02:00
Merge pull request #392 from bia-technologies/feature/perfomance
Оптимизация механизмов движка
This commit is contained in:
commit
a70cd68e11
exts/yaxunit/src
CommonModules
ЮТИсполнительСлужебныйКлиент
ЮТКоллекции
ЮТОбщийСлужебный
ЮТПараметрыЗапускаСлужебный
DataProcessors/ЮТЮнитТесты/Forms/Основная
tests/src/CommonModules/ОМ_ЮТКоллекции
@ -20,6 +20,10 @@
|
||||
|
||||
Процедура ВыполнитьМодульноеТестирование() Экспорт
|
||||
|
||||
Если НЕ ЮТПараметрыЗапускаСлужебный.ЕстьПараметрыЗапускаТестов() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыИсполнения = ПараметрыИсполнения();
|
||||
ПараметрыИсполнения.АргументыЗапуска = ПараметрЗапуска;
|
||||
|
||||
@ -184,12 +188,12 @@
|
||||
Процедура ОбработчикАнализПараметровЗапуска(ПараметрыЗапуска, ДополнительныеПараметры) Экспорт
|
||||
|
||||
ЮТЛогирование.Информация("Анализ параметров запуска");
|
||||
ДополнительныеПараметры.ПараметрыЗапуска = ПараметрыЗапуска;
|
||||
|
||||
Если НЕ ПараметрыЗапуска.ВыполнятьМодульноеТестирование Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ДополнительныеПараметры.ПараметрыЗапуска = ПараметрыЗапуска;
|
||||
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
@ -143,13 +143,13 @@
|
||||
ТипИсточника = ТипЗнч(Источник);
|
||||
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипИсточника) Тогда
|
||||
Приемник = СкопироватьСтруктуру(Источник);
|
||||
Приемник = СкопироватьСтруктуру(Источник, Истина);
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипИсточника) Тогда
|
||||
Приемник = СкопироватьСоответствие(Источник);
|
||||
Приемник = СкопироватьСоответствие(Источник, Истина);
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипИсточника) Тогда
|
||||
Приемник = СкопироватьМассив(Источник);
|
||||
Приемник = СкопироватьМассив(Источник, Истина);
|
||||
ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда
|
||||
Приемник = СкопироватьСписокЗначений(Источник);
|
||||
Приемник = СкопироватьСписокЗначений(Источник, Истина);
|
||||
Иначе
|
||||
|
||||
СкопироватьПрисвоением = Истина;
|
||||
@ -177,15 +177,15 @@
|
||||
//
|
||||
// Параметры:
|
||||
// Источник - Структура, ФиксированнаяСтруктура - копируемая структура
|
||||
//
|
||||
// Рекурсивно - Булево - Создание "глубокой" копии, с копирование вложенных элементов
|
||||
// Возвращаемое значение:
|
||||
// Структура - копия исходной структуры.
|
||||
Функция СкопироватьСтруктуру(Источник) Экспорт
|
||||
Функция СкопироватьСтруктуру(Источник, Рекурсивно = Истина) Экспорт
|
||||
|
||||
Результат = Новый Структура;
|
||||
|
||||
Для Каждого КлючИЗначение Из Источник Цикл
|
||||
Результат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
|
||||
Результат.Вставить(КлючИЗначение.Ключ, ?(Рекурсивно, СкопироватьРекурсивно(КлючИЗначение.Значение), КлючИЗначение.Значение));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
@ -197,19 +197,24 @@
|
||||
// Параметры:
|
||||
// Источник - Соответствие из Произвольный
|
||||
// - ФиксированноеСоответствие из Произвольный
|
||||
// Рекурсивно - Булево - Создание "глубокой" копии, с копирование вложенных элементов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из Произвольный - копия исходного соответствия.
|
||||
//
|
||||
Функция СкопироватьСоответствие(Источник) Экспорт
|
||||
Функция СкопироватьСоответствие(Источник, Рекурсивно = Истина) Экспорт
|
||||
|
||||
Результат = Новый Соответствие;
|
||||
|
||||
Для Каждого КлючИЗначение Из Источник Цикл
|
||||
|
||||
НовыйКлюч = СкопироватьРекурсивно(КлючИЗначение.Ключ);
|
||||
НовоеЗначение = СкопироватьРекурсивно(КлючИЗначение.Значение);
|
||||
Результат.Вставить(НовыйКлюч, НовоеЗначение);
|
||||
Если Рекурсивно Тогда
|
||||
НовыйКлюч = СкопироватьРекурсивно(КлючИЗначение.Ключ);
|
||||
НовоеЗначение = СкопироватьРекурсивно(КлючИЗначение.Значение);
|
||||
Результат.Вставить(НовыйКлюч, НовоеЗначение);
|
||||
Иначе
|
||||
Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
@ -222,10 +227,11 @@
|
||||
// Параметры:
|
||||
// Источник - Массив Из Произвольный
|
||||
// - ФиксированныйМассив из Произвольный
|
||||
// Рекурсивно - Булево - Создание "глубокой" копии, с копирование вложенных элементов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив Из Произвольный - копия исходного массива.
|
||||
Функция СкопироватьМассив(Источник) Экспорт
|
||||
Функция СкопироватьМассив(Источник, Рекурсивно = Истина) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Источник) Тогда
|
||||
Возврат Новый Массив;
|
||||
@ -235,7 +241,7 @@
|
||||
Результат = Новый Массив(Размер);
|
||||
|
||||
Для Инд = 0 По Размер - 1 Цикл
|
||||
Результат[Инд] = СкопироватьРекурсивно(Источник[Инд]);
|
||||
Результат[Инд] = ?(Рекурсивно, СкопироватьРекурсивно(Источник[Инд]), Источник[Инд]);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
@ -246,18 +252,19 @@
|
||||
//
|
||||
// Параметры:
|
||||
// Источник - СписокЗначений Из Произвольный
|
||||
// Рекурсивно - Булево - Создание "глубокой" копии, с копирование вложенных элементов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СписокЗначений Из Произвольный
|
||||
//
|
||||
Функция СкопироватьСписокЗначений(Источник) Экспорт
|
||||
Функция СкопироватьСписокЗначений(Источник, Рекурсивно = Истина) Экспорт
|
||||
|
||||
Результат = Новый СписокЗначений;
|
||||
|
||||
Для Каждого ЭлементСписка Из Источник Цикл
|
||||
|
||||
НовоеЗначение = СкопироватьРекурсивно(ЭлементСписка.Значение);
|
||||
Результат.Добавить(НовоеЗначение, ЭлементСписка.Представление, ЭлементСписка.Пометка, ЭлементСписка.Картинка);
|
||||
Значение = ?(Рекурсивно, СкопироватьРекурсивно(ЭлементСписка.Значение), ЭлементСписка.Значение);
|
||||
Результат.Добавить(Значение, ЭлементСписка.Представление, ЭлементСписка.Пометка, ЭлементСписка.Картинка);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -65,30 +65,35 @@
|
||||
Значение10 = "_!%*") Экспорт
|
||||
|
||||
ФлагПустогоЗначения = "_!%*";
|
||||
Значения = Неопределено;
|
||||
|
||||
Для Инд = - 10 По - 1 Цикл
|
||||
|
||||
//@skip-check server-execution-safe-mode
|
||||
Значение = Вычислить("Значение" + ( - Инд)); // BSLLS:ExecuteExternalCodeInCommonModule-off
|
||||
|
||||
Если Значение = ФлагПустогоЗначения И Значения = Неопределено Тогда
|
||||
Продолжить;
|
||||
Значения = Новый Массив(10);
|
||||
Значения[0] = Значение1;
|
||||
Значения[1] = Значение2;
|
||||
Значения[2] = Значение3;
|
||||
Значения[3] = Значение4;
|
||||
Значения[4] = Значение5;
|
||||
Значения[5] = Значение6;
|
||||
Значения[6] = Значение7;
|
||||
Значения[7] = Значение8;
|
||||
Значения[8] = Значение9;
|
||||
Значения[9] = Значение10;
|
||||
|
||||
Для Инд = -9 По 0 Цикл
|
||||
Если Значения[-Инд] <> ФлагПустогоЗначения Тогда
|
||||
Результат = Новый Массив(1 - Инд);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Если Значения = Неопределено Тогда
|
||||
Значения = Новый Массив(- Инд);
|
||||
КонецЕсли;
|
||||
|
||||
Если Значение = ФлагПустогоЗначения Тогда
|
||||
Значение = ЗначениеПоУмолчанию;
|
||||
КонецЕсли;
|
||||
|
||||
Значения[ - Инд - 1] = Значение;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Значения;
|
||||
Для Инд = 0 По Результат.ВГраница() Цикл
|
||||
Если Значения[Инд] <> ФлагПустогоЗначения Тогда
|
||||
Результат[Инд] = Значения[Инд];
|
||||
Иначе
|
||||
Результат[Инд] = ЗначениеПоУмолчанию;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
// BSLLS:DuplicateStringLiteral-on
|
||||
|
@ -49,6 +49,17 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЕстьПараметрыЗапускаТестов() Экспорт
|
||||
|
||||
Если ПустаяСтрока(ПараметрЗапуска) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗапускаПредприятия = ПараметрыЗапускаПредприятия(ПараметрЗапуска);
|
||||
Возврат ПараметрыЗапускаПредприятия.Свойство(КлючЗапуска());
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -74,27 +85,9 @@
|
||||
Возврат Параметры;
|
||||
КонецЕсли;
|
||||
|
||||
ПарыКлючЗначение = ЮТСтроки.РазделитьСтроку(ПараметрыЗапускаСтрокой, ";");
|
||||
ПараметрыЗапускаПредприятия = ПараметрыЗапускаПредприятия(ПараметрыЗапускаСтрокой);
|
||||
|
||||
ПараметрыЗапуска = Новый Структура;
|
||||
|
||||
Для Каждого Пара Из ПарыКлючЗначение Цикл
|
||||
|
||||
Если ПустаяСтрока(Пара) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
КлючЗначение = ЮТСтроки.РазделитьСтроку(Пара, "=");
|
||||
|
||||
Если КлючЗначение.Количество() = 1 Тогда
|
||||
ПараметрыЗапуска.Вставить(КлючЗначение[0], Истина);
|
||||
Иначе
|
||||
ПараметрыЗапуска.Вставить(КлючЗначение[0], КлючЗначение[1]);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗначениеКлючаЗапуска = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапуска, КлючЗапуска(), Ложь);
|
||||
ЗначениеКлючаЗапуска = ЮТКоллекции.ЗначениеСтруктуры(ПараметрыЗапускаПредприятия, КлючЗапуска(), Ложь);
|
||||
|
||||
Если ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Булево") Тогда
|
||||
|
||||
@ -122,6 +115,32 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыЗапускаПредприятия(ПараметрыЗапускаСтрокой)
|
||||
|
||||
ПарыКлючЗначение = ЮТСтроки.РазделитьСтроку(ПараметрыЗапускаСтрокой, ";");
|
||||
|
||||
ПараметрыЗапускаПредприятия = Новый Структура;
|
||||
|
||||
Для Каждого Пара Из ПарыКлючЗначение Цикл
|
||||
|
||||
Если ПустаяСтрока(Пара) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
КлючЗначение = ЮТСтроки.РазделитьСтроку(Пара, "=");
|
||||
|
||||
Если КлючЗначение.Количество() = 1 Тогда
|
||||
ПараметрыЗапускаПредприятия.Вставить(КлючЗначение[0], Истина);
|
||||
Иначе
|
||||
ПараметрыЗапускаПредприятия.Вставить(КлючЗначение[0], КлючЗначение[1]);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ПараметрыЗапускаПредприятия;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПрочитатьКонфигурационныйФайл(ПутьКФайлу)
|
||||
|
||||
#Если НЕ ВебКлиент Тогда
|
||||
|
@ -21,6 +21,9 @@
|
||||
&НаКлиенте
|
||||
Перем ИсполняемыеТестовыеМодули;
|
||||
|
||||
&НаКлиенте
|
||||
Перем ДанныеПоИдентификаторам;
|
||||
|
||||
&НаКлиенте
|
||||
Перем ПараметрыЗапускаТестирования;
|
||||
|
||||
@ -488,6 +491,8 @@
|
||||
ИсполняемыеТестовыеМодули = Результат;
|
||||
ПараметрыЗапускаТестирования = ПараметрыЗапуска;
|
||||
|
||||
ДанныеПоИдентификаторам = Новый Структура("Тесты, Наборы, Модули", Новый Соответствие, Новый Соответствие, Новый Соответствие);
|
||||
|
||||
Для Каждого ТестовыйМодуль Из ИсполняемыеТестовыеМодули Цикл
|
||||
|
||||
Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл
|
||||
@ -504,6 +509,8 @@
|
||||
ЗаполнитьОшибки(СтрокаНабора, Набор);
|
||||
|
||||
Набор.Вставить("Идентификатор", СтрокаНабора.ПолучитьИдентификатор());
|
||||
ДанныеПоИдентификаторам.Наборы.Вставить(Набор.Идентификатор, Набор);
|
||||
ДанныеПоИдентификаторам.Модули.Вставить(Набор.Идентификатор, ТестовыйМодуль);
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
@ -513,6 +520,7 @@
|
||||
СтрокаТеста.Теги = СтрСоединить(Тест.Теги, ", ");
|
||||
|
||||
Тест.Вставить("Идентификатор", СтрокаТеста.ПолучитьИдентификатор());
|
||||
ДанныеПоИдентификаторам.Тесты.Вставить(Тест.Идентификатор, Тест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
@ -613,43 +621,66 @@
|
||||
Возврат МодулиКЗапуску;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Модуль Из ИсполняемыеТестовыеМодули Цикл
|
||||
Наборы = Новый Массив;
|
||||
Тесты = Новый Массив;
|
||||
ЗапускаемыеМодули = Новый Соответствие();
|
||||
ЗапускаемыеНаборы = Новый Соответствие();
|
||||
|
||||
Для Каждого Идендификатор Из ВыделенныеСтроки Цикл
|
||||
|
||||
НаборыКЗапуску = Новый Массив();
|
||||
|
||||
Для Каждого Набор Из Модуль.НаборыТестов Цикл
|
||||
|
||||
Если ВыделенныеСтроки.Найти(Набор.Идентификатор) <> Неопределено Тогда
|
||||
НаборыКЗапуску.Добавить(Набор);
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТестыКЗапуску = Новый Массив();
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
Если ВыделенныеСтроки.Найти(Тест.Идентификатор) <> Неопределено Тогда
|
||||
ТестыКЗапуску.Добавить(Тест);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если ТестыКЗапуску.Количество() Тогда
|
||||
ЗапускаемыйНабор = ЮТКоллекции.СкопироватьСтруктуру(Набор);
|
||||
ЗапускаемыйНабор.Тесты = ТестыКЗапуску;
|
||||
НаборыКЗапуску.Добавить(ЗапускаемыйНабор);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НаборыКЗапуску.Количество() Тогда
|
||||
|
||||
ЗапускаемыйМодуль = ЮТКоллекции.СкопироватьСтруктуру(Модуль);
|
||||
ЗапускаемыйМодуль.НаборыТестов = НаборыКЗапуску;
|
||||
МодулиКЗапуску.Добавить(ЗапускаемыйМодуль);
|
||||
|
||||
Если ДанныеПоИдентификаторам.Наборы[Идендификатор] <> Неопределено Тогда
|
||||
Наборы.Добавить(ДанныеПоИдентификаторам.Наборы[Идендификатор]);
|
||||
ЗапускаемыеМодули.Вставить(ДанныеПоИдентификаторам.Модули[Идендификатор]);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Идендификатор Из ВыделенныеСтроки Цикл
|
||||
|
||||
Тест = ДанныеПоИдентификаторам.Тесты[Идендификатор];
|
||||
Если Тест = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ИдентификаторНабора = ДеревоТестов.НайтиПоИдентификатору(Идендификатор).ПолучитьРодителя().ПолучитьИдентификатор();
|
||||
Набор = ДанныеПоИдентификаторам.Наборы[ИдентификаторНабора];
|
||||
Модуль = ДанныеПоИдентификаторам.Модули[ИдентификаторНабора];
|
||||
|
||||
Если Набор <> Неопределено И Наборы.Найти(Набор) = Неопределено Тогда
|
||||
Тесты.Добавить(Новый Структура("Тест, Набор", Тест, Набор));
|
||||
ЗапускаемыеМодули.Вставить(Модуль);
|
||||
ЗапускаемыеНаборы.Вставить(Набор);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Набор Из ЮТКоллекции.ВыгрузитьЗначения(ЗапускаемыеНаборы, "Ключ") Цикл
|
||||
Копия = ЮТКоллекции.СкопироватьСтруктуру(Набор, Ложь);
|
||||
Копия.Тесты = Новый Массив;
|
||||
ЗапускаемыеНаборы.Вставить(Набор, Копия);
|
||||
Наборы.Добавить(Копия);
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Тест Из Тесты Цикл
|
||||
ЗапускаемыйНабор = ЗапускаемыеНаборы[Тест.Набор];
|
||||
ЗапускаемыйНабор.Тесты.Добавить(Тест.Тест);
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Модуль Из ЮТКоллекции.ВыгрузитьЗначения(ЗапускаемыеМодули, "Ключ") Цикл
|
||||
Копия = ЮТКоллекции.СкопироватьСтруктуру(Модуль, Ложь);
|
||||
Копия.НаборыТестов = Новый Массив;
|
||||
ЗапускаемыеМодули.Вставить(Модуль, Копия);
|
||||
МодулиКЗапуску.Добавить(Копия);
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Набор Из Наборы Цикл
|
||||
|
||||
Модуль = ДанныеПоИдентификаторам.Модули[Набор.Идентификатор];
|
||||
ЗапускаемыйМодуль = ЗапускаемыеМодули[Модуль];
|
||||
ЗапускаемыйМодуль.НаборыТестов.Добавить(Набор);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МодулиКЗапуску;
|
||||
|
||||
КонецФункции
|
||||
@ -674,7 +705,7 @@
|
||||
КонецЦикла;
|
||||
|
||||
Если ТестыКЗапуску.Количество() Тогда
|
||||
ЗапускаемыйНабор = ЮТКоллекции.СкопироватьСтруктуру(Набор);
|
||||
ЗапускаемыйНабор = ЮТКоллекции.СкопироватьСтруктуру(Набор, Ложь);
|
||||
ЗапускаемыйНабор.Тесты = ТестыКЗапуску;
|
||||
НаборыКЗапуску.Добавить(ЗапускаемыйНабор);
|
||||
КонецЕсли;
|
||||
@ -683,7 +714,7 @@
|
||||
|
||||
Если НаборыКЗапуску.Количество() Тогда
|
||||
|
||||
ЗапускаемыйМодуль = ЮТКоллекции.СкопироватьСтруктуру(Модуль);
|
||||
ЗапускаемыйМодуль = ЮТКоллекции.СкопироватьСтруктуру(Модуль, Ложь);
|
||||
ЗапускаемыйМодуль.НаборыТестов = НаборыКЗапуску;
|
||||
МодулиКЗапуску.Добавить(ЗапускаемыйМодуль);
|
||||
|
||||
|
@ -36,6 +36,9 @@
|
||||
.ДобавитьТест("ВСтруктуру")
|
||||
.ДобавитьТест("ПредставлениеМассива")
|
||||
.ДобавитьТест("ОбъединитьМассивы")
|
||||
.ДобавитьТест("ЗначениеВМассиве_Производительность1")
|
||||
.ДобавитьТест("ЗначениеВМассиве_Производительность2")
|
||||
.ДобавитьТест("ЗначениеВМассиве_Производительность3")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -308,12 +311,13 @@
|
||||
Значение7 = ЮТест.Данные().СлучайнаяСтрока();
|
||||
Значение8 = ЮТест.Данные().СлучайнаяСтрока();
|
||||
Значение9 = ЮТест.Данные().СлучайнаяСтрока();
|
||||
Значение10 = ЮТест.Данные().СлучайнаяСтрока();
|
||||
|
||||
Результат = ЮТКоллекции.ЗначениеВМассиве(Значение1, Значение2, Значение3, Значение4, , Значение6, Значение7, Значение8, Значение9);
|
||||
Результат = ЮТКоллекции.ЗначениеВМассиве(Значение1, Значение2, Значение3, Значение4, , Значение6, Значение7, Значение8, Значение9, Значение10);
|
||||
|
||||
ЮТест.ОжидаетЧто(Результат, "Массив значений после добавления")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(9)
|
||||
.ИмеетДлину(10)
|
||||
.Элемент(0).Равно(Значение1)
|
||||
.Элемент(1).Равно(Значение2)
|
||||
.Элемент(2).Равно(Значение3)
|
||||
@ -322,7 +326,50 @@
|
||||
.Элемент(5).Равно(Значение6)
|
||||
.Элемент(6).Равно(Значение7)
|
||||
.Элемент(7).Равно(Значение8)
|
||||
.Элемент(8).Равно(Значение9);
|
||||
.Элемент(8).Равно(Значение9)
|
||||
.Элемент(9).Равно(Значение10);
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТКоллекции.ЗначениеВМассиве(Значение1), "Один элемент")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(1)
|
||||
.Элемент(0).Равно(Значение1);
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТКоллекции.ЗначениеВМассиве(Значение1, , Значение3), "Пропуск элемента")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(3)
|
||||
.Элемент(0).Равно(Значение1)
|
||||
.Элемент(1).Равно(Неопределено)
|
||||
.Элемент(2).Равно(Значение3);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗначениеВМассиве_Производительность1() Экспорт
|
||||
|
||||
Итерация = 10000;
|
||||
|
||||
Для Инд = 1 По Итерация Цикл
|
||||
ЮТКоллекции.ЗначениеВМассиве(1);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗначениеВМассиве_Производительность2() Экспорт
|
||||
|
||||
Итерация = 10000;
|
||||
|
||||
Для Инд = 1 По Итерация Цикл
|
||||
ЗначениеВМассиве2(1);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗначениеВМассиве_Производительность3() Экспорт
|
||||
|
||||
Итерация = 10000;
|
||||
|
||||
Для Инд = 1 По Итерация Цикл
|
||||
ЗначениеВМассиве3(1);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -463,4 +510,89 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеВМассиве2(Значение1,
|
||||
Значение2 = "_!%*",
|
||||
Значение3 = "_!%*",
|
||||
Значение4 = "_!%*",
|
||||
Значение5 = "_!%*",
|
||||
Значение6 = "_!%*",
|
||||
Значение7 = "_!%*",
|
||||
Значение8 = "_!%*",
|
||||
Значение9 = "_!%*",
|
||||
Значение10 = "_!%*")
|
||||
|
||||
Результат = Неопределено;
|
||||
|
||||
ДобавитьЗначениеВМассив(Результат, Значение10, 9);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение9, 8);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение8, 7);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение7, 6);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение6, 5);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение5, 4);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение4, 3);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение3, 2);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение2, 1);
|
||||
ДобавитьЗначениеВМассив(Результат, Значение1, 0);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеВМассиве3(Значение1,
|
||||
Значение2 = "_!%*",
|
||||
Значение3 = "_!%*",
|
||||
Значение4 = "_!%*",
|
||||
Значение5 = "_!%*",
|
||||
Значение6 = "_!%*",
|
||||
Значение7 = "_!%*",
|
||||
Значение8 = "_!%*",
|
||||
Значение9 = "_!%*",
|
||||
Значение10 = "_!%*")
|
||||
|
||||
Значения = Новый Массив(10);
|
||||
Значения[0] = Значение1;
|
||||
Значения[1] = Значение2;
|
||||
Значения[2] = Значение3;
|
||||
Значения[3] = Значение4;
|
||||
Значения[4] = Значение5;
|
||||
Значения[5] = Значение6;
|
||||
Значения[6] = Значение7;
|
||||
Значения[7] = Значение8;
|
||||
Значения[8] = Значение9;
|
||||
Значения[9] = Значение10;
|
||||
|
||||
Для Инд = -9 По 0 Цикл
|
||||
Если Значения[-Инд] <> "_!%*" Тогда
|
||||
Результат = Новый Массив(1 - Инд);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Для Инд = 0 По Результат.ВГраница() Цикл
|
||||
Если Значения[Инд] <> "_!%*" Тогда
|
||||
Результат[Инд] = Значения[Инд];
|
||||
Иначе
|
||||
Результат[Инд] = Неопределено;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьЗначениеВМассив(Результат, Значение, Индекс)
|
||||
|
||||
Если Результат = Неопределено И Значение = "_!%*" Тогда
|
||||
Возврат;
|
||||
ИначеЕсли Результат <> Неопределено И Значение = "_!%*" Тогда
|
||||
Результат[Индекс] = Неопределено;
|
||||
ИначеЕсли Результат <> Неопределено Тогда
|
||||
Результат[Индекс] = Значение;
|
||||
Иначе
|
||||
Результат = Новый Массив(Индекс + 1);
|
||||
Результат[Индекс] = Значение;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
Loading…
x
Reference in New Issue
Block a user