From 2a0387b8cbae59a174c0c723a0aa03403f38dcae Mon Sep 17 00:00:00 2001 From: sfaqer Date: Fri, 30 Aug 2024 16:44:55 +1000 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A7=D0=B5=D1=80=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BA=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 56 +++++++++++++++++++ src/internal/lib.config | 5 +- ...20\265\321\200\320\265\320\264\321\214.os" | 26 +++++++++ ...20\265\321\200\320\265\320\264\321\214.os" | 15 +++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 "src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" create mode 100644 "src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" diff --git a/README.md b/README.md index e73970d..57f4915 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,17 @@ class Список { +Установить(Индекс: Число, Значение: Произвольный) Произвольный } +class ЧитаемаяОчередь { + <<Интерфейс>> + +Подсмотреть() Опциональный~Произвольный~ +} + +class Очередь { + <<Интерфейс>> + +Положить() Булево + +Взять() Опциональный~Произвольный~ +} + class ФиксированнаяКоллекция { -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) } @@ -150,6 +161,9 @@ class СинхронизированныйСписок { Список <|.. СписокМассив Список <|.. СинхронизированныйСписок +ЧитаемаяКоллекция <|-- ЧитаемаяОчередь +ЧитаемаяОчередь <|-- Очередь + ``` ### Карта @@ -779,6 +793,48 @@ class ИтераторЗначениеСоответствие { ``` --- +## ЧитаемаяОчередь + +### Подсмотреть + +```bsl +// Возвращает, но не удаляет первый элемент очереди +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста +// +Функция Подсмотреть() +``` +--- + +## Очередь + +### Положить + +```bsl +// Добавляет элемент в очередь +// +// Параметры: +// Элемент - Произвольный - Элемент, который требуется поместить в очередь +// +// Возвращаемое значение: +// Булево - Истина, если элемент был добавлен в очередь, Ложь в противном случае +// +Функция Положить(Элемент) +``` + +### Взять + +```bsl +// Возвращает и удаляет первый элемент очереди +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста +// +Функция Взять() +``` +--- + ## ЧитаемаяКарта ### СодержитКлюч diff --git a/src/internal/lib.config b/src/internal/lib.config index 645a09a..75c6760 100644 --- a/src/internal/lib.config +++ b/src/internal/lib.config @@ -13,7 +13,8 @@ - + + @@ -22,6 +23,8 @@ + + diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" new file mode 100644 index 0000000..7e8ef54 --- /dev/null +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -0,0 +1,26 @@ +// BSLLS:FunctionShouldHaveReturn-off + +// Добавляет элемент в очередь +// +// Параметры: +// Элемент - Произвольный - Элемент, который требуется поместить в очередь +// +// Возвращаемое значение: +// Булево - Истина, если элемент был добавлен в очередь, Ложь в противном случае +// +Функция Положить(Элемент) Экспорт +КонецФункции + +// Возвращает и удаляет первый элемент очереди +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста +// +Функция Взять() Экспорт +КонецФункции + +&Интерфейс +&Наследует("ЧитаемаяОчередь") +Процедура ПриСозданииОбъекта() + ВызватьИсключение "Нельзя создать экземпляр интерфейса"; +КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" new file mode 100644 index 0000000..beaf7b1 --- /dev/null +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -0,0 +1,15 @@ +// BSLLS:FunctionShouldHaveReturn-off + +// Возвращает, но не удаляет первый элемент очереди +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста +// +Функция Подсмотреть() Экспорт +КонецФункции + +&Интерфейс +&Наследует("ЧитаемаяКоллекция") +Процедура ПриСозданииОбъекта() + ВызватьИсключение "Нельзя создать экземпляр интерфейса"; +КонецПроцедуры From 167ea78c05f9da92557f6ced0dc6257cae2285f1 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Thu, 26 Sep 2024 13:05:54 +1000 Subject: [PATCH 2/4] =?UTF-8?q?=D0=92=D0=B0=D0=B6=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F:=201.=20?= =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=B2=D1=81=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8C:=20=D0=9A=D0=B0=D1=80=D1=82=D0=B0=20->=20?= =?UTF-8?q?=D0=9A=D0=B0=D1=80=D1=82=D1=8B=202.=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B2=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C:=20?= =?UTF-8?q?=D0=9C=D0=BD=D0=BE=D0=B6=D0=B5=D1=81=D1=82=D0=B2=D0=BE=20->=20?= =?UTF-8?q?=D0=9C=D0=BD=D0=BE=D0=B6=D0=B5=D1=81=D1=82=D0=B2=D0=B0=203.=20?= =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=B2=D1=81=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8C:=20=D0=A1=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20->?= =?UTF-8?q?=20=D0=A1=D0=BF=D0=B8=D1=81=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Изменения: 1. ИтераторМассив теперь СписокИтераторМассив, новый ИтераторМассив теперь обёртка над СписокИтераторМассив, но реализующий только контракт Итератора, а не СписокИтератора 2. Списки теперь возращают СписокИтераторМассив 3. Синхронизированные вьюхи коллекций теперь пробрасывают оригинальные исключения наверх Добавлено: 1. Интерфейсы для новых типов коллекций Очереди 2. Коллекция ОчередьМассив - Простая FIFO очередь 3. Коллекция ПриоритетнаяОчередь - Очередь с компаратором вверху которой всегда находится самый приоритетный элемент 4. Коллекция ОчередьОтложенных - Частный случай приоритетной очереди, элементы которой должны реализовывать интерфейс "Отложенный", и возвращаются только когда наступает их время 5. Добавлен хелпер "Массивы.ИзЭлементов()" для быстрого создания массивов 5. Добавлен хелпер "Соответствия.ИзЭлементов()" для быстрого создания соответствий 5. Добавлен хелпер "Соответствия.Скопировать()" для быстрого копирования соответствий Документация: 1. В README оставлено только общее описание и диаграмма классов 2. Диагрммы классов разделены по родительским интерфейсам 3. Описание программного интерфейса разбито для каждого интерфейса отдельно и разложено в разделе /doc --- README.md | 1087 ++------------- ...21\200\320\260\321\202\320\276\321\200.md" | 11 + ...21\200\320\260\321\202\320\276\321\200.md" | 25 + ...21\200\320\260\321\202\320\276\321\200.md" | 41 + ...21\200\320\260\321\202\320\276\321\200.md" | 47 + ...20\232\320\260\321\200\321\202\320\260.md" | 221 +++ ...20\232\320\260\321\200\321\202\320\260.md" | 130 ++ ...20\265\321\201\321\202\320\262\320\276.md" | 3 + ...20\265\321\201\321\202\320\262\320\276.md" | 3 + ...20\265\320\272\321\206\320\270\321\217.md" | 99 ++ ...20\264\320\270\320\274\320\276\320\265.md" | 30 + ...20\265\320\272\321\206\320\270\321\217.md" | 75 ++ ...20\265\321\200\320\265\320\264\321\214.md" | 28 + ...20\265\321\200\320\265\320\264\321\214.md" | 14 + ...20\277\320\270\321\201\320\276\320\272.md" | 110 ++ ...20\277\320\270\321\201\320\276\320\272.md" | 56 + lib.config | 11 +- src/internal/lib.config | 1 + ...20\265\321\200\320\265\320\264\321\214.os" | 1 + ...20\260\321\201\321\201\320\270\320\262.os" | 137 +- ...20\260\321\201\321\201\320\270\320\262.os" | 147 ++ ...20\265\320\261\320\275\321\213\320\271.os" | 10 +- ...20\265\320\261\320\275\321\213\320\271.os" | 14 +- ...20\232\320\260\321\200\321\202\320\260.os" | 44 +- ...20\265\321\201\321\202\320\262\320\276.os" | 26 +- ...20\260\321\201\321\201\320\270\320\262.os" | 250 ++++ ...20\265\320\275\320\275\321\213\321\205.os" | 190 +++ ...20\265\321\200\320\265\320\264\321\214.os" | 289 ++++ ...20\265\321\200\320\265\320\264\321\214.os" | 297 ++++ ...20\265\320\272\321\206\320\270\321\217.os" | 26 +- ...20\277\320\270\321\201\320\276\320\272.os" | 46 +- ...20\260\321\201\321\201\320\270\320\262.os" | 10 +- ...20\232\320\260\321\200\321\202\321\213.os" | 0 ...21\201\321\201\320\270\320\262\321\213.os" | 32 + ...20\265\321\201\321\202\320\262\320\260.os" | 0 ...21\201\321\202\320\262\320\270\321\217.os" | 34 + ...20\277\320\270\321\201\320\272\320\270.os" | 0 ...20\260\321\201\321\201\320\270\320\262.os" | 305 +---- ...20\232\320\260\321\200\321\202\321\213.os" | 8 +- ...21\201\321\201\320\270\320\262\321\213.os" | 23 + ...20\265\321\201\321\202\320\262\320\260.os" | 8 +- ...20\260\321\201\321\201\320\270\320\262.os" | 1073 +++++++++++++++ ...20\265\320\275\320\275\321\213\321\205.os" | 876 ++++++++++++ ...20\265\321\200\320\265\320\264\321\214.os" | 1192 +++++++++++++++++ ...20\232\320\260\321\200\321\202\320\260.os" | 99 +- ...20\265\320\272\321\206\320\270\321\217.os" | 64 +- ...20\265\321\200\320\265\320\264\321\214.os" | 657 +++++++++ ...20\265\321\201\321\202\320\262\320\276.os" | 62 +- ...20\277\320\270\321\201\320\276\320\272.os" | 92 +- ...21\201\321\202\320\262\320\270\321\217.os" | 75 ++ ...20\277\320\270\321\201\320\272\320\270.os" | 8 +- ...20\260\321\201\321\201\320\270\320\262.os" | 554 ++++++++ ...20\260\321\201\321\201\320\270\320\262.os" | 6 +- .../lib.config" | 1 + ...20\265\320\275\320\275\321\213\320\271.os" | 38 + ...20\276\320\264\321\203\320\273\321\214.os" | 55 +- ...20\265\320\272\321\206\320\270\321\217.os" | 2 +- ...20\265\321\201\321\202\320\262\320\276.os" | 2 +- ...20\277\320\270\321\201\320\276\320\272.os" | 2 +- ...21\200\320\260\321\202\320\276\321\200.os" | 24 +- 60 files changed, 7018 insertions(+), 1753 deletions(-) create mode 100644 "doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" create mode 100644 "doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" create mode 100644 "doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" create mode 100644 "doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" create mode 100644 "doc/\320\232\320\260\321\200\321\202\321\213/\320\232\320\260\321\200\321\202\320\260.md" create mode 100644 "doc/\320\232\320\260\321\200\321\202\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\260\321\200\321\202\320\260.md" create mode 100644 "doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" create mode 100644 "doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\247\320\270\321\202\320\260\320\265\320\274\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" create mode 100644 "doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" create mode 100644 "doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265.md" create mode 100644 "doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" create mode 100644 "doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" create mode 100644 "doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" create mode 100644 "doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" create mode 100644 "doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.md" create mode 100644 "src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" create mode 100644 "src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" create mode 100644 "src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" create mode 100644 "src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" create mode 100644 "src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" rename "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\320\260.os" => "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213.os" (100%) rename "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" => "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" (100%) rename "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.os" => "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\277\320\270\321\201\320\272\320\270.os" (100%) rename "tests/\320\232\320\260\321\200\321\202\320\260.os" => "tests/\320\232\320\260\321\200\321\202\321\213.os" (88%) rename "tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" => "tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" (86%) create mode 100644 "tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" create mode 100644 "tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" create mode 100644 "tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" create mode 100644 "tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" create mode 100644 "tests/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" rename "tests/\320\241\320\277\320\270\321\201\320\276\320\272.os" => "tests/\320\241\320\277\320\270\321\201\320\272\320\270.os" (85%) create mode 100644 "tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\320\271.os" diff --git a/README.md b/README.md index 57f4915..0220b1a 100644 --- a/README.md +++ b/README.md @@ -36,15 +36,19 @@ ```mermaid classDiagram -direction LR +Обходимое <|-- ЧитаемаяКоллекция +ЧитаемаяКоллекция <|-- Коллекция + +ЧитаемаяКоллекция <|.. ФиксированнаяКоллекция +Коллекция <|.. СинхронизированнаяКоллекция -class Обходимое{ +class Обходимое { <<Интерфейс>> +Итератор() ЧитающийИтератор +ДляКаждого(Алгоритм: Действие) Ничто } -class ЧитаемаяКоллекция{ +class ЧитаемаяКоллекция { <<Интерфейс>> +Содержит(Элемент: Произвольный) Булево +СодержитВсе(Коллекция: ЧитаемыйКоллекция) Булево @@ -53,7 +57,7 @@ class ЧитаемаяКоллекция{ +Количество() Число } -class Коллекция{ +class Коллекция { <<Интерфейс>> +Итератор() Итератор +Добавить(Элемент: Произвольный) Булево @@ -66,6 +70,29 @@ class Коллекция{ +ВМассив() Массив } +class ФиксированнаяКоллекция { + -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) +} + +class СинхронизированнаяКоллекция { + -ПриСозданииОбъекта(Коллекция: Коллекция) +} +``` + +### Множество +--- + +```mermaid +classDiagram + +ЧитаемаяКоллекция <|-- ЧитаемоеМножество +ЧитаемоеМножество <|-- Множество +Коллекция <|-- Множество + +ЧитаемоеМножество <|.. ФиксированноеМножество +Множество <|.. МножествоСоответствие +Множество <|.. СинхронизированноеМножество + class ЧитаемоеМножество { <<Интерфейс>> } @@ -74,6 +101,33 @@ class Множество { <<Интерфейс>> } +class ФиксированноеМножество { + -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) +} + +class МножествоСоответствие { + -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) +} + +class СинхронизированноеМножество { + -ПриСозданииОбъекта(Коллекция: Множество) +} +``` + +### Список +--- + +```mermaid +classDiagram + +ЧитаемаяКоллекция <|-- ЧитаемыйСписок +Коллекция <|-- Список +ЧитаемыйСписок <|-- Список +ЧитаемыйСписок <|.. ФиксированныйСписок + +Список <|.. СписокМассив +Список <|.. СинхронизированныйСписок + class ЧитаемыйСписок { <<Интерфейс>> +Получить(Индекс: Число) Произвольный @@ -92,29 +146,6 @@ class Список { +Установить(Индекс: Число, Значение: Произвольный) Произвольный } -class ЧитаемаяОчередь { - <<Интерфейс>> - +Подсмотреть() Опциональный~Произвольный~ -} - -class Очередь { - <<Интерфейс>> - +Положить() Булево - +Взять() Опциональный~Произвольный~ -} - -class ФиксированнаяКоллекция { - -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) -} - -class ФиксированноеМножество { - -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) -} - -class МножествоСоответствие { - -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) -} - class ФиксированныйСписок { -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) } @@ -123,46 +154,53 @@ class СписокМассив { -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) } -class СинхронизированнаяКоллекция { - -ПриСозданииОбъекта(Коллекция: Коллекция) -} - -class СинхронизированноеМножество { - -ПриСозданииОбъекта(Коллекция: Множество) -} - class СинхронизированныйСписок { -ПриСозданииОбъекта(Коллекция: Список) } -Обходимое <|-- ЧитаемаяКоллекция +``` -ЧитаемаяКоллекция <|-- ФиксированнаяКоллекция +### Очередь +--- -ЧитаемаяКоллекция <|-- Коллекция +```mermaid +classDiagram -ЧитаемаяКоллекция <|-- ЧитаемоеМножество +ЧитаемаяКоллекция <|-- ЧитаемаяОчередь +ЧитаемаяОчередь <|-- Очередь +Коллекция <|-- Очередь -ЧитаемоеМножество <|-- Множество -Коллекция <|-- Множество +Очередь <|.. ОчередьМассив +Очередь <|.. ПриоритетнаяОчередь +Очередь <|.. ОчередьОтложенных +Очередь <|.. СинхронизированнаяОчередь -ЧитаемаяКоллекция <|-- ЧитаемыйСписок +class ЧитаемаяОчередь { + <<Интерфейс>> + +Подсмотреть() Опциональный~Произвольный~ +} -Коллекция <|-- Список -ЧитаемыйСписок <|-- Список +class Очередь { + <<Интерфейс>> + +Положить() Булево + +Взять() Опциональный~Произвольный~ +} -Коллекция <|.. СинхронизированнаяКоллекция +class ОчередьМассив { + -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) +} -ЧитаемоеМножество <|.. ФиксированноеМножество -Множество <|.. МножествоСоответствие -Множество <|.. СинхронизированноеМножество +class ПриоритетнаяОчередь { + -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) +} -ЧитаемыйСписок <|.. ФиксированныйСписок -Список <|.. СписокМассив -Список <|.. СинхронизированныйСписок +class ОчередьОтложенных { + -ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция) +} -ЧитаемаяКоллекция <|-- ЧитаемаяОчередь -ЧитаемаяОчередь <|-- Очередь +class СинхронизированнаяОчередь { + -ПриСозданииОбъекта(Коллекция: Очередь) +} ``` @@ -172,6 +210,13 @@ class СинхронизированныйСписок { ```mermaid classDiagram +ЧитаемаяКарта <|-- Карта + +ЧитаемаяКарта <|.. ФиксированнаяКарта +Карта <|.. КартаСоответствие + +Карта <|.. СинхронизированнаяКарта + class ЧитаемаяКарта { <<Интерфейс>> +СодержитКлюч(Ключ: Произвольный) Булево @@ -213,14 +258,6 @@ class КартаСоответствие { class СинхронизированнаяКарта { -ПриСозданииОбъекта(Карта: Карта) } - -ЧитаемаяКарта <|-- Карта - -ЧитаемаяКарта <|.. ФиксированнаяКарта -Карта <|.. КартаСоответствие - -Карта <|.. СинхронизированнаяКарта - ``` ### Итератор @@ -229,6 +266,23 @@ class СинхронизированнаяКарта { ```mermaid classDiagram +ЧитающийИтератор <|-- Итератор + +ЧитающийИтератор <|-- ЧитающийСписокИтератор +ЧитающийСписокИтератор <|-- СписокИтератор + +ЧитающийСписокИтератор <|.. ФиксированныйСписокИтератор +СписокИтератор <|.. СписокИтераторМассив + +Итератор <|.. ИтераторМассив + +ЧитающийИтератор <|.. ФиксированныйИтератор +Итератор <|.. ИтераторСоответствие + +Итератор <|.. ИтераторКлючСоответствие + +Итератор <|.. ИтераторЗначениеСоответствие + class ЧитающийИтератор { <<Интерфейс>> +ЕстьСледующий() Булево @@ -259,6 +313,10 @@ class ФиксированныйСписокИтератор { -ПриСозданииОбъекта(Итератор: СписокИтератор) Ничто } +class СписокИтераторМассив { + -ПриСозданииОбъекта(Массив: Массив, Источник: Обходимое|Карта) Ничто +} + class ИтераторМассив { -ПриСозданииОбъекта(Массив: Массив, Источник: Обходимое|Карта) Ничто } @@ -278,911 +336,4 @@ class ИтераторКлючСоответствие { class ИтераторЗначениеСоответствие { -ПриСозданииОбъекта(Соответствие: Соответствие, Источник: Обходимое|Карта) Ничто } - -ЧитающийИтератор <|-- Итератор - -ЧитающийИтератор <|-- ЧитающийСписокИтератор -ЧитающийСписокИтератор <|-- СписокИтератор - -ЧитающийСписокИтератор <|.. ФиксированныйСписокИтератор -СписокИтератор <|.. ИтераторМассив - -ЧитающийИтератор <|.. ФиксированныйИтератор -Итератор <|.. ИтераторСоответствие - -Итератор <|.. ИтераторКлючСоответствие - -Итератор <|.. ИтераторЗначениеСоответствие - -``` - -# Программный интерфейс - -## ЧитающийИтератор - -### ЕстьСледующий - -```bsl -// Проверяет что есть следующий элемент коллекции -// -// Возвращаемое значение: -// Булево - Истина, если есть следующий элемент коллекции -// -Функция ЕстьСледующий() -``` - -### Следующий - -```bsl -// Возвращает следующий элемент коллекции -// -// Возвращаемое значение: -// Произвольный - следующий элемент коллекции -// -Функция Следующий() -``` - -### ДляКаждогоОставшегося - -```bsl -// Выполняет переданный алгоритм для каждого элемента коллекции -// начиная с того на который указывает итератор -// -// Параметры: -// Действие - Действие - Делегат на процедуру с одним параметром -// которая принимает элемент коллекции -// - Строка - Лямбда выражение с одним параметром -// которая принимает элемент коллекции -// -// Пример: -// Итератор.ДляКаждогоОставшегося(Элемент -> Сообщить(Элемент)); -// -Процедура ДляКаждогоОставшегося(Действие) -``` - ---- - -## Итератор - -### Удалить - -```bsl -// Удаляет элемент на который указывает итератор -// -Процедура Удалить() -``` ---- -## ЧитающийСписокИтератор - -### ЕстьПредыдущий - -```bsl -// Проверяет что есть предыдущий элемент коллекции -// -// Возвращаемое значение: -// Булево - Истина, если есть предыдущий элемент коллекции -// -Функция ЕстьПредыдущий() -``` - -### Предыдущий - -```bsl -// Возвращает предыдущий элемент коллекции -// -// Возвращаемое значение: -// Произвольный - предыдущий элемент коллекции -// -Функция Предыдущий() -``` - -### СледующийИндекс - -```bsl -// Возвращает индекс на который указывает итератор -// -// Возвращаемое значение: -// Число - Индекс на который указывает итератор -// -Функция СледующийИндекс() -``` - -### ПредыдущийИндекс - -```bsl -// Возвращает предыдущий индекс от того на который указывает итератор -// -// Возвращаемое значение: -// Число - Предыдущий индекс от того на который указывает итератор -// -Функция ПредыдущийИндекс() -``` ---- -## СписокИтератор - -### Установить - -```bsl -// Заменяет значение на которое указывает итератор -// -// Параметры: -// Элемент - Произвольный - Устанавливаемый элемент -// -Процедура Установить(Элемент) -``` - -### Вставить - -```bsl -// Вставляет элемент по месту указания итератора -// -// Параметры: -// Элемент - Произвольный - вставляемый элемент -// -Процедура Вставить(Элемент) -``` ---- - -## Обходимое - -### Итератор - -```bsl -// Возвращает итератор коллекции -// -// Возвращаемое значение: -// Итератор - Итератор коллекции -// -Функция Итератор() -``` - -### ДляКаждого - -```bsl -// Выполняет переданный алгоритм для каждого элемента коллекции -// -// Параметры: -// Алгоритм - Действие - Делегат на процедуру с одним параметром, в который -// будет передан элемент коллекции -// - Строка - Лямбда выражение с одним параметром, в который будет -// будет передан элемент коллекции -// -// Пример: -// Обходимое.ДляКаждого("Элемент -> Сообщить(Элемент)"); -// -Процедура ДляКаждого(Алгоритм) -``` ---- - -## ЧитаемаяКоллекция - -### Содержит - -```bsl -// Проверяет содержится ли указанный элемент в коллекции -// -// Параметры: -// Элемент - Произвольный - Проверяемый элемент -// -// Возвращаемое значение: -// Булево - Истина, если коллекция содержит указанный элемент -// -Функция Содержит(Элемент) -``` - -### СодержитВсе - -```bsl -// Проверяет что коллекция содержит все элементы переданной коллекции -// -// Параметры: -// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой проверяются на вхождение -// -// Возвращаемое значение: -// Булево - Истина, если коллекция содержит все элементы переданной коллекции -// -Функция СодержитВсе(Коллекция) -``` - -### Пусто - -```bsl -// Проверяет что коллекция пустая -// -// Возвращаемое значение: -// Булево - Истина, если коллекция пуста -// -Функция Пусто() -``` - -### ПроцессорКоллекции - -```bsl -// Возвращает процессор коллекции по текущей коллекции -// -// Возвращаемое значение: -// ПроцессорКоллекций - Процессор коллекции -// -Функция ПроцессорКоллекции() -``` - -### Количество - -```bsl -// Возвращает количество элементов коллекции -// -// Возвращаемое значение: -// Число - Количество элементов коллекции -// -Функция Количество() -``` - -### ВМассив - -```bsl -// Выгружает элементы коллекции в массив -// -// Возвращаемое значение: -// Массив из Произвольный - массив элементов коллекции -// -Функция ВМассив() -``` ---- - -## Коллекция - -### Добавить - -```bsl -// Добавляет элемент в коллекцию -// -// Параметры: -// Элемент - Произвольный - Добавляемый элемент -// -// Возвращаемое значение: -// Булево - Истина, если элемент добавлен -// -Функция Добавить(Элемент) -``` - -### ДобавитьВсе - -```bsl -// Добавляет все элементы из переданной коллекции -// -// Параметры: -// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой требуется добавить -// -// Возвращаемое значение: -// Булево - Истина, если был добавлен хотя бы один элемент -// -Функция ДобавитьВсе(Коллекция) -``` - -### Очистить - -```bsl -// Очищает коллекцию -// -Процедура Очистить() -``` - -### Удалить - -```bsl -// Удаляет переданный элемент из коллекции -// -// Параметры: -// Элемент - Произвольный - Удаляемый элемент -// -// Возвращаемое значение: -// Булево - Истина, если элемент был удалён -// -Функция Удалить(Элемент) -``` - -### УдалитьВсе - -```bsl -// Удаляет все элементы которые содержаться в переданной коллекции -// -// Параметры: -// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой будут удалены -// -// Возвращаемое значение: -// Булево - Истина, если был удалён хотя бы один элемент -// -Функция УдалитьВсе(Коллекция) -``` - -### УдалитьЕсли - -```bsl -// Удаляет элементы для которых функция предикат вернёт Истина -// -// Параметры: -// Предикат - Действие - Делегат на функцию с одним параметром, в которой передаётся элемент коллекции -// - Строка - Лямбда выражение с одним параметром, в который передаётся элемент коллекции -// -// Пример: -// Коллекция.УдалитьЕсли("(Элемент) -> Элемент >= 2"); -// -// Возвращаемое значение: -// Булево - Истина, если был удалён хотя бы один элемент -// -Функция УдалитьЕсли(Предикат) -``` - -### СохранитьВсе - -```bsl -// Удаляет все элементы которые не содержаться в переданной коллекции -// -// Параметры: -// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой будут сохранены -// -// Возвращаемое значение: -// Булево - Истина, если был удалён хотя бы один элемент -// -Функция СохранитьВсе(Коллекция) -``` ---- - -## ЧитаемыйСписок - -### Получить - -```bsl -// Получает элемент коллекции по индексу -// -// Параметры: -// Индекс - Число - Индекс, по которому требуется получить элемент списка -// -// Возвращаемое значение: -// Произвольный - элемент списка по переданному индексу -// -Функция Получить(Индекс) -``` - -### Индекс - -```bsl -// Возвращает индекс первого вхождения переданного элемента -// -// Параметры: -// Элемент - Произвольный - Элемент, индекс которого требуется получить -// -// Возвращаемое значение: -// Число - Индекс элемента коллекции, или -1 если коллекция не содержит элемент -// -Функция Индекс(Элемент) -``` - -### ПоследнийИндекс - -```bsl -// Возвращает индекс последнего вхождения переданного элемента -// -// Параметры: -// Элемент - Произвольный - Элемент, индекс которого требуется получить -// -// Возвращаемое значение: -// Число - Индекс элемента коллекции, или -1 если коллекция не содержит элемент -// -Функция ПоследнийИндекс(Элемент) -``` - -### ВГраница - -```bsl -// Возвращает максимальный индекс списка -// -// Возвращаемое значение: -// Число - максимальный индекс списка -// -Функция ВГраница() -``` - -## Список - -### Вставить - -```bsl -// Вставляет элемент в список по индексу -// -// Параметры: -// Индекс - Число - Индекс, по которому будет вставлен элемент -// Элемент - Произвольный - Вставляемый элемент -// -// Возвращаемое значение: -// Булево - Истина, если элемент вставлен -// -Функция Вставить(Индекс, Элемент) -``` - -### ВставитьВсе - -```bsl -// Вставляет все элементы из коллекции начиная с индекса -// -// Параметры: -// Индекс - Число - Индекс, начиная с которого будет вставлены элементы -// Коллекция - ЧитаемыйКоллекция - Коллекция, из которой будут вставлены элементы -// -// Возвращаемое значение: -// Булево - Истина, если был вставлен хотя бы один элемент -// -Функция ВставитьВсе(Индекс, Коллекция) -``` - -### ЗаменитьВсе - -```bsl -// Заменяет все элементы в списке через алгоритм -// -// Параметры: -// Алгоритм - Действие - Делегат на функцию с одним параметром, в которую передаётся -// элемент списка, и которая возвращает новое значение элемента -// - Строка - Лямбда выражение с одним параметром, в который передаётся -// элемент списка, и которая возвращает новое значение элемента -// -// Пример: -// Список.ЗаменитьВсе("Элемент -> Элемент + 1"); -// -Процедура ЗаменитьВсе(Алгоритм) -``` - -### Сортировать - -```bsl -// Сортирует список в соответствии с переданным алгоритмом -// -// Параметры: -// СравнениеЗначений - Действие - Делегат на функцию с двумя параметрами -// в которую передаются 2 элемента коллекции, и которая возвращает число -// 1 - Если первый элемент больше, -// -1 - Если второй элемент больше, -// 0 - Если элементы равны -// - Строка - Лямбда выражение с двумя параметрами -// в которую передаются 2 элемента коллекции, и которая возвращает число -// 1 - Если первый элемент больше, -// -1 - Если второй элемент больше, -// 0 - Если элементы равны -// -// Пример: -// Список.Сортировать("Первый, Второй -> { -// | Если Первый > Второй Тогда -// | Возврат 1; -// | ИначеЕсли Второй > Первый Тогда -// | Возврат -1; -// | Иначе -// | Возврат 0; -// | КонецЕсли; -// |}" -// ); -// -``` - -### УдалитьПоИндексу - -```bsl -// Удаляет элемент списка по индексу -// -// Параметры: -// Индекс - Число - Индекс удаляемого элемента -// -// Возвращаемое значение: -// Произвольный - Значение которое было удалено -// -Функция УдалитьПоИндексу(Индекс) -``` - -### Установить - -```bsl -// Устанавливает значение по индексу -// -// Параметры: -// Индекс - Число - Индекс устанавливаемого элемента -// Значение -Произвольный - Устанавливаемый элемент -// -// Возвращаемое значение: -// Произвольный - Значение которое было заменено -// -Функция Установить(Индекс, Значение) -``` ---- - -## ЧитаемаяОчередь - -### Подсмотреть - -```bsl -// Возвращает, но не удаляет первый элемент очереди -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста -// -Функция Подсмотреть() -``` ---- - -## Очередь - -### Положить - -```bsl -// Добавляет элемент в очередь -// -// Параметры: -// Элемент - Произвольный - Элемент, который требуется поместить в очередь -// -// Возвращаемое значение: -// Булево - Истина, если элемент был добавлен в очередь, Ложь в противном случае -// -Функция Положить(Элемент) -``` - -### Взять - -```bsl -// Возвращает и удаляет первый элемент очереди -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста -// -Функция Взять() -``` ---- - -## ЧитаемаяКарта - -### СодержитКлюч - -```bsl -// Проверяет что карта содержит переданный ключ -// -// Параметры: -// Ключ - Произвольный - Проверяемый ключ -// -// Возвращаемое значение: -// Булево - Истина, если карта содержит указанный ключ -// -Функция СодержитКлюч(Ключ) -``` - -### СодержитЗначение - -```bsl -// Проверяет что карта содержит указанное значение -// -// Параметры: -// Значение - Произвольный - Проверяемое значение -// -// Возвращаемое значение: -// Булево - Истина, если карта содержит указанное значение -// -Функция СодержитЗначение(Значение) -``` - -### ДляКаждого - -```bsl -// Выполняет переданное действие для каждого элемента карты -// -// Параметры: -// Алгоритм - Действие - Делегат на метод с двумя параметрами который будет выполнятся -// в первый параметр передаётся ключ во второй значение -// - Строка - Лямбда выражение с двумя параметрами в первый параметр передаётся ключ во второй значение -// -// Пример: -// Карта.ДляКаждого("(Ключ, Значение) -> Сообщить(СтрШаблон(""Ключ: %1, Значение:2"", Ключ, Значение))"); -// -Процедура ДляКаждого(Алгоритм) -``` - -### Получить - -```bsl -// Возвращает значение по ключу карты -// -// Параметры: -// Ключ - Произвольный - Ключ, по которому требуется получить значение -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Опциональный, в котором содержится полученное значение или -// пустой опциональный, если карта не содержит указанного ключа -// -Функция Получить(Ключ) -``` - -### ПолучитьИлиУмолчание - -```bsl -// Возвращает значение по ключу карты, или ЗначениеПоУмолчанию если карта не содержит ключ -// -// Параметры: -// Ключ - Произвольный - Ключ, по которому требуется получить значение -// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено если карта не содержит ключ -// -// Возвращаемое значение: -// Произвольный<Произвольный> - Значение полученное по ключу карты, или ЗначениеПоУмолчанию если карта не содержит ключ -// -Функция ПолучитьИлиУмолчание(Ключ, ЗначениеПоУмолчанию) -``` - -### Пусто - -```bsl -// Возвращает признак того что карта не содержит пар КлючИЗначение -// -// Возвращаемое значение: -// Булево - Истина, если карта не содержит пар КлючИЗначение -// -Функция Пусто() -``` - -### Ключи - -```bsl -// Возвращает множество ключей содержащихся в карте -// -// Возвращаемое значение: -// ЧитаемоеМножество - Множество ключей содержащихся в карте -// -Функция Ключи() -``` - -### Значения - -```bsl -// Возвращает коллекцию значений содержащихся в карте -// -// Возвращаемое значение: -// ЧитаемаяКоллекция - Коллекция значений содержащихся в карте -// -Функция Значения() -``` - -### КлючиИЗначения - -```bsl -// Возвращает множество пар КлючИЗначение содержащихся в карте -// -// Возвращаемое значение: -// ЧитаемоеМножество - Множество пар КлючИЗначение содержащихся в карте -// -Функция КлючиИЗначения() -``` - -### Количество - -```bsl -// Возвращает количество пар КлючИЗначение содержащихся в карте -// -// Возвращаемое значение: -// Число - Количество пар КлючИЗначение содержащихся в карте -// -Функция Количество() -``` ---- - -## Карта - -### Очистить - -```bsl -// Удаляет все элементы карты -// -Процедура Очистить() -``` - -### Вставить - -```bsl -// Вставляет в карту переданную пару ключ и значение -// -// Параметры: -// Ключ - Произвольный - Вставляемый ключ -// Значение - Произвольный - Вставляемое значение -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Значение, ранее было связанное с ключом -// -Функция Вставить(Ключ, Значение) -``` - -### ВставитьВсе - -```bsl -// Вставляет все значения из переданной карты -// -// Параметры: -// Карта - Карта - Карта, значения из которой вставляются -// -Процедура ВставитьВсе(Карта) -``` - -### ВставитьЕслиОтсутствует - -```bsl -// Вставляет в карту переданную пару ключ и значение, если карта не содержит переданного ключа -// -// Параметры: -// Ключ - Произвольный - Вставляемый ключ -// Значение - Произвольный - Вставляемое значение -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Значение, связанное с ключом, пустой если карта не содержала ключа -// -Функция ВставитьЕслиОтсутствует(Ключ, Значение) -``` - -### ВычислитьБезусловно - -```bsl -// Вычисляет значение для переданного ключа через функцию переназначения, если функция вернёт значение -// то оно будет вставлено по указанному ключу, если функция вернёт Неопределено, то из карты будет удалён -// переданный ключ, если ранее карта его содержала -// -// Параметры: -// Ключ - Произвольный - Ключ, для которого вычисляется значение -// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ -// и Опциональный от текущего значения ключа (пустой если ключа нет) -// - Строка - Лямбда выражение с двумя параметрами в которую будут переданы ключ -// и Опциональный от текущего значения ключа (пустой если ключа нет) -// -// Пример: -// Карта.ВычислитьБезусловно("Ключ", "(Ключ, Значение) -> ?(Значение.Пустой(), Истина, Ложь)") -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Новое значение ключа -// -Функция ВычислитьБезусловно(Ключ, ФункцияПереназначения) -``` - -### ВычислитьЕслиОтсутствует - -```bsl -// Вычисляет значение для переданного ключа, если текущая карта не содержит переданного ключа, -// через функцию назначения, функция будет вызвана только если карта не содержит ключа, -// если функция вернёт значение, оно будет вставлено в карту по указанному ключу, -// если функция вернёт Неопределенно, то значение вставлено не будет -// -// Параметры: -// Ключ - Произвольный - Ключ, для которого вычисляется значение -// ФункцияНазначения - Действие - Делегат на функцию с одним параметром, в которую передаётся переданный ключ -// - Строка - Лямбда выражение с одним параметром в который будет передан переданный ключ -// -// Пример: -// Карта.ВычислитьЕслиОтсутствует("Ключ", "(Ключ) -> СтрДлина(Ключ)") -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Новое значение ключа если оно было вычислено, или текущее значение ключа -// если карта уже содержала переданный ключ -// -Функция ВычислитьЕслиОтсутствует(Ключ, ФункцияНазначения) -``` - -### ВычислитьЕслиПрисутствует - -```bsl -// Вычисляет значение для переданного ключа, если текущая карта содержит переданный ключ, -// через функцию переназначения, функция будет вызвана только если карта содержит ключ, -// если функция вернёт значение, оно будет вставлено в карту по указанному ключу, -// если функция вернёт Неопределенно, то ключ будет удалён из карты -// -// Параметры: -// Ключ - Произвольный - Ключ, для которого вычисляется значение -// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ -// и текущее значение ключа -// - Строка - Лямбда выражение с двумя параметрами, в которые передаются ключ и текущее -// значение ключа -// -// Пример: -// Карта.ВычислитьЕслиПрисутствует("Ключ", "(Ключ, Значение) -> { -// | Если Ключ = ""Ключ"" Тогда -// | Возврат СтрДлина(Значение.Получить()); -// | Иначе -// | Возврат Неопределенно; -// | КонецЕсли; -// |}" -// ); -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Новое значение ключа -// -Функция ВычислитьЕслиПрисутствует(Ключ, ФункцияПереназначения) -``` - -### Слить - -```bsl -// Объединяет текущее и переданное значение по указанному ключу через функцию переназначения, -// функция будет вызвана только если существует текущее значение ключа, в ином случае будет вставлено значение -// если функция вернёт значение, оно будет вставлено в карту по указанному ключу, -// если функция вернёт Неопределенно, то ключ будет удалён из карты -// -// Параметры: -// Ключ - Произвольный - Ключ, значения для которого требуется объединить -// Значение - Произвольный - Новое значение ключа -// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами в которые передаются -// существующее и новое значение ключа -// - Строка - Лямбда выражение с двумя параметрами в которые передаются -// существующее и новое значение ключа -// -// Пример: -// Карта.Слить("Ключ", 4, "(СуществующееЗначение, НовоеЗначение) -> -// | Возврат ?(НовоеЗначение > СуществующееЗначение, -// | НовоеЗначение, -// | СуществующееЗначение -// | );") -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Новое значение ключа -// -Функция Слить(Ключ, Значение, ФункцияПереназначения) -``` - -### Заменить - -```bsl -// Заменяет значение по переданному ключу, если ключа в карте нет, то замена не происходит -// -// Параметры: -// Ключ - Произвольный - Ключ, значение которого требуется заменить -// Значение - Произвольный - Новое значение ключа -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Прошлое значение ключа, или пустой, если ключа не было -// -Функция Заменить(Ключ, Значение) -``` - -### ЗаменитьЕслиЗначение - -```bsl -// Заменяет значение по переданному ключу с проверкой текущего значения, -// если ключа в карте нет, то замена не происходит -// -// Параметры: -// Ключ - Произвольный - Ключ, значение которого требуется заменить -// ПрошлоеЗначение - Произвольный - Значение, которое должно быть связано с ключом для замены -// Значение - Произвольный - Новое значение ключа -// -// Возвращаемое значение: -// Булево - Истина, если замена была произведена -// -Функция ЗаменитьЕслиЗначение(Ключ, ПрошлоеЗначение, Значение) -``` - -### ЗаменитьВсе - -```bsl -// Заменяет значение для всех ключей карты, через функцию переназначения -// -// Параметры: -// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую -// передаются ключ и значение ключа -// - Строка - Лямбда выражение с двумя параметрами, в которые передаются -// ключ и значение ключа -// -// Пример: -// Карта.ЗаменитьВсе("(Ключ, Значение) -> Значение + 1") -// -Процедура ЗаменитьВсе(ФункцияПереназначения) -``` - -### Удалить - -```bsl -// Удаляет переданный ключ из карты -// -// Параметры: -// Ключ - Произвольный - Удаляемый ключ -// -// Возвращаемое значение: -// Опциональный<Произвольный> - Значение, ранее было связанное с ключом -// -Функция Удалить(Ключ) ``` diff --git "a/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" new file mode 100644 index 0000000..42ba778 --- /dev/null +++ "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" @@ -0,0 +1,11 @@ +## Итератор + +### Наследует: [ЧитающийИтератор](ЧитающийИтератор.md) + +### Удалить + +```bsl +// Удаляет элемент на который указывает итератор +// +Процедура Удалить() +``` diff --git "a/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" new file mode 100644 index 0000000..da2cc62 --- /dev/null +++ "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" @@ -0,0 +1,25 @@ +## СписокИтератор + +### Наследует: [ЧитающийСписокИтератор](ЧитающийСписокИтератор.md), [Итератор](Итератор.md) + +### Установить + +```bsl +// Заменяет значение на которое указывает итератор +// +// Параметры: +// Элемент - Произвольный - Устанавливаемый элемент +// +Процедура Установить(Элемент) +``` + +### Вставить + +```bsl +// Вставляет элемент по месту указания итератора +// +// Параметры: +// Элемент - Произвольный - вставляемый элемент +// +Процедура Вставить(Элемент) +``` diff --git "a/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" new file mode 100644 index 0000000..fb31f34 --- /dev/null +++ "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" @@ -0,0 +1,41 @@ +## ЧитающийИтератор + +### ЕстьСледующий + +```bsl +// Проверяет что есть следующий элемент коллекции +// +// Возвращаемое значение: +// Булево - Истина, если есть следующий элемент коллекции +// +Функция ЕстьСледующий() +``` + +### Следующий + +```bsl +// Возвращает следующий элемент коллекции +// +// Возвращаемое значение: +// Произвольный - следующий элемент коллекции +// +Функция Следующий() +``` + +### ДляКаждогоОставшегося + +```bsl +// Выполняет переданный алгоритм для каждого элемента коллекции +// начиная с того на который указывает итератор +// +// Параметры: +// Действие - Действие - Делегат на процедуру с одним параметром +// которая принимает элемент коллекции +// - Строка - Лямбда выражение с одним параметром +// которая принимает элемент коллекции +// +// Пример: +// Итератор.ДляКаждогоОставшегося(Элемент -> Сообщить(Элемент)); +// +Процедура ДляКаждогоОставшегося(Действие) +``` \ No newline at end of file diff --git "a/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" new file mode 100644 index 0000000..f4384b5 --- /dev/null +++ "b/doc/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\247\320\270\321\202\320\260\321\216\321\211\320\270\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.md" @@ -0,0 +1,47 @@ +## ЧитающийСписокИтератор + +### Наследует: [ЧитающийИтератор](ЧитающийИтератор.md) + +### ЕстьПредыдущий + +```bsl +// Проверяет что есть предыдущий элемент коллекции +// +// Возвращаемое значение: +// Булево - Истина, если есть предыдущий элемент коллекции +// +Функция ЕстьПредыдущий() +``` + +### Предыдущий + +```bsl +// Возвращает предыдущий элемент коллекции +// +// Возвращаемое значение: +// Произвольный - предыдущий элемент коллекции +// +Функция Предыдущий() +``` + +### СледующийИндекс + +```bsl +// Возвращает индекс на который указывает итератор +// +// Возвращаемое значение: +// Число - Индекс на который указывает итератор +// +Функция СледующийИндекс() +``` + +### ПредыдущийИндекс + +```bsl +// Возвращает предыдущий индекс от того на который указывает итератор +// +// Возвращаемое значение: +// Число - Предыдущий индекс от того на который указывает итератор +// +Функция ПредыдущийИндекс() +``` diff --git "a/doc/\320\232\320\260\321\200\321\202\321\213/\320\232\320\260\321\200\321\202\320\260.md" "b/doc/\320\232\320\260\321\200\321\202\321\213/\320\232\320\260\321\200\321\202\320\260.md" new file mode 100644 index 0000000..18a9c09 --- /dev/null +++ "b/doc/\320\232\320\260\321\200\321\202\321\213/\320\232\320\260\321\200\321\202\320\260.md" @@ -0,0 +1,221 @@ +## Карта + +### Наследует: [ЧитаемаяКарта](ЧитаемаяКарта.md) + +### Очистить + +```bsl +// Удаляет все элементы карты +// +Процедура Очистить() +``` + +### Вставить + +```bsl +// Вставляет в карту переданную пару ключ и значение +// +// Параметры: +// Ключ - Произвольный - Вставляемый ключ +// Значение - Произвольный - Вставляемое значение +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Значение, ранее было связанное с ключом +// +Функция Вставить(Ключ, Значение) +``` + +### ВставитьВсе + +```bsl +// Вставляет все значения из переданной карты +// +// Параметры: +// Карта - Карта - Карта, значения из которой вставляются +// +Процедура ВставитьВсе(Карта) +``` + +### ВставитьЕслиОтсутствует + +```bsl +// Вставляет в карту переданную пару ключ и значение, если карта не содержит переданного ключа +// +// Параметры: +// Ключ - Произвольный - Вставляемый ключ +// Значение - Произвольный - Вставляемое значение +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Значение, связанное с ключом, пустой если карта не содержала ключа +// +Функция ВставитьЕслиОтсутствует(Ключ, Значение) +``` + +### ВычислитьБезусловно + +```bsl +// Вычисляет значение для переданного ключа через функцию переназначения, если функция вернёт значение +// то оно будет вставлено по указанному ключу, если функция вернёт Неопределено, то из карты будет удалён +// переданный ключ, если ранее карта его содержала +// +// Параметры: +// Ключ - Произвольный - Ключ, для которого вычисляется значение +// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ +// и Опциональный от текущего значения ключа (пустой если ключа нет) +// - Строка - Лямбда выражение с двумя параметрами в которую будут переданы ключ +// и Опциональный от текущего значения ключа (пустой если ключа нет) +// +// Пример: +// Карта.ВычислитьБезусловно("Ключ", "(Ключ, Значение) -> ?(Значение.Пустой(), Истина, Ложь)") +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Новое значение ключа +// +Функция ВычислитьБезусловно(Ключ, ФункцияПереназначения) +``` + +### ВычислитьЕслиОтсутствует + +```bsl +// Вычисляет значение для переданного ключа, если текущая карта не содержит переданного ключа, +// через функцию назначения, функция будет вызвана только если карта не содержит ключа, +// если функция вернёт значение, оно будет вставлено в карту по указанному ключу, +// если функция вернёт Неопределенно, то значение вставлено не будет +// +// Параметры: +// Ключ - Произвольный - Ключ, для которого вычисляется значение +// ФункцияНазначения - Действие - Делегат на функцию с одним параметром, в которую передаётся переданный ключ +// - Строка - Лямбда выражение с одним параметром в который будет передан переданный ключ +// +// Пример: +// Карта.ВычислитьЕслиОтсутствует("Ключ", "(Ключ) -> СтрДлина(Ключ)") +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Новое значение ключа если оно было вычислено, или текущее значение ключа +// если карта уже содержала переданный ключ +// +Функция ВычислитьЕслиОтсутствует(Ключ, ФункцияНазначения) +``` + +### ВычислитьЕслиПрисутствует + +```bsl +// Вычисляет значение для переданного ключа, если текущая карта содержит переданный ключ, +// через функцию переназначения, функция будет вызвана только если карта содержит ключ, +// если функция вернёт значение, оно будет вставлено в карту по указанному ключу, +// если функция вернёт Неопределенно, то ключ будет удалён из карты +// +// Параметры: +// Ключ - Произвольный - Ключ, для которого вычисляется значение +// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ +// и текущее значение ключа +// - Строка - Лямбда выражение с двумя параметрами, в которые передаются ключ и текущее +// значение ключа +// +// Пример: +// Карта.ВычислитьЕслиПрисутствует("Ключ", "(Ключ, Значение) -> { +// | Если Ключ = ""Ключ"" Тогда +// | Возврат СтрДлина(Значение.Получить()); +// | Иначе +// | Возврат Неопределенно; +// | КонецЕсли; +// |}" +// ); +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Новое значение ключа +// +Функция ВычислитьЕслиПрисутствует(Ключ, ФункцияПереназначения) +``` + +### Слить + +```bsl +// Объединяет текущее и переданное значение по указанному ключу через функцию переназначения, +// функция будет вызвана только если существует текущее значение ключа, в ином случае будет вставлено значение +// если функция вернёт значение, оно будет вставлено в карту по указанному ключу, +// если функция вернёт Неопределенно, то ключ будет удалён из карты +// +// Параметры: +// Ключ - Произвольный - Ключ, значения для которого требуется объединить +// Значение - Произвольный - Новое значение ключа +// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами в которые передаются +// существующее и новое значение ключа +// - Строка - Лямбда выражение с двумя параметрами в которые передаются +// существующее и новое значение ключа +// +// Пример: +// Карта.Слить("Ключ", 4, "(СуществующееЗначение, НовоеЗначение) -> +// | Возврат ?(НовоеЗначение > СуществующееЗначение, +// | НовоеЗначение, +// | СуществующееЗначение +// | );") +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Новое значение ключа +// +Функция Слить(Ключ, Значение, ФункцияПереназначения) +``` + +### Заменить + +```bsl +// Заменяет значение по переданному ключу, если ключа в карте нет, то замена не происходит +// +// Параметры: +// Ключ - Произвольный - Ключ, значение которого требуется заменить +// Значение - Произвольный - Новое значение ключа +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Прошлое значение ключа, или пустой, если ключа не было +// +Функция Заменить(Ключ, Значение) +``` + +### ЗаменитьЕслиЗначение + +```bsl +// Заменяет значение по переданному ключу с проверкой текущего значения, +// если ключа в карте нет, то замена не происходит +// +// Параметры: +// Ключ - Произвольный - Ключ, значение которого требуется заменить +// ПрошлоеЗначение - Произвольный - Значение, которое должно быть связано с ключом для замены +// Значение - Произвольный - Новое значение ключа +// +// Возвращаемое значение: +// Булево - Истина, если замена была произведена +// +Функция ЗаменитьЕслиЗначение(Ключ, ПрошлоеЗначение, Значение) +``` + +### ЗаменитьВсе + +```bsl +// Заменяет значение для всех ключей карты, через функцию переназначения +// +// Параметры: +// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую +// передаются ключ и значение ключа +// - Строка - Лямбда выражение с двумя параметрами, в которые передаются +// ключ и значение ключа +// +// Пример: +// Карта.ЗаменитьВсе("(Ключ, Значение) -> Значение + 1") +// +Процедура ЗаменитьВсе(ФункцияПереназначения) +``` + +### Удалить + +```bsl +// Удаляет переданный ключ из карты +// +// Параметры: +// Ключ - Произвольный - Удаляемый ключ +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Значение, ранее было связанное с ключом +// +Функция Удалить(Ключ) +``` diff --git "a/doc/\320\232\320\260\321\200\321\202\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\260\321\200\321\202\320\260.md" "b/doc/\320\232\320\260\321\200\321\202\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\260\321\200\321\202\320\260.md" new file mode 100644 index 0000000..f3e2664 --- /dev/null +++ "b/doc/\320\232\320\260\321\200\321\202\321\213/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\260\321\200\321\202\320\260.md" @@ -0,0 +1,130 @@ +## ЧитаемаяКарта + +### СодержитКлюч + +```bsl +// Проверяет что карта содержит переданный ключ +// +// Параметры: +// Ключ - Произвольный - Проверяемый ключ +// +// Возвращаемое значение: +// Булево - Истина, если карта содержит указанный ключ +// +Функция СодержитКлюч(Ключ) +``` + +### СодержитЗначение + +```bsl +// Проверяет что карта содержит указанное значение +// +// Параметры: +// Значение - Произвольный - Проверяемое значение +// +// Возвращаемое значение: +// Булево - Истина, если карта содержит указанное значение +// +Функция СодержитЗначение(Значение) +``` + +### ДляКаждого + +```bsl +// Выполняет переданное действие для каждого элемента карты +// +// Параметры: +// Алгоритм - Действие - Делегат на метод с двумя параметрами который будет выполнятся +// в первый параметр передаётся ключ во второй значение +// - Строка - Лямбда выражение с двумя параметрами в первый параметр передаётся ключ во второй значение +// +// Пример: +// Карта.ДляКаждого("(Ключ, Значение) -> Сообщить(СтрШаблон(""Ключ: %1, Значение:2"", Ключ, Значение))"); +// +Процедура ДляКаждого(Алгоритм) +``` + +### Получить + +```bsl +// Возвращает значение по ключу карты +// +// Параметры: +// Ключ - Произвольный - Ключ, по которому требуется получить значение +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Опциональный, в котором содержится полученное значение или +// пустой опциональный, если карта не содержит указанного ключа +// +Функция Получить(Ключ) +``` + +### ПолучитьИлиУмолчание + +```bsl +// Возвращает значение по ключу карты, или ЗначениеПоУмолчанию если карта не содержит ключ +// +// Параметры: +// Ключ - Произвольный - Ключ, по которому требуется получить значение +// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено если карта не содержит ключ +// +// Возвращаемое значение: +// Произвольный<Произвольный> - Значение полученное по ключу карты, или ЗначениеПоУмолчанию если карта не содержит ключ +// +Функция ПолучитьИлиУмолчание(Ключ, ЗначениеПоУмолчанию) +``` + +### Пусто + +```bsl +// Возвращает признак того что карта не содержит пар КлючИЗначение +// +// Возвращаемое значение: +// Булево - Истина, если карта не содержит пар КлючИЗначение +// +Функция Пусто() +``` + +### Ключи + +```bsl +// Возвращает множество ключей содержащихся в карте +// +// Возвращаемое значение: +// ЧитаемоеМножество - Множество ключей содержащихся в карте +// +Функция Ключи() +``` + +### Значения + +```bsl +// Возвращает коллекцию значений содержащихся в карте +// +// Возвращаемое значение: +// ЧитаемаяКоллекция - Коллекция значений содержащихся в карте +// +Функция Значения() +``` + +### КлючиИЗначения + +```bsl +// Возвращает множество пар КлючИЗначение содержащихся в карте +// +// Возвращаемое значение: +// ЧитаемоеМножество - Множество пар КлючИЗначение содержащихся в карте +// +Функция КлючиИЗначения() +``` + +### Количество + +```bsl +// Возвращает количество пар КлючИЗначение содержащихся в карте +// +// Возвращаемое значение: +// Число - Количество пар КлючИЗначение содержащихся в карте +// +Функция Количество() +``` diff --git "a/doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" "b/doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" new file mode 100644 index 0000000..8b6e738 --- /dev/null +++ "b/doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" @@ -0,0 +1,3 @@ +## Множество + +### Наследует: [Коллекция](../Обходимое/Коллекция.md), [ЧитаемоеМножество](ЧитаемоеМножество.md) diff --git "a/doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\247\320\270\321\202\320\260\320\265\320\274\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" "b/doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\247\320\270\321\202\320\260\320\265\320\274\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" new file mode 100644 index 0000000..eb807ba --- /dev/null +++ "b/doc/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\247\320\270\321\202\320\260\320\265\320\274\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.md" @@ -0,0 +1,3 @@ +## ЧитаемоеМножество + +### Наследует: [ЧитаемаяКоллекция](../Обходимое/ЧитаемаяКоллекция.md) diff --git "a/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" "b/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" new file mode 100644 index 0000000..2369a85 --- /dev/null +++ "b/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" @@ -0,0 +1,99 @@ +## Коллекция + +### Наследует: [ЧитаемаяКоллекция](ЧитаемаяКоллекция.md) + +### Добавить + +```bsl +// Добавляет элемент в коллекцию +// +// Параметры: +// Элемент - Произвольный - Добавляемый элемент +// +// Возвращаемое значение: +// Булево - Истина, если элемент добавлен +// +Функция Добавить(Элемент) +``` + +### ДобавитьВсе + +```bsl +// Добавляет все элементы из переданной коллекции +// +// Параметры: +// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой требуется добавить +// +// Возвращаемое значение: +// Булево - Истина, если был добавлен хотя бы один элемент +// +Функция ДобавитьВсе(Коллекция) +``` + +### Очистить + +```bsl +// Очищает коллекцию +// +Процедура Очистить() +``` + +### Удалить + +```bsl +// Удаляет переданный элемент из коллекции +// +// Параметры: +// Элемент - Произвольный - Удаляемый элемент +// +// Возвращаемое значение: +// Булево - Истина, если элемент был удалён +// +Функция Удалить(Элемент) +``` + +### УдалитьВсе + +```bsl +// Удаляет все элементы которые содержаться в переданной коллекции +// +// Параметры: +// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой будут удалены +// +// Возвращаемое значение: +// Булево - Истина, если был удалён хотя бы один элемент +// +Функция УдалитьВсе(Коллекция) +``` + +### УдалитьЕсли + +```bsl +// Удаляет элементы для которых функция предикат вернёт Истина +// +// Параметры: +// Предикат - Действие - Делегат на функцию с одним параметром, в которой передаётся элемент коллекции +// - Строка - Лямбда выражение с одним параметром, в который передаётся элемент коллекции +// +// Пример: +// Коллекция.УдалитьЕсли("(Элемент) -> Элемент >= 2"); +// +// Возвращаемое значение: +// Булево - Истина, если был удалён хотя бы один элемент +// +Функция УдалитьЕсли(Предикат) +``` + +### СохранитьВсе + +```bsl +// Удаляет все элементы которые не содержаться в переданной коллекции +// +// Параметры: +// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой будут сохранены +// +// Возвращаемое значение: +// Булево - Истина, если был удалён хотя бы один элемент +// +Функция СохранитьВсе(Коллекция) +``` diff --git "a/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265.md" "b/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265.md" new file mode 100644 index 0000000..4e43c87 --- /dev/null +++ "b/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265.md" @@ -0,0 +1,30 @@ +## Обходимое + +### Итератор + +```bsl +// Возвращает итератор коллекции +// +// Возвращаемое значение: +// Итератор - Итератор коллекции +// +Функция Итератор() Экспорт +``` + +### ДляКаждого + +```bsl +// Выполняет переданный алгоритм для каждого элемента коллекции +// +// Параметры: +// Алгоритм - Действие - Делегат на процедуру с одним параметром, в который +// будет передан элемент коллекции +// - Строка - Лямбда выражение с одним параметром, в который будет +// будет передан элемент коллекции +// +// Пример: +// Обходимое.ДляКаждого("Элемент -> Сообщить(Элемент)"); +// +Процедура ДляКаждого(Алгоритм) Экспорт +``` + diff --git "a/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" "b/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" new file mode 100644 index 0000000..427776c --- /dev/null +++ "b/doc/\320\236\320\261\321\205\320\276\320\264\320\270\320\274\320\276\320\265/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.md" @@ -0,0 +1,75 @@ +## ЧитаемаяКоллекция + +### Наследует: [Обходимое](Обходимое.md) + +### Содержит + +```bsl +// Проверяет содержится ли указанный элемент в коллекции +// +// Параметры: +// Элемент - Произвольный - Проверяемый элемент +// +// Возвращаемое значение: +// Булево - Истина, если коллекция содержит указанный элемент +// +Функция Содержит(Элемент) +``` + +### СодержитВсе + +```bsl +// Проверяет что коллекция содержит все элементы переданной коллекции +// +// Параметры: +// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой проверяются на вхождение +// +// Возвращаемое значение: +// Булево - Истина, если коллекция содержит все элементы переданной коллекции +// +Функция СодержитВсе(Коллекция) +``` + +### Пусто + +```bsl +// Проверяет что коллекция пустая +// +// Возвращаемое значение: +// Булево - Истина, если коллекция пуста +// +Функция Пусто() +``` + +### ПроцессорКоллекции + +```bsl +// Возвращает процессор коллекции по текущей коллекции +// +// Возвращаемое значение: +// ПроцессорКоллекций - Процессор коллекции +// +Функция ПроцессорКоллекции() +``` + +### Количество + +```bsl +// Возвращает количество элементов коллекции +// +// Возвращаемое значение: +// Число - Количество элементов коллекции +// +Функция Количество() +``` + +### ВМассив + +```bsl +// Выгружает элементы коллекции в массив +// +// Возвращаемое значение: +// Массив из Произвольный - массив элементов коллекции +// +Функция ВМассив() +``` diff --git "a/doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" "b/doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" new file mode 100644 index 0000000..31bd320 --- /dev/null +++ "b/doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" @@ -0,0 +1,28 @@ +## Очередь + +### Наследует: [Коллекция](../Обходимое/Коллекция.md), [ЧитаемаяОчередь](ЧитаемаяОчередь.md) + +### Положить + +```bsl +// Добавляет элемент в очередь +// +// Параметры: +// Элемент - Произвольный - Элемент, который требуется поместить в очередь +// +// Возвращаемое значение: +// Булево - Истина, если элемент был добавлен в очередь, Ложь в противном случае +// +Функция Положить(Элемент) +``` + +### Взять + +```bsl +// Возвращает и удаляет первый элемент очереди +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста +// +Функция Взять() +``` diff --git "a/doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" "b/doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" new file mode 100644 index 0000000..6d35e32 --- /dev/null +++ "b/doc/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.md" @@ -0,0 +1,14 @@ +## ЧитаемаяОчередь + +### Наследует: [ЧитаемаяКоллекция](../Обходимое/ЧитаемаяКоллекция.md) + +### Подсмотреть + +```bsl +// Возвращает, но не удаляет первый элемент очереди +// +// Возвращаемое значение: +// Опциональный<Произвольный> - Первый элемент очереди, `Опциональные.Пустой()` если очередь пуста +// +Функция Подсмотреть() +``` diff --git "a/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" "b/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" new file mode 100644 index 0000000..76cd03c --- /dev/null +++ "b/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" @@ -0,0 +1,110 @@ +## Список + +### Наследует: [Коллекция](../Обходимое/Коллекция.md), [ЧитаемыйСписок](ЧитаемыйСписок.md) + +### Вставить + +```bsl +// Вставляет элемент в список по индексу +// +// Параметры: +// Индекс - Число - Индекс, по которому будет вставлен элемент +// Элемент - Произвольный - Вставляемый элемент +// +// Возвращаемое значение: +// Булево - Истина, если элемент вставлен +// +Функция Вставить(Индекс, Элемент) +``` + +### ВставитьВсе + +```bsl +// Вставляет все элементы из коллекции начиная с индекса +// +// Параметры: +// Индекс - Число - Индекс, начиная с которого будет вставлены элементы +// Коллекция - ЧитаемыйКоллекция - Коллекция, из которой будут вставлены элементы +// +// Возвращаемое значение: +// Булево - Истина, если был вставлен хотя бы один элемент +// +Функция ВставитьВсе(Индекс, Коллекция) +``` + +### ЗаменитьВсе + +```bsl +// Заменяет все элементы в списке через алгоритм +// +// Параметры: +// Алгоритм - Действие - Делегат на функцию с одним параметром, в которую передаётся +// элемент списка, и которая возвращает новое значение элемента +// - Строка - Лямбда выражение с одним параметром, в который передаётся +// элемент списка, и которая возвращает новое значение элемента +// +// Пример: +// Список.ЗаменитьВсе("Элемент -> Элемент + 1"); +// +Процедура ЗаменитьВсе(Алгоритм) +``` + +### Сортировать + +```bsl +// Сортирует список в соответствии с переданным алгоритмом +// +// Параметры: +// СравнениеЗначений - Действие - Делегат на функцию с двумя параметрами +// в которую передаются 2 элемента коллекции, и которая возвращает число +// 1 - Если первый элемент больше, +// -1 - Если второй элемент больше, +// 0 - Если элементы равны +// - Строка - Лямбда выражение с двумя параметрами +// в которую передаются 2 элемента коллекции, и которая возвращает число +// 1 - Если первый элемент больше, +// -1 - Если второй элемент больше, +// 0 - Если элементы равны +// +// Пример: +// Список.Сортировать("Первый, Второй -> { +// | Если Первый > Второй Тогда +// | Возврат 1; +// | ИначеЕсли Второй > Первый Тогда +// | Возврат -1; +// | Иначе +// | Возврат 0; +// | КонецЕсли; +// |}" +// ); +// +``` + +### УдалитьПоИндексу + +```bsl +// Удаляет элемент списка по индексу +// +// Параметры: +// Индекс - Число - Индекс удаляемого элемента +// +// Возвращаемое значение: +// Произвольный - Значение которое было удалено +// +Функция УдалитьПоИндексу(Индекс) +``` + +### Установить + +```bsl +// Устанавливает значение по индексу +// +// Параметры: +// Индекс - Число - Индекс устанавливаемого элемента +// Значение -Произвольный - Устанавливаемый элемент +// +// Возвращаемое значение: +// Произвольный - Значение которое было заменено +// +Функция Установить(Индекс, Значение) +``` diff --git "a/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.md" "b/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.md" new file mode 100644 index 0000000..6205789 --- /dev/null +++ "b/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\247\320\270\321\202\320\260\320\265\320\274\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.md" @@ -0,0 +1,56 @@ +## ЧитаемыйСписок + +### Наследует: [ЧитаемаяКоллекция](../Обходимое/ЧитаемаяКоллекция.md) + +### Получить + +```bsl +// Получает элемент коллекции по индексу +// +// Параметры: +// Индекс - Число - Индекс, по которому требуется получить элемент списка +// +// Возвращаемое значение: +// Произвольный - элемент списка по переданному индексу +// +Функция Получить(Индекс) +``` + +### Индекс + +```bsl +// Возвращает индекс первого вхождения переданного элемента +// +// Параметры: +// Элемент - Произвольный - Элемент, индекс которого требуется получить +// +// Возвращаемое значение: +// Число - Индекс элемента коллекции, или -1 если коллекция не содержит элемент +// +Функция Индекс(Элемент) +``` + +### ПоследнийИндекс + +```bsl +// Возвращает индекс последнего вхождения переданного элемента +// +// Параметры: +// Элемент - Произвольный - Элемент, индекс которого требуется получить +// +// Возвращаемое значение: +// Число - Индекс элемента коллекции, или -1 если коллекция не содержит элемент +// +Функция ПоследнийИндекс(Элемент) +``` + +### ВГраница + +```bsl +// Возвращает максимальный индекс списка +// +// Возвращаемое значение: +// Число - максимальный индекс списка +// +Функция ВГраница() +``` diff --git a/lib.config b/lib.config index c753f87..adce5f6 100644 --- a/lib.config +++ b/lib.config @@ -13,14 +13,19 @@ + + + + + - + - + - + diff --git a/src/internal/lib.config b/src/internal/lib.config index 75c6760..056a65a 100644 --- a/src/internal/lib.config +++ b/src/internal/lib.config @@ -19,6 +19,7 @@ + diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" index 7e8ef54..51fa0c6 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201\321\213/\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -21,6 +21,7 @@ &Интерфейс &Наследует("ЧитаемаяОчередь") +&Наследует("Коллекция") Процедура ПриСозданииОбъекта() ВызватьИсключение "Нельзя создать экземпляр интерфейса"; КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" index b5071aa..e339cfe 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -1,147 +1,24 @@ #Использовать lambdas -Перем Массив; // Итерируемый массив -Перем Курсор; // Индекс на который указывает итератор -Перем ПоследнийВозвращенный; // Индекс последнего возвращенного элемента -Перем КоллекцияМодифицирована; // Признак того что коллекция была модифицирована вне итератора -Перем Источник; // Коллекция которой принадлежит этот итератор -Перем Размер; // Размер итерируемого массива +Перем ВнутреннийИтератор; // Ссылка на итератор массива Функция ЕстьСледующий() Экспорт - Возврат Курсор <> Размер; + Возврат ВнутреннийИтератор.ЕстьСледующий(); КонецФункции Функция Следующий() Экспорт - - ПроверитьМодифицированность(); - - ПоследнийВозвращенный = Курсор; - Курсор = Курсор + 1; - - Возврат Массив[ПоследнийВозвращенный]; - + Возврат ВнутреннийИтератор.Следующий(); КонецФункции Процедура Удалить() Экспорт - - Если ПоследнийВозвращенный < 0 Тогда - ВызватьИсключение "Итератор не указывает на элемент коллекции"; - КонецЕсли; - - ПроверитьМодифицированность(); - - Массив.Удалить(ПоследнийВозвращенный); - - Курсор = ПоследнийВозвращенный; - ПоследнийВозвращенный = -1; - Размер = Размер - 1; - - ОповеститьОбИзмененииКоллекции(); - + ВнутреннийИтератор.Удалить(); КонецПроцедуры Процедура ДляКаждогоОставшегося(Знач Действие) Экспорт - - Если ТипЗнч(Действие) = Тип("Строка") Тогда - - Действие = Лямбда.Выражение(Действие) - .Интерфейс(ФункциональныеИнтерфейсы.УниПроцедура()) - .ВДействие(); - - КонецЕсли; - - Пока ЕстьСледующий() Цикл - Действие.Выполнить(Следующий()); - КонецЦикла; - -КонецПроцедуры - -Функция ЕстьПредыдущий() Экспорт - Возврат Курсор <> 0; -КонецФункции - -Функция Предыдущий() Экспорт - - ПроверитьМодифицированность(); - - Курсор = Курсор - 1; - ПоследнийВозвращенный = Курсор; - - Возврат Массив[ПоследнийВозвращенный]; - -КонецФункции - -Функция СледующийИндекс() Экспорт - Возврат Курсор; -КонецФункции - -Функция ПредыдущийИндекс() Экспорт - Возврат Курсор - 1; -КонецФункции - -Процедура КоллекцияМодифицирована(Итератор) // BSLLS:UnusedLocalMethod-off используется через ДобавитьОбработчик - - Если Итератор <> ЭтотОбъект Тогда - КоллекцияМодифицирована = Истина; - КонецЕсли; - -КонецПроцедуры - -Процедура Установить(Элемент) Экспорт - - Если ПоследнийВозвращенный < 0 Тогда - ВызватьИсключение "Итератор не указывает на элемент коллекции"; - КонецЕсли; - - ПроверитьМодифицированность(); - - Массив.Установить(ПоследнийВозвращенный, Элемент); - - ОповеститьОбИзмененииКоллекции(); - + ВнутреннийИтератор.ДляКаждогоОставшегося(Действие); КонецПроцедуры -Процедура Вставить(Элемент) Экспорт - - ПроверитьМодифицированность(); - - Массив.Вставить(Курсор, Элемент); - - Размер = Размер + 1; - Курсор = Курсор + 1; - ПоследнийВозвращенный = -1; - - ОповеститьОбИзмененииКоллекции(); - -КонецПроцедуры - -Процедура ПроверитьМодифицированность() - Если КоллекцияМодифицирована Тогда - ВызватьИсключение "Коллекция была изменена в процессе обхода"; - КонецЕсли; -КонецПроцедуры - -Процедура ОповеститьОбИзмененииКоллекции() - - Параметры = Новый Массив(); - Параметры.Добавить(ЭтотОбъект); - - Источник.ВызватьСобытие("КоллекцияМодифицирована", Параметры); - -КонецПроцедуры - -&Реализует("СписокИтератор") +&Реализует("Итератор") Процедура ПриСозданииОбъекта(пМассив, пИсточник) - - Массив = пМассив; - Источник = пИсточник; - Курсор = 0; - Размер = Массив.Количество(); - - ПоследнийВозвращенный = -1; - - КоллекцияМодифицирована = Ложь; - - ДобавитьОбработчик Источник.КоллекцияМодифицирована, КоллекцияМодифицирована; - + ВнутреннийИтератор = Новый СписокИтераторМассив(пМассив, пИсточник); КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" new file mode 100644 index 0000000..b5071aa --- /dev/null +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\321\213/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -0,0 +1,147 @@ +#Использовать lambdas + +Перем Массив; // Итерируемый массив +Перем Курсор; // Индекс на который указывает итератор +Перем ПоследнийВозвращенный; // Индекс последнего возвращенного элемента +Перем КоллекцияМодифицирована; // Признак того что коллекция была модифицирована вне итератора +Перем Источник; // Коллекция которой принадлежит этот итератор +Перем Размер; // Размер итерируемого массива + +Функция ЕстьСледующий() Экспорт + Возврат Курсор <> Размер; +КонецФункции + +Функция Следующий() Экспорт + + ПроверитьМодифицированность(); + + ПоследнийВозвращенный = Курсор; + Курсор = Курсор + 1; + + Возврат Массив[ПоследнийВозвращенный]; + +КонецФункции + +Процедура Удалить() Экспорт + + Если ПоследнийВозвращенный < 0 Тогда + ВызватьИсключение "Итератор не указывает на элемент коллекции"; + КонецЕсли; + + ПроверитьМодифицированность(); + + Массив.Удалить(ПоследнийВозвращенный); + + Курсор = ПоследнийВозвращенный; + ПоследнийВозвращенный = -1; + Размер = Размер - 1; + + ОповеститьОбИзмененииКоллекции(); + +КонецПроцедуры + +Процедура ДляКаждогоОставшегося(Знач Действие) Экспорт + + Если ТипЗнч(Действие) = Тип("Строка") Тогда + + Действие = Лямбда.Выражение(Действие) + .Интерфейс(ФункциональныеИнтерфейсы.УниПроцедура()) + .ВДействие(); + + КонецЕсли; + + Пока ЕстьСледующий() Цикл + Действие.Выполнить(Следующий()); + КонецЦикла; + +КонецПроцедуры + +Функция ЕстьПредыдущий() Экспорт + Возврат Курсор <> 0; +КонецФункции + +Функция Предыдущий() Экспорт + + ПроверитьМодифицированность(); + + Курсор = Курсор - 1; + ПоследнийВозвращенный = Курсор; + + Возврат Массив[ПоследнийВозвращенный]; + +КонецФункции + +Функция СледующийИндекс() Экспорт + Возврат Курсор; +КонецФункции + +Функция ПредыдущийИндекс() Экспорт + Возврат Курсор - 1; +КонецФункции + +Процедура КоллекцияМодифицирована(Итератор) // BSLLS:UnusedLocalMethod-off используется через ДобавитьОбработчик + + Если Итератор <> ЭтотОбъект Тогда + КоллекцияМодифицирована = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура Установить(Элемент) Экспорт + + Если ПоследнийВозвращенный < 0 Тогда + ВызватьИсключение "Итератор не указывает на элемент коллекции"; + КонецЕсли; + + ПроверитьМодифицированность(); + + Массив.Установить(ПоследнийВозвращенный, Элемент); + + ОповеститьОбИзмененииКоллекции(); + +КонецПроцедуры + +Процедура Вставить(Элемент) Экспорт + + ПроверитьМодифицированность(); + + Массив.Вставить(Курсор, Элемент); + + Размер = Размер + 1; + Курсор = Курсор + 1; + ПоследнийВозвращенный = -1; + + ОповеститьОбИзмененииКоллекции(); + +КонецПроцедуры + +Процедура ПроверитьМодифицированность() + Если КоллекцияМодифицирована Тогда + ВызватьИсключение "Коллекция была изменена в процессе обхода"; + КонецЕсли; +КонецПроцедуры + +Процедура ОповеститьОбИзмененииКоллекции() + + Параметры = Новый Массив(); + Параметры.Добавить(ЭтотОбъект); + + Источник.ВызватьСобытие("КоллекцияМодифицирована", Параметры); + +КонецПроцедуры + +&Реализует("СписокИтератор") +Процедура ПриСозданииОбъекта(пМассив, пИсточник) + + Массив = пМассив; + Источник = пИсточник; + Курсор = 0; + Размер = Массив.Количество(); + + ПоследнийВозвращенный = -1; + + КоллекцияМодифицирована = Ложь; + + ДобавитьОбработчик Источник.КоллекцияМодифицирована, КоллекцияМодифицирована; + +КонецПроцедуры diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index bd27353..fa037d6 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -39,13 +39,15 @@ Функция ПредставлениеМножестваКлючейИЗначений(Множество, Владелец) - Массив = Множество.ВМассив(); + Массив = Новый Массив; - Для Индекс = 0 По Массив.ВГраница() Цикл + Итератор = Множество.Итератор(); - Элемент = Массив.Получить(Индекс); + Пока Итератор.ЕстьСледующий() Цикл - Массив.Установить(Индекс, + Элемент = Итератор.Следующий(); + + Массив.Добавить( СтрШаблон( "%1=%2", ?(Элемент.Ключ = Владелец, "(Эта карта)", Элемент.Ключ), diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index 2654485..11302f3 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -10,12 +10,18 @@ СтандартнаяОбработка = Ложь; - Массив = Коллекция.ВМассив(); + Массив = Новый Массив; - Для Индекс = 0 По Массив.ВГраница() Цикл + Итератор = Коллекция.Итератор(); - Если Массив.Получить(Индекс) = Коллекция Тогда - Массив.Установить(Индекс, "(Эта коллекция)"); + Пока Итератор.ЕстьСледующий() Цикл + + Элемент = Итератор.Следующий(); + + Если Элемент = Коллекция Тогда + Массив.Добавить("(Эта коллекция)"); + Иначе + Массив.Добавить(Элемент); КонецЕсли; КонецЦикла; diff --git "a/src/\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\320\270/\320\232\320\260\321\200\321\202\321\213/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" "b/src/\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\320\270/\320\232\320\260\321\200\321\202\321\213/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" index cb2328b..8117a0c 100644 --- "a/src/\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\320\270/\320\232\320\260\321\200\321\202\321\213/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" +++ "b/src/\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\320\270/\320\232\320\260\321\200\321\202\321\213/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" @@ -11,7 +11,7 @@ Результат = ВнутренняяКарта.СодержитКлюч(Ключ); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -28,7 +28,7 @@ Результат = ВнутренняяКарта.СодержитЗначение(Значение); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -45,7 +45,7 @@ ВнутренняяКарта.ДляКаждого(Алгоритм); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -60,7 +60,7 @@ Результат = ВнутренняяКарта.Получить(Ключ); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -77,7 +77,7 @@ Результат = ВнутренняяКарта.ПолучитьИлиУмолчание(Ключ, ЗначениеПоУмолчанию); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -94,7 +94,7 @@ Результат = ВнутренняяКарта.Пусто(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -111,7 +111,7 @@ Результат = ВнутренняяКарта.Ключи(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -128,7 +128,7 @@ Результат = ВнутренняяКарта.Значения(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -145,7 +145,7 @@ Результат = ВнутренняяКарта.КлючиИЗначения(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -162,7 +162,7 @@ Результат = ВнутренняяКарта.Количество(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -179,7 +179,7 @@ ВнутренняяКарта.Очистить(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -194,7 +194,7 @@ Результат = ВнутренняяКарта.Вставить(Ключ, Значение); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -211,7 +211,7 @@ ВнутренняяКарта.ВставитьВсе(Карта); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -226,7 +226,7 @@ Результат = ВнутренняяКарта.ВставитьЕслиОтсутствует(Ключ, Значение); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -243,7 +243,7 @@ Результат = ВнутренняяКарта.ВычислитьБезусловно(Ключ, ФункцияПереназначения); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -260,7 +260,7 @@ Результат = ВнутренняяКарта.ВычислитьЕслиОтсутствует(Ключ, ФункцияНазначения); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -277,7 +277,7 @@ Результат = ВнутренняяКарта.ВычислитьЕслиПрисутствует(Ключ, ФункцияПереназначения); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -294,7 +294,7 @@ Результат = ВнутренняяКарта.Слить(Ключ, Значение, ФункцияПереназначения); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -311,7 +311,7 @@ Результат = ВнутренняяКарта.Заменить(Ключ, Значение); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -328,7 +328,7 @@ Результат = ВнутренняяКарта.ЗаменитьЕслиЗначение(Ключ, ПрошлоеЗначение, Значение); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -345,7 +345,7 @@ ВнутренняяКарта.ЗаменитьВсе(ФункцияПереназначения); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -360,7 +360,7 @@ Результат = ВнутренняяКарта.Удалить(Ключ); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); diff --git "a/src/\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\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" "b/src/\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\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" index d9cd2b3..48526a3 100644 --- "a/src/\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\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" +++ "b/src/\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\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" @@ -15,7 +15,7 @@ ВнутреннееМножество.ДляКаждого(Алгоритм); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -30,7 +30,7 @@ Результат = ВнутреннееМножество.Содержит(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -47,7 +47,7 @@ Результат = ВнутреннееМножество.СодержитВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -64,7 +64,7 @@ Результат = ВнутреннееМножество.Пусто(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -85,7 +85,7 @@ Результат = ВнутреннееМножество.Количество(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -102,7 +102,7 @@ Результат = ВнутреннееМножество.ВМассив(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -119,7 +119,7 @@ Результат = ВнутреннееМножество.Добавить(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -136,7 +136,7 @@ Результат = ВнутреннееМножество.ДобавитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -153,7 +153,7 @@ ВнутреннееМножество.Очистить(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -168,7 +168,7 @@ Результат = ВнутреннееМножество.Удалить(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -185,7 +185,7 @@ Результат = ВнутреннееМножество.УдалитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -202,7 +202,7 @@ Результат = ВнутреннееМножество.УдалитьЕсли(Предикат); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -219,7 +219,7 @@ Результат = ВнутреннееМножество.СохранитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" new file mode 100644 index 0000000..10fd2e4 --- /dev/null +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -0,0 +1,250 @@ +#Использовать lambdas +#Использовать fluent +#Использовать optional + +#Использовать "../../../internal" + +Перем Массив; // Элементы очереди +Перем ЕстьИтераторы; // Признак наличия созданных итераторов + +Функция Итератор() Экспорт + + ЕстьИтераторы = Истина; + + Возврат Новый ИтераторМассив(Массив, ЭтотОбъект); + +КонецФункции + +Процедура ДляКаждого(Знач Алгоритм) Экспорт + + Если ТипЗнч(Алгоритм) = Тип("Строка") Тогда + Алгоритм = Лямбда.Выражение(Алгоритм) + .Интерфейс(ФункциональныеИнтерфейсы.УниПроцедура()) + .ВДействие(); + КонецЕсли; + + Для каждого Элемент Из Массив Цикл + Алгоритм.Выполнить(Элемент); + КонецЦикла; + +КонецПроцедуры + +Функция Содержит(Элемент) Экспорт + Возврат Массив.Найти(Элемент) <> Неопределено; +КонецФункции + +Функция СодержитВсе(Коллекция) Экспорт + + Результат = Истина; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + Если Не Содержит(Итератор.Следующий()) Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция Пусто() Экспорт + Возврат Количество() = 0; +КонецФункции + +Функция ПроцессорКоллекции() Экспорт + Возврат ПроцессорыКоллекций.ИзКоллекции(ВМассив()); +КонецФункции + +Функция Количество() Экспорт + Возврат Массив.Количество(); +КонецФункции + +Функция ВМассив() Экспорт + Возврат Массивы.Скопировать(Массив); +КонецФункции + +Функция Подсмотреть() Экспорт + + Если Количество() > 0 Тогда + Возврат Новый Опциональный(Массив[0]); + КонецЕсли; + + Возврат Опциональные.Пустой(); + +КонецФункции + +Функция Добавить(Элемент) Экспорт + Возврат Положить(Элемент); +КонецФункции + +Функция ДобавитьВсе(Коллекция) Экспорт + + БылДобавленХотяБыОдинЭлемент = Ложь; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + БылДобавленХотяБыОдинЭлемент = Добавить(Итератор.Следующий()) + Или БылДобавленХотяБыОдинЭлемент; + + КонецЦикла; + + Возврат БылДобавленХотяБыОдинЭлемент; + +КонецФункции + +Процедура Очистить() Экспорт + + Массив.Очистить(); + ОповеститьОбИзмененииКоллекции(); + +КонецПроцедуры + +Функция Удалить(Элемент) Экспорт + + Индекс = Массив.Найти(Элемент); + + Если Индекс <> Неопределено Тогда + + Массив.Удалить(Индекс); + ОповеститьОбИзмененииКоллекции(); + + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция УдалитьВсе(Коллекция) Экспорт + + БылУдаленХотяБыОдинЭлемент = Ложь; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + БылУдаленХотяБыОдинЭлемент = Удалить(Итератор.Следующий()) + Или БылУдаленХотяБыОдинЭлемент; + + КонецЦикла; + + Возврат БылУдаленХотяБыОдинЭлемент; + +КонецФункции + +Функция УдалитьЕсли(Знач Предикат) Экспорт + + Если ТипЗнч(Предикат) = Тип("Строка") Тогда + Предикат = Лямбда.Выражение(Предикат) + .Интерфейс(ФункциональныеИнтерфейсы.УниФункция()) + .ВДействие(); + КонецЕсли; + + БылУдаленХотяБыОдинЭлемент = Ложь; + + Итератор = Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + Если Предикат.Выполнить(Итератор.Следующий()) Тогда + + Итератор.Удалить(); + + БылУдаленХотяБыОдинЭлемент = Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат БылУдаленХотяБыОдинЭлемент; + +КонецФункции + +Функция СохранитьВсе(Коллекция) Экспорт + + БылУдаленХотяБыОдинЭлемент = Ложь; + + Итератор = Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + Если Не Коллекция.Содержит(Итератор.Следующий()) Тогда + + Итератор.Удалить(); + + БылУдаленХотяБыОдинЭлемент = Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат БылУдаленХотяБыОдинЭлемент; + +КонецФункции + +Функция Положить(Элемент) Экспорт + + Если Элемент = Неопределено Тогда + ВызватьИсключение "Очередь не может содержать Неопределено"; + КонецЕсли; + + Массив.Добавить(Элемент); + + ОповеститьОбИзмененииКоллекции(); + + Возврат Истина; + +КонецФункции + +Функция Взять() Экспорт + + Если Количество() > 0 Тогда + + Элемент = Массив[0]; + Массив.Удалить(0); + ОповеститьОбИзмененииКоллекции(); + + Возврат Новый Опциональный(Элемент); + + КонецЕсли; + + Возврат Опциональные.Пустой(); + +КонецФункции + +Процедура ОповеститьОбИзмененииКоллекции() + + Если ЕстьИтераторы Тогда + ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) // BSLLS:UnusedLocalMethod-off + КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка); +КонецПроцедуры + +Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off + Возврат Новый СлужебныйИтераторДляДвижка(Итератор()); +КонецФункции + +&Обходимое +&Реализует("Очередь") +Процедура ПриСозданииОбъекта(Коллекция = Неопределено) + + Массив = Новый Массив; + ЕстьИтераторы = Ложь; + + Если Коллекция <> Неопределено Тогда + ДобавитьВсе(Коллекция); + КонецЕсли; + +КонецПроцедуры diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" new file mode 100644 index 0000000..dc51a27 --- /dev/null +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" @@ -0,0 +1,190 @@ +#Использовать fluent +#Использовать optional +#Использовать reflector + +#Использовать "../../../internal" + +Перем Очередь; // Внутренняя приоритетная очередь +Перем ИнтерфейсОтложенный; // Интерфейс +Перем Блокировка; // Блокировка на синхронизированном представлении внутренней очереди + +Функция Итератор() Экспорт + Возврат Очередь.Итератор(); +КонецФункции + +Процедура ДляКаждого(Знач Алгоритм) Экспорт + Очередь.ДляКаждого(Алгоритм); +КонецПроцедуры + +Функция Содержит(Элемент) Экспорт + Возврат Очередь.Содержит(Элемент); +КонецФункции + +Функция СодержитВсе(Коллекция) Экспорт + Возврат Очередь.СодержитВсе(Коллекция); +КонецФункции + +Функция Пусто() Экспорт + Возврат Очередь.Пусто(); +КонецФункции + +Функция ПроцессорКоллекции() Экспорт + Возврат Очередь.ПроцессорКоллекции(); +КонецФункции + +Функция Количество() Экспорт + Возврат Очередь.Количество(); +КонецФункции + +Функция ВМассив() Экспорт + Возврат Очередь.ВМассив(); +КонецФункции + +Функция Подсмотреть() Экспорт + + Возврат Очередь.Подсмотреть() + .Развернуть("(Отложенный) -> ?(Отложенный.Задержка() <= 0, Новый Опциональный(Отложенный), Опциональные.Пустой());"); + +КонецФункции + +Функция Добавить(Элемент) Экспорт + Возврат Положить(Элемент); +КонецФункции + +Функция ДобавитьВсе(Коллекция) Экспорт + + Блокировка.Заблокировать(); + + Попытка + + БылДобавленХотяБыОдинЭлемент = Ложь; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + БылДобавленХотяБыОдинЭлемент = Добавить(Итератор.Следующий()) + Или БылДобавленХотяБыОдинЭлемент; + + КонецЦикла; + + Блокировка.Разблокировать(); + + Исключение + + Блокировка.Разблокировать(); + ВызватьИсключение; + + КонецПопытки; + + Возврат БылДобавленХотяБыОдинЭлемент; + +КонецФункции + +Процедура Очистить() Экспорт + Очередь.Очистить(); +КонецПроцедуры + +Функция Удалить(Элемент) Экспорт + Возврат Очередь.Удалить(Элемент); +КонецФункции + +Функция УдалитьВсе(Коллекция) Экспорт + Возврат Очередь.УдалитьВсе(Коллекция); +КонецФункции + +Функция УдалитьЕсли(Знач Предикат) Экспорт + Возврат Очередь.УдалитьЕсли(Предикат); +КонецФункции + +Функция СохранитьВсе(Коллекция) Экспорт + Возврат Очередь.СохранитьВсе(Коллекция); +КонецФункции + +Функция Положить(Элемент) Экспорт + + Если Элемент = Неопределено Тогда + ВызватьИсключение "Очередь не может содержать Неопределено"; + КонецЕсли; + + _ = Новый РефлекторОбъекта(Элемент) // BSLLS:UnusedLocalVariable-off + .РеализуетИнтерфейс(ИнтерфейсОтложенный, Истина); + Возврат Очередь.Положить(Элемент); + +КонецФункции + +Функция Взять(Знач Таймаут = 0) Экспорт + + Конец = ТекущаяУниверсальнаяДатаВМиллисекундах() + Таймаут; + Результат = Неопределено; + + Пока Истина Цикл + + Блокировка.Заблокировать(); + + Попытка + + Элемент = Очередь.Подсмотреть(); + + Если Элемент.Фильтровать("Элемент -> Элемент.Задержка() <= 0 ").СодержитЗначение() Тогда + Результат = Очередь.Взять(); + КонецЕсли; + + Исключение + + Блокировка.Разблокировать(); + ВызватьИсключение; + + КонецПопытки; + + Блокировка.Разблокировать(); + + Если ТекущаяУниверсальнаяДатаВМиллисекундах() >= Конец И Результат = Неопределено Тогда + Результат = Опциональные.Пустой(); + КонецЕсли; + + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Приостановить(100); + + КонецЦикла; + +КонецФункции + +Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) // BSLLS:UnusedLocalMethod-off + КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка); +КонецПроцедуры + +Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off + Возврат Новый СлужебныйИтераторДляДвижка(Итератор()); +КонецФункции + +&Обходимое +&Реализует("Очередь") +Процедура ПриСозданииОбъекта(Коллекция = Неопределено) + + ИнтерфейсОтложенный = Новый ИнтерфейсОбъекта() + .Ф("Задержка"); + + Очередь = Новый СинхронизированнаяОчередь( + Новый ПриоритетнаяОчередь( + "(Первый, Второй) -> { + | Возврат СравнениеЗначений + | .ОбратныйПорядок() + | .Выполнить( + | Первый.Задержка(), + | Второй.Задержка() + | ); + |}" + ) + ); + + Блокировка = Новый БлокировкаРесурса(Очередь); + + Если Коллекция <> Неопределено Тогда + ДобавитьВсе(Коллекция); + КонецЕсли; + +КонецПроцедуры diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" new file mode 100644 index 0000000..92bf391 --- /dev/null +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -0,0 +1,289 @@ +#Использовать lambdas +#Использовать fluent +#Использовать optional + +#Использовать "../../../internal" + +Перем Массив; // Элементы очереди +Перем ЕстьИтераторы; // Признак наличия созданных итераторов +Перем Компаратор; // Компаратор, который приоритезирует очередь + +Функция Итератор() Экспорт + + ЕстьИтераторы = Истина; + + Возврат Новый ИтераторМассив(Массив, ЭтотОбъект); + +КонецФункции + +Процедура ДляКаждого(Знач Алгоритм) Экспорт + + Если ТипЗнч(Алгоритм) = Тип("Строка") Тогда + Алгоритм = Лямбда.Выражение(Алгоритм) + .Интерфейс(ФункциональныеИнтерфейсы.УниПроцедура()) + .ВДействие(); + КонецЕсли; + + Для каждого Элемент Из Массив Цикл + Алгоритм.Выполнить(Элемент); + КонецЦикла; + +КонецПроцедуры + +Функция Содержит(Элемент) Экспорт + Возврат Массив.Найти(Элемент) <> Неопределено; +КонецФункции + +Функция СодержитВсе(Коллекция) Экспорт + + Результат = Истина; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + Если Не Содержит(Итератор.Следующий()) Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция Пусто() Экспорт + Возврат Количество() = 0; +КонецФункции + +Функция ПроцессорКоллекции() Экспорт + Возврат ПроцессорыКоллекций.ИзКоллекции(ВМассив()); +КонецФункции + +Функция Количество() Экспорт + Возврат Массив.Количество(); +КонецФункции + +Функция ВМассив() Экспорт + Возврат Массивы.Скопировать(Массив); +КонецФункции + +Функция Подсмотреть() Экспорт + + Если Количество() > 0 Тогда + Возврат Новый Опциональный(Массив[0]); + КонецЕсли; + + Возврат Опциональные.Пустой(); + +КонецФункции + +Функция Добавить(Элемент) Экспорт + Возврат Положить(Элемент); +КонецФункции + +Функция ДобавитьВсе(Коллекция) Экспорт + + БылДобавленХотяБыОдинЭлемент = Ложь; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + БылДобавленХотяБыОдинЭлемент = Добавить(Итератор.Следующий()) + Или БылДобавленХотяБыОдинЭлемент; + + КонецЦикла; + + Возврат БылДобавленХотяБыОдинЭлемент; + +КонецФункции + +Процедура Очистить() Экспорт + + Массив.Очистить(); + ОповеститьОбИзмененииКоллекции(); + +КонецПроцедуры + +Функция Удалить(Элемент) Экспорт + + Индекс = Массив.Найти(Элемент); + + Если Индекс <> Неопределено Тогда + + Массив.Удалить(Индекс); + ОповеститьОбИзмененииКоллекции(); + + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция УдалитьВсе(Коллекция) Экспорт + + БылУдаленХотяБыОдинЭлемент = Ложь; + + Итератор = Коллекция.Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + БылУдаленХотяБыОдинЭлемент = Удалить(Итератор.Следующий()) + Или БылУдаленХотяБыОдинЭлемент; + + КонецЦикла; + + Возврат БылУдаленХотяБыОдинЭлемент; + +КонецФункции + +Функция УдалитьЕсли(Знач Предикат) Экспорт + + Если ТипЗнч(Предикат) = Тип("Строка") Тогда + Предикат = Лямбда.Выражение(Предикат) + .Интерфейс(ФункциональныеИнтерфейсы.УниФункция()) + .ВДействие(); + КонецЕсли; + + БылУдаленХотяБыОдинЭлемент = Ложь; + + Итератор = Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + Если Предикат.Выполнить(Итератор.Следующий()) Тогда + + Итератор.Удалить(); + + БылУдаленХотяБыОдинЭлемент = Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат БылУдаленХотяБыОдинЭлемент; + +КонецФункции + +Функция СохранитьВсе(Коллекция) Экспорт + + БылУдаленХотяБыОдинЭлемент = Ложь; + + Итератор = Итератор(); + + Пока Итератор.ЕстьСледующий() Цикл + + Если Не Коллекция.Содержит(Итератор.Следующий()) Тогда + + Итератор.Удалить(); + + БылУдаленХотяБыОдинЭлемент = Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат БылУдаленХотяБыОдинЭлемент; + +КонецФункции + +Функция Положить(Элемент) Экспорт + + Если Элемент = Неопределено Тогда + ВызватьИсключение "Очередь не может содержать Неопределено"; + КонецЕсли; + + Добавлен = Ложь; + + Для Индекс = 0 По Массив.ВГраница() Цикл + + Если Компаратор.Выполнить(Массив[Индекс], Элемент) < 0 Тогда + Массив.Вставить(Индекс, Элемент); + Добавлен = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если Не Добавлен Тогда + Массив.Добавить(Элемент); + КонецЕсли; + + ОповеститьОбИзмененииКоллекции(); + + Возврат Истина; + +КонецФункции + +Функция Взять() Экспорт + + Если Количество() > 0 Тогда + + Элемент = Массив[0]; + Массив.Удалить(0); + ОповеститьОбИзмененииКоллекции(); + + Возврат Новый Опциональный(Элемент); + + КонецЕсли; + + Возврат Опциональные.Пустой(); + +КонецФункции + +Процедура ОповеститьОбИзмененииКоллекции() + + Если ЕстьИтераторы Тогда + ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) // BSLLS:UnusedLocalMethod-off + КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка); +КонецПроцедуры + +Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off + Возврат Новый СлужебныйИтераторДляДвижка(Итератор()); +КонецФункции + +Процедура УстановитьКомпаратор(пКомпаратор) + + Если пКомпаратор = Неопределено Тогда + + Компаратор = СравнениеЗначений.ПрямойПорядок(); + + ИначеЕсли ТипЗнч(пКомпаратор) = Тип("Строка") Тогда + + Компаратор = Лямбда.Выражение(пКомпаратор) + .Интерфейс(ФункциональныеИнтерфейсы.БиФункция()) + .ВДействие(); + + ИначеЕсли ТипЗнч(пКомпаратор) = Тип("Действие") Тогда + + Компаратор = пКомпаратор; + + Иначе + ВызватьИсключение "Компаратором может выступать либо Действие либо лямбда-выражение"; + КонецЕсли; + +КонецПроцедуры + +&Обходимое +&Реализует("Очередь") +Процедура ПриСозданииОбъекта(Компаратор = Неопределено, Коллекция = Неопределено) + + Массив = Новый Массив; + ЕстьИтераторы = Ложь; + + УстановитьКомпаратор(Компаратор); + + Если Коллекция <> Неопределено Тогда + ДобавитьВсе(Коллекция); + КонецЕсли; + +КонецПроцедуры diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" new file mode 100644 index 0000000..2d2514b --- /dev/null +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -0,0 +1,297 @@ +#Использовать "../../../internal" + +Перем ВнутренняяОчередь; // Оригинальная очередь +Перем Блокировка; // Блокировка для синхронизации доступа + +Функция Итератор() Экспорт + Возврат ВнутренняяОчередь.Итератор(); +КонецФункции + +Процедура ДляКаждого(Алгоритм) Экспорт + + Блокировка.Заблокировать(); + + Попытка + ВнутренняяОчередь.ДляКаждого(Алгоритм); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + +КонецПроцедуры + +Функция Содержит(Элемент) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Содержит(Элемент); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция СодержитВсе(Коллекция) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.СодержитВсе(Коллекция); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция Пусто() Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Пусто(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция ПроцессорКоллекции() Экспорт + Возврат ВнутренняяОчередь.ПроцессорКоллекции(); +КонецФункции + +Функция Количество() Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Количество(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция ВМассив() Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.ВМассив(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция Подсмотреть() Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Подсмотреть(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция Добавить(Элемент) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Добавить(Элемент); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция ДобавитьВсе(Коллекция) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.ДобавитьВсе(Коллекция); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Процедура Очистить() Экспорт + + Блокировка.Заблокировать(); + + Попытка + ВнутренняяОчередь.Очистить(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + +КонецПроцедуры + +Функция Удалить(Элемент) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Удалить(Элемент); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция УдалитьВсе(Коллекция) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.УдалитьВсе(Коллекция); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция УдалитьЕсли(Предикат) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.УдалитьЕсли(Предикат); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция СохранитьВсе(Коллекция) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.СохранитьВсе(Коллекция); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция Положить(Элемент) Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Положить(Элемент); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Функция Взять() Экспорт + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Взять(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; + + Блокировка.Разблокировать(); + + Возврат Результат; + +КонецФункции + +Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) // BSLLS:UnusedLocalMethod-off + КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка); +КонецПроцедуры + +Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off + Возврат Новый СлужебныйИтераторДляДвижка(Итератор()); +КонецФункции + +&Обходимое +&Реализует("Очередь") +Процедура ПриСозданииОбъекта(Очередь) + + ВнутренняяОчередь = Очередь; + Блокировка = Новый БлокировкаРесурса(ЭтотОбъект); + +КонецПроцедуры diff --git "a/src/\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\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" "b/src/\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\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" index 24ad518..b52cdcc 100644 --- "a/src/\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\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" +++ "b/src/\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\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" @@ -15,7 +15,7 @@ ВнутренняяКоллекция.ДляКаждого(Алгоритм); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -30,7 +30,7 @@ Результат = ВнутренняяКоллекция.Содержит(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -47,7 +47,7 @@ Результат = ВнутренняяКоллекция.СодержитВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -64,7 +64,7 @@ Результат = ВнутренняяКоллекция.Пусто(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -85,7 +85,7 @@ Результат = ВнутренняяКоллекция.Количество(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -102,7 +102,7 @@ Результат = ВнутренняяКоллекция.ВМассив(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -119,7 +119,7 @@ Результат = ВнутренняяКоллекция.Добавить(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -136,7 +136,7 @@ Результат = ВнутренняяКоллекция.ДобавитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -153,7 +153,7 @@ ВнутренняяКоллекция.Очистить(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -168,7 +168,7 @@ Результат = ВнутренняяКоллекция.Удалить(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -185,7 +185,7 @@ Результат = ВнутренняяКоллекция.УдалитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -202,7 +202,7 @@ Результат = ВнутренняяКоллекция.УдалитьЕсли(Предикат); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -219,7 +219,7 @@ Результат = ВнутренняяКоллекция.СохранитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); diff --git "a/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" "b/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" index a34777a..6fd4eb5 100644 --- "a/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" +++ "b/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" @@ -15,7 +15,7 @@ ВнутреннийСписок.ДляКаждого(Алгоритм); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -30,7 +30,7 @@ Результат = ВнутреннийСписок.Содержит(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -47,7 +47,7 @@ Результат = ВнутреннийСписок.СодержитВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -64,7 +64,7 @@ Результат = ВнутреннийСписок.Пусто(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -85,7 +85,7 @@ Результат = ВнутреннийСписок.Количество(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -102,7 +102,7 @@ Результат = ВнутреннийСписок.ВМассив(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -119,7 +119,7 @@ Результат = ВнутреннийСписок.Добавить(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -136,7 +136,7 @@ Результат = ВнутреннийСписок.ДобавитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -153,7 +153,7 @@ ВнутреннийСписок.Очистить(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -168,7 +168,7 @@ Результат = ВнутреннийСписок.Удалить(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -185,7 +185,7 @@ Результат = ВнутреннийСписок.УдалитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -202,7 +202,7 @@ Результат = ВнутреннийСписок.УдалитьЕсли(Предикат); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -219,7 +219,7 @@ Результат = ВнутреннийСписок.СохранитьВсе(Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -236,7 +236,7 @@ Результат = ВнутреннийСписок.Получить(Индекс); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -253,7 +253,7 @@ Результат = ВнутреннийСписок.Индекс(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -270,7 +270,7 @@ Результат = ВнутреннийСписок.ПоследнийИндекс(Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -287,7 +287,7 @@ Результат = ВнутреннийСписок.ВГраница(); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -304,7 +304,7 @@ Результат = ВнутреннийСписок.Вставить(Индекс, Элемент); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -321,7 +321,7 @@ Результат = ВнутреннийСписок.ВставитьВсе(Индекс, Коллекция); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -338,7 +338,7 @@ ВнутреннийСписок.ЗаменитьВсе(Алгоритм); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -353,7 +353,7 @@ ВнутреннийСписок.Сортировать(СравнениеЗначений); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -368,7 +368,7 @@ Результат = ВнутреннийСписок.УдалитьПоИндексу(Индекс); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); @@ -385,7 +385,7 @@ Результат = ВнутреннийСписок.Установить(Индекс, Значение); Исключение Блокировка.Разблокировать(); - ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение; КонецПопытки; Блокировка.Разблокировать(); diff --git "a/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" index 6bbd635..a0e5886 100644 --- "a/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" +++ "b/src/\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\320\270/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -9,7 +9,7 @@ ЕстьИтераторы = Истина; - Возврат Новый ИтераторМассив(Массив, ЭтотОбъект); + Возврат Новый СписокИтераторМассив(Массив, ЭтотОбъект); КонецФункции @@ -55,11 +55,7 @@ КонецФункции Функция ПроцессорКоллекции() Экспорт - - Возврат ПроцессорыКоллекций.ИзКоллекции( - Массивы.Скопировать(Массив) - ); - + Возврат ПроцессорыКоллекций.ИзКоллекции(ВМассив()); КонецФункции Функция Количество() Экспорт @@ -361,7 +357,7 @@ Процедура ПриСозданииОбъекта(Коллекция = Неопределено) Массив = Новый Массив; - ЕстьИтераторы = Ложь;; + ЕстьИтераторы = Ложь; Если Коллекция <> Неопределено Тогда ДобавитьВсе(Коллекция); diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\320\260.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213.os" similarity index 100% rename from "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\320\260.os" rename to "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\260\321\200\321\202\321\213.os" diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" index d167602..53ecb05 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" @@ -39,3 +39,35 @@ Функция Скопировать(Массив) Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(Массив)); КонецФункции + +Функция ИзЭлементов( + // BSLLS:NumberOfParams-off + // BSLLS:NumberOfOptionalParams-off + // BSLLS:UnusedParameters-off + Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, Элемент4 = NULL, Элемент5 = NULL, + Элемент6 = NULL, Элемент7 = NULL, Элемент8 = NULL, Элемент9 = NULL, Элемент10 = NULL, + Элемент11 = NULL, Элемент12 = NULL, Элемент13 = NULL, Элемент14 = NULL, Элемент15 = NULL, + Элемент16 = NULL, Элемент17 = NULL, Элемент18 = NULL, Элемент19 = NULL, Элемент20 = NULL, + Элемент21 = NULL, Элемент22 = NULL, Элемент23 = NULL, Элемент24 = NULL, Элемент25 = NULL, + Элемент26 = NULL, Элемент27 = NULL, Элемент28 = NULL, Элемент29 = NULL, Элемент30 = NULL, + Элемент31 = NULL, Элемент32 = NULL + // BSLLS:NumberOfParams-on + // BSLLS:NumberOfOptionalParams-on + // BSLLS:UnusedParameters-on + ) Экспорт + + Результат = Новый Массив; + + Для сч = 1 По 32 Цикл + ДобавитьНеПустоеЗначениеВКоллекцию(Результат, Вычислить("Элемент" + сч)); + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +Процедура ДобавитьНеПустоеЗначениеВКоллекцию(Коллекция, Значение) + Если Значение <> NULL Тогда + Коллекция.Добавить(Значение); + КонецЕсли; +КонецПроцедуры diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" similarity index 100% rename from "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" rename to "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" index 2fbf3e5..fa785c7 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" @@ -9,3 +9,37 @@ Возврат Результат; КонецФункции + +Функция ИзЭлементов( + // BSLLS:NumberOfParams-off + // BSLLS:NumberOfOptionalParams-off + // BSLLS:UnusedParameters-off + Ключ1 = NULL, Значение1 = NULL, Ключ2 = NULL, Значение2 = NULL, + Ключ3 = NULL, Значение3 = NULL, Ключ4 = NULL, Значение4 = NULL, + Ключ5 = NULL, Значение5 = NULL, Ключ6 = NULL, Значение6 = NULL, + Ключ7 = NULL, Значение7 = NULL, Ключ8 = NULL, Значение8 = NULL, + Ключ9 = NULL, Значение9 = NULL, Ключ10 = NULL, Значение10 = NULL + // BSLLS:NumberOfParams-on + // BSLLS:NumberOfOptionalParams-on + // BSLLS:UnusedParameters-on + ) Экспорт + + Результат = Новый Соответствие; + + Для сч = 1 По 10 Цикл + ДобавитьНеПустоеЗначениеВКоллекцию(Результат, Вычислить("Ключ" + сч), Вычислить("Значение" + сч)); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +Функция Скопировать(Соответствие) Экспорт + Возврат Новый Соответствие(Новый ФиксированноеСоответствие(Соответствие)); +КонецФункции + +Процедура ДобавитьНеПустоеЗначениеВКоллекцию(Коллекция, Ключ, Значение) + Если Ключ <> NULL И Значение <> NULL Тогда + Коллекция.Вставить(Ключ, Значение); + КонецЕсли; +КонецПроцедуры diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\277\320\270\321\201\320\272\320\270.os" similarity index 100% rename from "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.os" rename to "src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\277\320\270\321\201\320\272\320\270.os" diff --git "a/tests/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/tests/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" index d161b01..c7408a5 100644 --- "a/tests/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" +++ "b/tests/\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -2,7 +2,6 @@ #Использовать ".." #Использовать "./ТестМодуль" -Перем Рефлектор; // Рефлектор Перем ДляКаждогоВыполнилсяРаз; // Количество раз которое выполнился метод ДляКаждого &Тест @@ -17,43 +16,6 @@ КонецПроцедуры -&Тест -Процедура ИтераторПодписанНаМодификациюКоллекции() Экспорт - - // Дано - - Итератор = Новый ИтераторМассив(Новый Массив, ЭтотОбъект); - - // Когда - - ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); - - // Тогда - - Ожидаем.Что(Рефлектор.ПолучитьСвойство(Итератор, "КоллекцияМодифицирована")).ЭтоИстина(); - -КонецПроцедуры - -&Тест -Процедура ИтераторНеИнвалидируетсяПриМутацииСамимСобой() Экспорт - - // Дано - - Итератор = Новый ИтераторМассив(Новый Массив, ЭтотОбъект); - - // Когда - - Параметры = Новый Массив; - Параметры.Добавить(Итератор); - - ВызватьСобытие("КоллекцияМодифицирована", Параметры); - - // Тогда - - Ожидаем.Что(Рефлектор.ПолучитьСвойство(Итератор, "КоллекцияМодифицирована")).ЭтоЛожь(); - -КонецПроцедуры - &Тест Процедура ЕстьСледующий() Экспорт @@ -120,7 +82,7 @@ Массив.Добавить(1); Итератор = Новый ИтераторМассив(Массив, ЭтотОбъект); - Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); // Тогда @@ -179,7 +141,7 @@ // Когда - Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); // Тогда @@ -284,9 +246,11 @@ ИтераторМутирующий.Удалить(); // Тогда - - Ожидаем.Что(Рефлектор.ПолучитьСвойство(ИтераторИнвалидирующийся, "КоллекцияМодифицирована")).ЭтоИстина(); - Ожидаем.Что(Рефлектор.ПолучитьСвойство(ИтераторМутирующий, "КоллекцияМодифицирована")).ЭтоЛожь(); + + Ожидаем.Что(ИтераторМутирующий.Следующий()).Заполнено(); + Ожидаем.Что(ИтераторИнвалидирующийся) + .Метод("Следующий") + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); КонецПроцедуры @@ -297,258 +261,3 @@ Ожидаем.Что(Элемент).Равно(ДляКаждогоВыполнилсяРаз); КонецПроцедуры - -&Тест -Процедура ЕстьПредыдущий() Экспорт - - // Дано - - Коллекция = Новый Массив; - Коллекция.Добавить(1); - - Итератор = Новый ИтераторМассив(Коллекция, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Результат = Итератор.ЕстьПредыдущий(); - - // Тогда - - Ожидаем.Что(Результат).ЭтоИстина(); - -КонецПроцедуры - -&Тест -Процедура НетПредыдущего() Экспорт - - // Дано - - Итератор = Новый ИтераторМассив(Новый Массив, ЭтотОбъект); - - // Когда - - Результат = Итератор.ЕстьПредыдущий(); - - // Тогда - - Ожидаем.Что(Результат).ЭтоЛожь(); - -КонецПроцедуры - -&Тест -Процедура Предыдущий() Экспорт - - // Дано - - Коллекция = Новый Массив; - Коллекция.Добавить(1); - - Итератор = Новый ИтераторМассив(Коллекция, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Результат = Итератор.Предыдущий(); - - // Тогда - - Ожидаем.Что(Результат).Равно(1); - -КонецПроцедуры - -&Тест -Процедура ПредыдущийВызываетИсключениеПриКонкурентнойМодификации() Экспорт - - // Дано - - Массив = Новый Массив; - Массив.Добавить(1); - - Итератор = Новый ИтераторМассив(Массив, ЭтотОбъект); - Итератор.Следующий(); - Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); - - // Тогда - - Ожидаем.Что(Итератор) - .Метод("Предыдущий") - .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); - -КонецПроцедуры - -&Тест -Процедура ПредыдущийВызываетИсключениеПриВыходеЗаГраницы() Экспорт - - // Дано - - Итератор = Новый ИтераторМассив(Новый Массив, ЭтотОбъект); - - // Тогда - - Ожидаем.Что(Итератор) - .Метод("Предыдущий") - .ВыбрасываетИсключение("Значение индекса выходит за пределы диапазона"); - -КонецПроцедуры - -&Тест -Процедура СледующийИндекс() Экспорт - - // Дано - - Коллекция = Новый Массив; - Коллекция.Добавить(1); - - Итератор = Новый ИтераторМассив(Коллекция, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Результат = Итератор.СледующийИндекс(); - - // Тогда - - Ожидаем.Что(Результат).Равно(1); - -КонецПроцедуры - -&Тест -Процедура ПредыдущийИндекс() Экспорт - - // Дано - - Коллекция = Новый Массив; - Коллекция.Добавить(1); - - Итератор = Новый ИтераторМассив(Коллекция, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Результат = Итератор.ПредыдущийИндекс(); - - // Тогда - - Ожидаем.Что(Результат).Равно(0); - -КонецПроцедуры - -&Тест -Процедура Установить() Экспорт - - // Дано - - Коллекция = Новый Массив; - Коллекция.Добавить(1); - - Итератор = Новый ИтераторМассив(Коллекция, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Итератор.Установить(2); - - // Тогда - - Ожидаем.Что(Коллекция) - .ИмеетДлину(1) - .Содержит(2); - -КонецПроцедуры - -&Тест -Процедура УстановитьВызываетИсключениеПриКонкурентнойМодификации() Экспорт - - // Дано - - Массив = Новый Массив; - Массив.Добавить(1); - - Итератор = Новый ИтераторМассив(Массив, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); - - Параметры = Новый Массив; - Параметры.Добавить(1); - - // Тогда - - Ожидаем.Что(Итератор) - .Метод("Установить", Параметры) - .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); - -КонецПроцедуры - -&Тест -Процедура УстановитьВызываетИсключениеПриНеустановленномЭлементе() Экспорт - - // Дано - - Итератор = Новый ИтераторМассив(Новый Массив, ЭтотОбъект); - - Параметры = Новый Массив; - Параметры.Добавить(1); - - // Тогда - - Ожидаем.Что(Итератор) - .Метод("Установить", Параметры) - .ВыбрасываетИсключение("Итератор не указывает на элемент коллекции"); - -КонецПроцедуры - -&Тест -Процедура Вставить() Экспорт - - // Дано - - Коллекция = Новый Массив; - Коллекция.Добавить(1); - - Итератор = Новый ИтераторМассив(Коллекция, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Итератор.Вставить(2); - - // Тогда - - Ожидаем.Что(Коллекция) - .ИмеетДлину(2) - .Содержит(1) - .Содержит(2); - -КонецПроцедуры - -&Тест -Процедура ВставитьВызываетИсключениеПриКонкурентнойМодификации() Экспорт - - // Дано - - Массив = Новый Массив; - Массив.Добавить(1); - - Итератор = Новый ИтераторМассив(Массив, ЭтотОбъект); - Итератор.Следующий(); - - // Когда - - Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); - - Параметры = Новый Массив; - Параметры.Добавить(1); - - // Тогда - - Ожидаем.Что(Итератор) - .Метод("Вставить", Параметры) - .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); - -КонецПроцедуры - -Рефлектор = Новый Рефлектор; diff --git "a/tests/\320\232\320\260\321\200\321\202\320\260.os" "b/tests/\320\232\320\260\321\200\321\202\321\213.os" similarity index 88% rename from "tests/\320\232\320\260\321\200\321\202\320\260.os" rename to "tests/\320\232\320\260\321\200\321\202\321\213.os" index 5b5bf46..be137d2 100644 --- "a/tests/\320\232\320\260\321\200\321\202\320\260.os" +++ "b/tests/\320\232\320\260\321\200\321\202\321\213.os" @@ -5,7 +5,7 @@ // Когда - Результат = Карта.ИзЭлементов( + Результат = Карты.ИзЭлементов( 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 ); @@ -35,7 +35,7 @@ // Когда - Результат = Карта.Скопировать(КартаСоответствие); + Результат = Карты.Скопировать(КартаСоответствие); // Тогда @@ -56,13 +56,13 @@ // Дано - КопируемаяКарта = Карта.ИзЭлементов( + КопируемаяКарта = Карты.ИзЭлементов( 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 ); // Когда - Результат = Карта.Скопировать(КопируемаяКарта); + Результат = Карты.Скопировать(КопируемаяКарта); // Тогда diff --git "a/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" "b/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" index 5cc2b64..b9df48f 100644 --- "a/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" +++ "b/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" @@ -77,3 +77,26 @@ .Не_().Равно(Массив); КонецПроцедуры + +&Тест +Процедура ИзЭлементов() Экспорт + + // Когда + + Результат = Массивы.ИзЭлементов( + 1, 2, 3, 4, 5, 6, 7, 8, 9, 9 + ); + + // Тогда + + Ожидаем.Что(Результат) + .ИмеетТип("ФиксированныйМассив") + .ИмеетДлину(10); + + Для Сч = 1 По 9 Цикл + + Ожидаем.Что(Результат.Найти(Сч)).Не_().ЭтоНеопределено(); + + КонецЦикла; + +КонецПроцедуры diff --git "a/tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" "b/tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" similarity index 86% rename from "tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" rename to "tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" index 8ca5126..08debdc 100644 --- "a/tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" +++ "b/tests/\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.os" @@ -5,7 +5,7 @@ // Когда - Результат = Множество.ИзЭлементов( + Результат = Множества.ИзЭлементов( 1, 2, 3, 4, 5, 6, 7, 8, 9, 9 ); @@ -34,7 +34,7 @@ // Когда - Результат = Множество.Скопировать(МножествоСоответствие); + Результат = Множества.Скопировать(МножествоСоответствие); // Тогда @@ -52,13 +52,13 @@ // Дано - КопируемоеМножество = Множество.ИзЭлементов( + КопируемоеМножество = Множества.ИзЭлементов( 1, 2, 3, 4, 5, 6, 7, 8, 9, 9 ); // Когда - Результат = Множество.Скопировать(КопируемоеМножество); + Результат = Множества.Скопировать(КопируемоеМножество); // Тогда diff --git "a/tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" new file mode 100644 index 0000000..a3be04b --- /dev/null +++ "b/tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -0,0 +1,1073 @@ +#Использовать asserts + +#Использовать ".." +#Использовать "./ТестМодуль" + +Перем Рефлектор; // Рефлектор +Перем ДляКаждогоВыполнилсяРаз; // Количество раз которое выполнился метод ДляКаждого +Перем ОчередьФикстура; // Кеш очереди фикстуры + +&Тест +Процедура ОчередьМассивСоздается() Экспорт + + // Дано + + // Когда + + Результат = Новый ОчередьМассив; + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ОчередьМассив"); + +КонецПроцедуры + +&Тест +Процедура Итератор() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + // Когда + + Результат = ОчередьМассив.Итератор(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ИтераторМассив"); + +КонецПроцедуры + +&Тест +Процедура ДляКаждого() Экспорт + + // Дано + + ДляКаждогоВыполнилсяРаз = 0; + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + ОчередьМассив.ДляКаждого(Новый Действие(ЭтотОбъект, "ДействиеДляКаждого")); + + // Тогда + + Ожидаем.Что(ДляКаждогоВыполнилсяРаз).Равно(3); + +КонецПроцедуры + +&Тест +Процедура ДляКаждогоЛямбда() Экспорт + + // Дано + + ТестМодуль.ДляКаждогоВыполнилсяРаз = 0; + ТестМодуль.СуммаЭлементов = 0; + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + ОчередьМассив.ДляКаждого( + "Элемент -> ТестМодуль.ДляКаждогоВыполнилсяРаз = ТестМодуль.ДляКаждогоВыполнилсяРаз + 1; + | ТестМодуль.СуммаЭлементов = ТестМодуль.СуммаЭлементов + Элемент;" + ); + + // Тогда + + Ожидаем.Что(ТестМодуль.ДляКаждогоВыполнилсяРаз).Равно(3); + Ожидаем.Что(ТестМодуль.СуммаЭлементов).Равно(6); + +КонецПроцедуры + +&Тест +Процедура Содержит() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Содержит(2); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура НеСодержит() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Содержит(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура СодержитВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.СодержитВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура СодержитНеВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.СодержитВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура Пусто() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Новый Массив + ); + + // Когда + + Результат = ОчередьМассив.Пусто(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура НеПусто() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + // Когда + + Результат = ОчередьМассив.Пусто(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ПроцессорКоллекции() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + // Когда + + Результат = ОчередьМассив.ПроцессорКоллекции(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ПроцессорКоллекций"); + +КонецПроцедуры + +&Тест +Процедура Количество() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Количество(); + + // Тогда + + Ожидаем.Что(Результат).Равно(3); + +КонецПроцедуры + +&Тест +Процедура Добавить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Добавить(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(4); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + Ожидаем.Что(Массив[3]).Равно(4); + +КонецПроцедуры + +&Тест +Процедура ДобавитьНеопределено() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + Параметры = Новый Массив; + Параметры.Добавить(Неопределено); + + // Когда + + // Тогда + + Ожидаем.Что(ОчередьМассив).Метод("Добавить", Параметры) + .ВыбрасываетИсключение("Очередь не может содержать Неопределено"); + +КонецПроцедуры + +&Тест +Процедура ДобавитьВсе() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + // Когда + + Результат = ОчередьМассив.ДобавитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Массив = Рефлектор.ПолучитьСвойство(ОчередьМассив, "Массив"); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура НеДобавитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.ДобавитьВсе( + ПустаяОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура Очистить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + ОчередьМассив.Очистить(); + + // Тогда + + Ожидаем.Что(Массив).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура Удалить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Удалить(2); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура НеУдалить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Удалить(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура УдалитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(4); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.УдалитьВсе(ОчередьФикстура()); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(4); + +КонецПроцедуры + +&Тест +Процедура НеУдалитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(4); + Массив.Добавить(5); + Массив.Добавить(6); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.УдалитьВсе(ОчередьФикстура()); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(4); + Ожидаем.Что(Массив[1]).Равно(5); + Ожидаем.Что(Массив[2]).Равно(6); + +КонецПроцедуры + +&Тест +Процедура УдалитьЕсли() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.УдалитьЕсли( + Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура НеУдалитьЕсли() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(0); + Массив.Добавить(1); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.УдалитьЕсли( + Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(0); + Ожидаем.Что(Массив[1]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура УдалитьЕслиЛямбда() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + // Когда + + Результат = ОчередьМассив.УдалитьЕсли( + "Элемент -> Элемент >= 2" + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура СохранитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(0); + Массив.Добавить(1); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.СохранитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура НеСохранитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.СохранитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + +КонецПроцедуры + +&Тест +Процедура ВМассив() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.ВМассив(); + + // Тогда + + Ожидаем.Что(Результат) + .ИмеетТип("Массив") + .ИмеетДлину(2) + .Содержит(1) + .Содержит(2) + .Не_().Равно(Массив); + +КонецПроцедуры + +&Тест +Процедура МутацияИнвалидируетИтераторы() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + Итератор = ОчередьМассив.Итератор(); + + // Когда + + ОчередьМассив.Добавить(4); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Следующий") + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +&Тест +Процедура ПреставлениеПереопределяется() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(ОчередьМассив); + Массив.Добавить(ТестМодуль.ОбъектЗаглушка()); + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = Строка(ОчередьМассив); + + // Тогда + + Ожидаем.Что(Результат) + .Равно("[1, 2, (Эта коллекция), Заглушка]"); + +КонецПроцедуры + +&Тест +Процедура ОбходитсяЦикломДляКаждого() Экспорт + + Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда + Возврат; + КонецЕсли; + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ОчередьМассив = Новый ОчередьМассив; + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + // Тогда + + Для каждого Элемент Из ОчередьМассив Цикл + + Ожидаем.Что(Элемент) + .БольшеИлиРавно(1) + .МеньшеИлиРавно(2); + + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура ПодсмотретьОчередьПуста() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + // Когда + + Результат = ОчередьМассив.Подсмотреть(); + + // Тогда + + Ожидаем.Что(Результат) + .Равно(Опциональные.Пустой()); + +КонецПроцедуры + +&Тест +Процедура ПодсмотретьОчередьНеПуста() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Подсмотреть(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("Опциональный"); + Ожидаем.Что(Результат.Пустой()).ЭтоЛожь(); + Ожидаем.Что(Результат.Получить()).Равно(1); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура Положить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Положить(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(4); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + Ожидаем.Что(Массив[3]).Равно(4); + +КонецПроцедуры + +&Тест +Процедура ВзятьОчередьПуста() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив; + + // Когда + + Результат = ОчередьМассив.Взять(); + + // Тогда + + Ожидаем.Что(Результат) + .Равно(Опциональные.Пустой()); + +КонецПроцедуры + +&Тест +Процедура ВзятьОчередьНеПуста() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + // Когда + + Результат = ОчередьМассив.Взять(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("Опциональный"); + Ожидаем.Что(Результат.Пустой()).ЭтоЛожь(); + Ожидаем.Что(Результат.Получить()).Равно(1); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(2); + Ожидаем.Что(Массив[1]).Равно(3); + +КонецПроцедуры + +Функция БольшеИлиРавноДвум(Элемент) Экспорт + Два = 2; + Возврат Элемент >= Два; +КонецФункции + +Процедура ДействиеДляКаждого(Элемент) Экспорт + + ДляКаждогоВыполнилсяРаз = ДляКаждогоВыполнилсяРаз + 1; + + Ожидаем.Что(Элемент).Равно(ДляКаждогоВыполнилсяРаз); + +КонецПроцедуры + +Функция ОчередьФикстура() + + Если ОчередьФикстура <> Неопределено Тогда + Возврат ОчередьФикстура; + КонецЕсли; + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + Коллекция.Добавить(2); + Коллекция.Добавить(3); + + ПолеМассив = Новый Поле("Массив") + .Публичное() + .ЗначениеПоУмолчанию(Коллекция); + + МетодИтератор = Новый Метод("Итератор") + .Публичный() + .ТелоМетода("Возврат Новый ИтераторМассив(Массив, ЭтотОбъект);"); + + МетодСодержит = Новый Метод("Содержит") + .Публичный() + .Параметр(Новый ПараметрМетода("Элемент")) + .ТелоМетода("Возврат Массив.Найти(Элемент) <> Неопределено;"); + + ОчередьФикстура = Новый ПостроительДекоратора() + .Поле(ПолеМассив) + .Метод(МетодИтератор) + .Метод(МетодСодержит) + .Построить(); + + Возврат ОчередьФикстура; + +КонецФункции + +Функция ПустаяОчередьФикстура() + + МетодИтератор = Новый Метод("Итератор") + .Публичный() + .ТелоМетода("Возврат Новый ИтераторМассив(Новый Массив, ЭтотОбъект);"); + + Возврат Новый ПостроительДекоратора() + .Метод(МетодИтератор) + .Построить(); + +КонецФункции + +Рефлектор = Новый Рефлектор; diff --git "a/tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" "b/tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" new file mode 100644 index 0000000..2dac47a --- /dev/null +++ "b/tests/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" @@ -0,0 +1,876 @@ +#Использовать asserts + +#Использовать ".." +#Использовать "./ТестМодуль" + +Перем Рефлектор; // Рефлектор + +&Тест +Процедура ОчередьОтложенныхСоздается() Экспорт + + // Дано + + // Когда + + Результат = Новый ОчередьОтложенных; + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ОчередьОтложенных"); + +КонецПроцедуры + +&Тест +Процедура Итератор() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Итератор(); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодИтератор, "Ожидали что будет вызван метод Итератор на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура ДляКаждого() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.ДляКаждого(0); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодДляКаждого, "Ожидали что будет вызван метод ДляКаждого на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Содержит() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Содержит(0); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодСодержит, "Ожидали что будет вызван метод Содержит на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура СодержитВсе() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.СодержитВсе(0); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодСодержитВсе, "Ожидали что будет вызван метод СодержитВсе на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Пусто() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Пусто(); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодПусто, "Ожидали что будет вызван метод Пусто на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура ПроцессорКоллекции() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.ПроцессорКоллекции(); + + // Тогда + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПроцессорКоллекции, + "Ожидали что будет вызван метод ПроцессорКоллекции на вложенной очереди" + ).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Количество() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Количество(); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодКоличество, "Ожидали что будет вызван метод Количество на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Добавить() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Добавить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах(), 0)); + + // Тогда + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПоложитьРаз, + "Ожидали что будет вызван метод Положить на вложенной очереди" + ).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ДобавитьНеопределено() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + Параметры = Новый Массив; + Параметры.Добавить(Неопределено); + + // Когда + + // Тогда + + Ожидаем.Что(ОчередьОтложенных).Метод("Добавить", Параметры) + .ВыбрасываетИсключение("Очередь не может содержать Неопределено"); + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПоложитьРаз, + "Ожидали что не будет вызван метод Положить на вложенной очереди" + ).Равно(0); + +КонецПроцедуры + +&Тест +Процедура ДобавитьНеотложенный() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + Параметры = Новый Массив; + Параметры.Добавить(Новый Массив); + + // Когда + + // Тогда + + Ожидаем.Что(ОчередьОтложенных).Метод("Добавить", Параметры) + .ВыбрасываетИсключение("Не реализован требуемый интерфейс"); + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПоложитьРаз, + "Ожидали что не будет вызван метод Положить на вложенной очереди" + ).Равно(0); + +КонецПроцедуры + +&Тест +Процедура ДобавитьВсе() Экспорт + + // Дано + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результат = ОчередьОтложенных.ДобавитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПоложитьРаз, + "Ожидали что будет вызван метод Положить на вложенной очереди 3 раза" + ).Равно(5); + +КонецПроцедуры + +&Тест +Процедура Очистить() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Очистить(); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодОчистить, "Ожидали что будет вызван метод Очистить на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Удалить() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Удалить(0); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодУдалить, "Ожидали что будет вызван метод Удалить на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура УдалитьВсе() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.УдалитьВсе(0); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодУдалитьВсе, "Ожидали что будет вызван метод УдалитьВсе на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура УдалитьЕсли() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.УдалитьЕсли(0); + + // Тогда + + Ожидаем.Что(ОчередьФикстура.ВызванМетодУдалитьЕсли, "Ожидали что будет вызван метод УдалитьЕсли на вложенной очереди") + .Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура СохранитьВсе() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.СохранитьВсе(0); + + // Тогда + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодСохранитьВсе, + "Ожидали что будет вызван метод СохранитьВсе на вложенной очереди" + ).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура ВМассив() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.ВМассив(); + + // Тогда + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодВМассив, + "Ожидали что будет вызван метод ВМассив на вложенной очереди" + ).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура ПреставлениеПереопределяется() Экспорт + + // Дано + + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура(, Ложь) + ); + + // Когда + + Результат = Строка(ОчередьОтложенных); + + // Тогда + + Ожидаем.Что(Результат) + .Равно("[Отложенный{Значение=1}, Отложенный{Значение=2}, Отложенный{Значение=3}, Отложенный{Значение=4}, Отложенный{Значение=5}]"); // BSLLS:LineLength-off + +КонецПроцедуры + +&Тест +Процедура ОбходитсяЦикломДляКаждого() Экспорт + + Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда + Возврат; + КонецЕсли; + + // Дано + + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура() + ); + + // Когда + + // Тогда + + Для каждого Элемент Из ОчередьОтложенных Цикл + + Ожидаем.Что(Элемент.Значение()) + .БольшеИлиРавно(1) + .МеньшеИлиРавно(5); + + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура ПодсмотретьНеПора() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(5000); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результат = ОчередьОтложенных.Подсмотреть(); + + // Тогда + + Ожидаем.Что(Результат).Равно(Опциональные.Пустой()); + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПодсмотреть, + "Ожидали что будет вызван метод Подсмотреть на вложенной очереди" + ).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура ПодсмотретьПора() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результат = ОчередьОтложенных.Подсмотреть(); + + // Тогда + + Ожидаем.Что(Результат.СодержитЗначение()).Равно(Истина); + Ожидаем.Что(Результат.Получить().Значение()).Равно(1); + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПодсмотреть, + "Ожидали что будет вызван метод Подсмотреть на вложенной очереди" + ).Равно(Истина); + +КонецПроцедуры + +&Тест +Процедура Положить() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + ОчередьОтложенных.Положить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах(), 0)); + + // Тогда + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодПоложитьРаз, + "Ожидали что будет вызван метод Положить на вложенной очереди" + ).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ВзятьНеПора() Экспорт + + // Дано + + ОчередьФикстура = ОчередьФикстура(5000); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результат = ОчередьОтложенных.Взять(); + + // Тогда + + Ожидаем.Что(Результат).Равно(Опциональные.Пустой()); + Ожидаем.Что( + ОчередьФикстура.ВызванМетодВзятьРаз, + "Ожидали что не будет вызван метод Взять на вложенной очереди" + ).Равно(0); + +КонецПроцедуры + +&Тест +Процедура ВзятьПора() Экспорт + + ОчередьФикстура = ОчередьФикстура(); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результат = ОчередьОтложенных.Взять(); + + // Тогда + + Ожидаем.Что(Результат.СодержитЗначение()).Равно(Истина); + Ожидаем.Что(Результат.Получить().Значение()).Равно(1); + Ожидаем.Что( + ОчередьФикстура.ВызванМетодВзятьРаз, + "Ожидали что будет вызван метод Взять на вложенной очереди" + ).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ВзятьНеПораНоПодождать() Экспорт + + ОчередьФикстура = ОчередьФикстура(500); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результат = ОчередьОтложенных.Взять(500); + + // Тогда + + Ожидаем.Что(Результат.СодержитЗначение()).Равно(Истина); + Ожидаем.Что(Результат.Получить().Значение()).Равно(1); + Ожидаем.Что( + ОчередьФикстура.ВызванМетодВзятьРаз, + "Ожидали что будет вызван метод Взять на вложенной очереди" + ).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ВзятьНеПораНоПодождатьВПятьПотоков() Экспорт + + ОчередьФикстура = ОчередьФикстура(500); + ОчередьОтложенных = Новый ОчередьОтложенных; + + Рефлектор.УстановитьСвойство( + ОчередьОтложенных, + "Очередь", + ОчередьФикстура + ); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ОчередьОтложенных, + "Взять", + 500 + ); + + // Тогда + + Для каждого Результат Из Результаты Цикл + + Ожидаем.Что(Результат.СодержитЗначение()).Равно(Истина); + Ожидаем.Что(Результат.Получить().Значение()).Между(1, 5); + + КонецЦикла; + + Ожидаем.Что( + ОчередьФикстура.ВызванМетодВзятьРаз, + "Ожидали что будет вызван метод Взять на вложенной очереди" + ).Равно(5); + +КонецПроцедуры + +Функция ОчередьФикстура(Отложить = 0, ДобавлятьПораВПредставление = Истина) + + Массив = Новый Массив; + Массив.Добавить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах() + Отложить, 1, ДобавлятьПораВПредставление)); + Массив.Добавить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах() + Отложить, 2, ДобавлятьПораВПредставление)); + Массив.Добавить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах() + Отложить, 3, ДобавлятьПораВПредставление)); + Массив.Добавить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах() + Отложить, 4, ДобавлятьПораВПредставление)); + Массив.Добавить(Новый Отложенный(ТекущаяУниверсальнаяДатаВМиллисекундах() + Отложить, 5, ДобавлятьПораВПредставление)); + + ПолеМассив = Новый Поле("Массив") + .Публичное() + .ЗначениеПоУмолчанию(Массив); + + ПолеВызванМетодИтератор = Новый Поле("ВызванМетодИтератор").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодСодержит = Новый Поле("ВызванМетодСодержит").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодСодержитВсе = Новый Поле("ВызванМетодСодержитВсе").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодДляКаждого = Новый Поле("ВызванМетодДляКаждого").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодКоличество = Новый Поле("ВызванМетодКоличество").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодПусто = Новый Поле("ВызванМетодПусто").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодПроцессорКоллекции = Новый Поле("ВызванМетодПроцессорКоллекции").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодОчистить = Новый Поле("ВызванМетодОчистить").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодУдалить = Новый Поле("ВызванМетодУдалить").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодУдалитьВсе = Новый Поле("ВызванМетодУдалитьВсе").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодУдалитьЕсли = Новый Поле("ВызванМетодУдалитьЕсли").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодСохранитьВсе = Новый Поле("ВызванМетодСохранитьВсе").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодВМассив = Новый Поле("ВызванМетодВМассив").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодПодсмотреть = Новый Поле("ВызванМетодПодсмотреть").Публичное().ЗначениеПоУмолчанию(Ложь); + ПолеВызванМетодВзятьРаз = Новый Поле("ВызванМетодВзятьРаз").Публичное().ЗначениеПоУмолчанию(0); + ПолеВызванМетодПоложитьРаз = Новый Поле("ВызванМетодПоложитьРаз").Публичное().ЗначениеПоУмолчанию(0); + + МетодИтератор = Новый Метод("Итератор") + .Публичный() + .ТелоМетода("ВызванМетодИтератор = Истина; Возврат Новый ИтераторМассив(Массив, ЭтотОбъект);"); + + МетодСодержит = Новый Метод("Содержит") + .Публичный() + .Параметр(Новый ПараметрМетода("Элемент")) + .ТелоМетода("ВызванМетодСодержит = Истина;"); + + МетодСодержитВсе = Новый Метод("СодержитВсе") + .Публичный() + .Параметр(Новый ПараметрМетода("Коллекция")) + .ТелоМетода("ВызванМетодСодержитВсе = Истина;"); + + МетодДляКаждого = Новый Метод("ДляКаждого") + .Публичный() + .Параметр(Новый ПараметрМетода("Алгоритм")) + .ТелоМетода("ВызванМетодДляКаждого = Истина;"); + + МетодКоличество = Новый Метод("Количество") + .Публичный() + .ТелоМетода("ВызванМетодКоличество = Истина"); + + МетодПусто = Новый Метод("Пусто") + .Публичный() + .ТелоМетода("ВызванМетодПусто = Истина;"); + + МетодПроцессорКоллекции = Новый Метод("ПроцессорКоллекции") + .Публичный() + .ТелоМетода("ВызванМетодПроцессорКоллекции = Истина;"); + + МетодОчистить = Новый Метод("Очистить") + .Публичный() + .ТелоМетода("ВызванМетодОчистить = Истина;"); + + МетодУдалить = Новый Метод("Удалить") + .Публичный() + .Параметр(Новый ПараметрМетода("Элемент")) + .ТелоМетода("ВызванМетодУдалить = Истина;"); + + МетодУдалитьВсе = Новый Метод("УдалитьВсе") + .Публичный() + .Параметр(Новый ПараметрМетода("Коллекция")) + .ТелоМетода("ВызванМетодУдалитьВсе = Истина;"); + + МетодУдалитьЕсли = Новый Метод("УдалитьЕсли") + .Публичный() + .Параметр(Новый ПараметрМетода("Условие")) + .ТелоМетода("ВызванМетодУдалитьЕсли = Истина;"); + + МетодСохранитьВсе = Новый Метод("СохранитьВсе") + .Публичный() + .Параметр(Новый ПараметрМетода("Коллекция")) + .ТелоМетода("ВызванМетодСохранитьВсе = Истина;"); + + МетодВМассив = Новый Метод("ВМассив") + .Публичный() + .ТелоМетода("ВызванМетодВМассив = Истина;"); + + МетодПодсмотреть = Новый Метод("Подсмотреть") + .Публичный() + .ТелоМетода("ВызванМетодПодсмотреть = Истина; Возврат Новый Опциональный(Массив[0]);"); + + МетодВзять = Новый Метод("Взять") + .Публичный() + .ТелоМетода(" + | ВызванМетодВзятьРаз = ВызванМетодВзятьРаз + 1; + | Элемент = Массив[0]; + | Массив.Удалить(0); + | Возврат Новый Опциональный(Элемент);" + ); + + МетодПоложить = Новый Метод("Положить") + .Публичный() + .Параметр(Новый ПараметрМетода("Элемент")) + .ТелоМетода("ВызванМетодПоложитьРаз = ВызванМетодПоложитьРаз + 1; Возврат Истина;"); + + Результат = Новый ПостроительДекоратора() + .Поле(ПолеМассив) + .Поле(ПолеВызванМетодИтератор) + .Поле(ПолеВызванМетодСодержит) + .Поле(ПолеВызванМетодСодержитВсе) + .Поле(ПолеВызванМетодДляКаждого) + .Поле(ПолеВызванМетодКоличество) + .Поле(ПолеВызванМетодПусто) + .Поле(ПолеВызванМетодПроцессорКоллекции) + .Поле(ПолеВызванМетодОчистить) + .Поле(ПолеВызванМетодУдалить) + .Поле(ПолеВызванМетодУдалитьВсе) + .Поле(ПолеВызванМетодУдалитьЕсли) + .Поле(ПолеВызванМетодСохранитьВсе) + .Поле(ПолеВызванМетодВМассив) + .Поле(ПолеВызванМетодПодсмотреть) + .Поле(ПолеВызванМетодВзятьРаз) + .Поле(ПолеВызванМетодПоложитьРаз) + .Метод(МетодИтератор) + .Метод(МетодСодержит) + .Метод(МетодДляКаждого) + .Метод(МетодСодержитВсе) + .Метод(МетодКоличество) + .Метод(МетодПусто) + .Метод(МетодПроцессорКоллекции) + .Метод(МетодПоложить) + .Метод(МетодОчистить) + .Метод(МетодУдалить) + .Метод(МетодУдалитьВсе) + .Метод(МетодУдалитьЕсли) + .Метод(МетодСохранитьВсе) + .Метод(МетодВМассив) + .Метод(МетодПодсмотреть) + .Метод(МетодВзять) + .Построить(); + + Возврат Результат; + +КонецФункции + +Рефлектор = Новый Рефлектор; diff --git "a/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" new file mode 100644 index 0000000..a591493 --- /dev/null +++ "b/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -0,0 +1,1192 @@ +#Использовать asserts + +#Использовать ".." +#Использовать "./ТестМодуль" + +Перем Рефлектор; // Рефлектор +Перем ДляКаждогоВыполнилсяРаз; // Количество раз которое выполнился метод ДляКаждого +Перем ОчередьФикстура; // Кеш очереди фикстуры + +&Тест +Процедура ПриоритетнаяОчередьСоздается() Экспорт + + // Дано + + // Когда + + Результат = Новый ПриоритетнаяОчередь; + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ПриоритетнаяОчередь"); + Ожидаем.Что(Рефлектор.ПолучитьСвойство(Результат, "Компаратор")).Равно(СравнениеЗначений.ПрямойПорядок()); + +КонецПроцедуры + +&Тест +Процедура ПриоритетнаяОчередьСоздаетсяКомпараторДействие() Экспорт + + // Дано + + // Когда + + Компаратор = КомпараторДействие(); + + Результат = Новый ПриоритетнаяОчередь(Компаратор); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ПриоритетнаяОчередь"); + Ожидаем.Что(Рефлектор.ПолучитьСвойство(Результат, "Компаратор")).Равно(Компаратор); + +КонецПроцедуры + +&Тест +Процедура ПриоритетнаяОчередьСоздаетсяКомпараторЛямбда() Экспорт + + // Дано + + // Когда + + Результат = Новый ПриоритетнаяОчередь("Первый, Второй -> { + | Если Первый % 2 > Второй % 2 Тогда + | Возврат 1; + | ИначеЕсли Первый % 2 = Второй % 2 Тогда + | Возврат 0; + | Иначе + | Возврат -1; + | КонецЕсли; + |}" + ); + + Компаратор = Рефлектор.ПолучитьСвойство(Результат, "Компаратор"); + + // Тогда + Ожидаем.Что(Результат).ИмеетТип("ПриоритетнаяОчередь"); + Ожидаем.Что(Компаратор.Выполнить(1, 2)).Равно(Компаратор(1, 2)); + Ожидаем.Что(Компаратор.Выполнить(2, 1)).Равно(Компаратор(2, 1)); + Ожидаем.Что(Компаратор.Выполнить(2, 2)).Равно(Компаратор(2, 2)); + +КонецПроцедуры + +&Тест +Процедура ПриоритетнаяОчередьНеСоздаетсяБезКомпаратора() Экспорт + + // Дано + + БылоИсключение = Ложь; + + // Когда + + Попытка + А = Новый ПриоритетнаяОчередь(1); // BSLLS:UnusedLocalVariable-off + Исключение + + БылоИсключение = Истина; + Ожидаем.Что(ИнформацияОбОшибке().Описание).Равно("Компаратором может выступать либо Действие либо лямбда-выражение"); + + КонецПопытки; + + // Тогда + + Ожидаем.Что(БылоИсключение).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура Итератор() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + // Когда + + Результат = ПриоритетнаяОчередь.Итератор(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ИтераторМассив"); + +КонецПроцедуры + +&Тест +Процедура ДляКаждого() Экспорт + + // Дано + + ДляКаждогоВыполнилсяРаз = 0; + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь(); + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + ПриоритетнаяОчередь.ДляКаждого(Новый Действие(ЭтотОбъект, "ДействиеДляКаждого")); + + // Тогда + + Ожидаем.Что(ДляКаждогоВыполнилсяРаз).Равно(3); + +КонецПроцедуры + +&Тест +Процедура ДляКаждогоЛямбда() Экспорт + + // Дано + + ТестМодуль.ДляКаждогоВыполнилсяРаз = 0; + ТестМодуль.СуммаЭлементов = 0; + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + ПриоритетнаяОчередь.ДляКаждого( + "Элемент -> ТестМодуль.ДляКаждогоВыполнилсяРаз = ТестМодуль.ДляКаждогоВыполнилсяРаз + 1; + | ТестМодуль.СуммаЭлементов = ТестМодуль.СуммаЭлементов + Элемент;" + ); + + // Тогда + + Ожидаем.Что(ТестМодуль.ДляКаждогоВыполнилсяРаз).Равно(3); + Ожидаем.Что(ТестМодуль.СуммаЭлементов).Равно(6); + +КонецПроцедуры + +&Тест +Процедура Содержит() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Содержит(2); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура НеСодержит() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Содержит(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура СодержитВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.СодержитВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура СодержитНеВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.СодержитВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура Пусто() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Новый Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Пусто(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура НеПусто() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + // Когда + + Результат = ПриоритетнаяОчередь.Пусто(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ПроцессорКоллекции() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + // Когда + + Результат = ПриоритетнаяОчередь.ПроцессорКоллекции(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ПроцессорКоллекций"); + +КонецПроцедуры + +&Тест +Процедура Количество() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Количество(); + + // Тогда + + Ожидаем.Что(Результат).Равно(3); + +КонецПроцедуры + +&Тест +Процедура Добавить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Добавить(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(4); + Ожидаем.Что(Массив[0]).Равно(4); + Ожидаем.Что(Массив[1]).Равно(3); + Ожидаем.Что(Массив[2]).Равно(2); + Ожидаем.Что(Массив[3]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ДобавитьКастомныйКомпаратор() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(4); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь(КомпараторДействие()); + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + Результат = ПриоритетнаяОчередь.Добавить(3); + + // Тогда + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(4); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(3); + Ожидаем.Что(Массив[2]).Равно(2); + Ожидаем.Что(Массив[3]).Равно(4); + +КонецПроцедуры + +&Тест +Процедура ДобавитьНеопределено() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + Параметры = Новый Массив; + Параметры.Добавить(Неопределено); + + // Когда + + // Тогда + + Ожидаем.Что(ПриоритетнаяОчередь).Метод("Добавить", Параметры) + .ВыбрасываетИсключение("Очередь не может содержать Неопределено"); + +КонецПроцедуры + +&Тест +Процедура ДобавитьВсе() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + // Когда + + Результат = ПриоритетнаяОчередь.ДобавитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Массив = Рефлектор.ПолучитьСвойство(ПриоритетнаяОчередь, "Массив"); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(3); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура НеДобавитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.ДобавитьВсе( + ПустаяОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура Очистить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + ПриоритетнаяОчередь.Очистить(); + + // Тогда + + Ожидаем.Что(Массив).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура Удалить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Удалить(2); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура НеУдалить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Удалить(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура УдалитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(4); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.УдалитьВсе(ОчередьФикстура()); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(4); + +КонецПроцедуры + +&Тест +Процедура НеУдалитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(4); + Массив.Добавить(5); + Массив.Добавить(6); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.УдалитьВсе(ОчередьФикстура()); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(4); + Ожидаем.Что(Массив[1]).Равно(5); + Ожидаем.Что(Массив[2]).Равно(6); + +КонецПроцедуры + +&Тест +Процедура УдалитьЕсли() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.УдалитьЕсли( + Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура НеУдалитьЕсли() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(0); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.УдалитьЕсли( + Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(0); + Ожидаем.Что(Массив[1]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура УдалитьЕслиЛямбда() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + // Когда + + Результат = ПриоритетнаяОчередь.УдалитьЕсли( + "Элемент -> Элемент >= 2" + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура СохранитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(0); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.СохранитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(1); + Ожидаем.Что(Массив[0]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура НеСохранитьВсе() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.СохранитьВсе( + ОчередьФикстура() + ); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + +КонецПроцедуры + +&Тест +Процедура ВМассив() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.ВМассив(); + + // Тогда + + Ожидаем.Что(Результат) + .ИмеетТип("Массив") + .ИмеетДлину(2) + .Содержит(1) + .Содержит(2) + .Не_().Равно(Массив); + +КонецПроцедуры + +&Тест +Процедура МутацияИнвалидируетИтераторы() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + Итератор = ПриоритетнаяОчередь.Итератор(); + + // Когда + + ПриоритетнаяОчередь.Добавить(4); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Следующий") + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +&Тест +Процедура ПреставлениеПереопределяется() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(ПриоритетнаяОчередь); + Массив.Добавить(ТестМодуль.ОбъектЗаглушка()); + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = Строка(ПриоритетнаяОчередь); + + // Тогда + + Ожидаем.Что(Результат) + .Равно("[1, 2, (Эта коллекция), Заглушка]"); + +КонецПроцедуры + +&Тест +Процедура ОбходитсяЦикломДляКаждого() Экспорт + + Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда + Возврат; + КонецЕсли; + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + // Тогда + + Для каждого Элемент Из ПриоритетнаяОчередь Цикл + + Ожидаем.Что(Элемент) + .БольшеИлиРавно(1) + .МеньшеИлиРавно(2); + + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура ПодсмотретьОчередьПуста() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + // Когда + + Результат = ПриоритетнаяОчередь.Подсмотреть(); + + // Тогда + + Ожидаем.Что(Результат) + .Равно(Опциональные.Пустой()); + +КонецПроцедуры + +&Тест +Процедура ПодсмотретьОчередьНеПуста() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Подсмотреть(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("Опциональный"); + Ожидаем.Что(Результат.Пустой()).ЭтоЛожь(); + Ожидаем.Что(Результат.Получить()).Равно(1); + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура Положить() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Положить(4); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + + Ожидаем.Что(Массив).ИмеетДлину(4); + Ожидаем.Что(Массив[0]).Равно(4); + Ожидаем.Что(Массив[1]).Равно(3); + Ожидаем.Что(Массив[2]).Равно(2); + Ожидаем.Что(Массив[3]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ВзятьОчередьПуста() Экспорт + + // Дано + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; + + // Когда + + Результат = ПриоритетнаяОчередь.Взять(); + + // Тогда + + Ожидаем.Что(Результат) + .Равно(Опциональные.Пустой()); + +КонецПроцедуры + +&Тест +Процедура ВзятьОчередьНеПуста() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь(СравнениеЗначений.ОбратныйПорядок()); + + Рефлектор.УстановитьСвойство( + ПриоритетнаяОчередь, + "Массив", + Массив + ); + + // Когда + + Результат = ПриоритетнаяОчередь.Взять(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("Опциональный"); + Ожидаем.Что(Результат.Пустой()).ЭтоЛожь(); + Ожидаем.Что(Результат.Получить()).Равно(1); + + Ожидаем.Что(Массив).ИмеетДлину(2); + Ожидаем.Что(Массив[0]).Равно(2); + Ожидаем.Что(Массив[1]).Равно(3); + +КонецПроцедуры + +Функция БольшеИлиРавноДвум(Элемент) Экспорт + Два = 2; + Возврат Элемент >= Два; +КонецФункции + +Процедура ДействиеДляКаждого(Элемент) Экспорт + + ДляКаждогоВыполнилсяРаз = ДляКаждогоВыполнилсяРаз + 1; + + Ожидаем.Что(Элемент).Равно(ДляКаждогоВыполнилсяРаз); + +КонецПроцедуры + +Функция Компаратор(Первый, Второй) Экспорт + + Если Первый % 2 > Второй % 2 Тогда + Возврат 1; + ИначеЕсли Первый % 2 = Второй % 2 Тогда + Возврат 0; + Иначе + Возврат -1; + КонецЕсли; + +КонецФункции + +Функция КомпараторДействие() + Возврат Новый Действие(ЭтотОбъект, "Компаратор"); +КонецФункции + +Функция ОчередьФикстура() + + Если ОчередьФикстура <> Неопределено Тогда + Возврат ОчередьФикстура; + КонецЕсли; + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + Коллекция.Добавить(2); + Коллекция.Добавить(3); + + ПолеМассив = Новый Поле("Массив") + .Публичное() + .ЗначениеПоУмолчанию(Коллекция); + + МетодИтератор = Новый Метод("Итератор") + .Публичный() + .ТелоМетода("Возврат Новый ИтераторМассив(Массив, ЭтотОбъект);"); + + МетодСодержит = Новый Метод("Содержит") + .Публичный() + .Параметр(Новый ПараметрМетода("Элемент")) + .ТелоМетода("Возврат Массив.Найти(Элемент) <> Неопределено;"); + + ОчередьФикстура = Новый ПостроительДекоратора() + .Поле(ПолеМассив) + .Метод(МетодИтератор) + .Метод(МетодСодержит) + .Построить(); + + Возврат ОчередьФикстура; + +КонецФункции + +Функция ПустаяОчередьФикстура() + + МетодИтератор = Новый Метод("Итератор") + .Публичный() + .ТелоМетода("Возврат Новый ИтераторМассив(Новый Массив, ЭтотОбъект);"); + + Возврат Новый ПостроительДекоратора() + .Метод(МетодИтератор) + .Построить(); + +КонецФункции + +Рефлектор = Новый Рефлектор; diff --git "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" index 2295c40..fceb712 100644 --- "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" +++ "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\260\321\200\321\202\320\260.os" @@ -20,7 +20,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "СодержитКлюч", "2" @@ -51,7 +51,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "СодержитЗначение", 2 @@ -84,7 +84,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ДляКаждого", Новый Действие(ЭтотОбъект, "ДобавитьКПроверяемомуЧислу") @@ -111,7 +111,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Получить", "1" @@ -142,7 +142,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ПолучитьИлиУмолчание", "4", @@ -174,7 +174,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Пусто" ); @@ -204,7 +204,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Ключи" ); @@ -234,7 +234,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Значения" ); @@ -264,7 +264,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "КлючиИЗначения" ); @@ -294,7 +294,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Количество" ); @@ -324,7 +324,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Очистить" ); @@ -350,7 +350,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Вставить", "3", @@ -384,7 +384,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ВставитьВсе", ВставляемаяКарта @@ -414,7 +414,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ВставитьЕслиОтсутствует", "4", @@ -460,7 +460,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ВычислитьБезусловно", "4", @@ -494,7 +494,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ВычислитьЕслиОтсутствует", "4", @@ -528,7 +528,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ВычислитьЕслиПрисутствует", "3", @@ -563,7 +563,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Слить", "3", @@ -598,7 +598,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Заменить", "3", @@ -632,7 +632,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ЗаменитьЕслиЗначение", "3", @@ -667,7 +667,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "ЗаменитьВсе", Новый Действие(ЭтотОбъект, "ФункцияПереназначения") @@ -696,7 +696,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКарта, "Удалить", "3" @@ -741,7 +741,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ТестМодуль, "ВСтроку", ПроверяемаяКарта @@ -767,56 +767,3 @@ Процедура ДобавитьКПроверяемомуЧислу(Ключ, Значение) Экспорт ПроверяемоеЧисло = ПроверяемоеЧисло + Ключ + Значение; КонецПроцедуры - -Функция ВыполнитьВПятьПотоков( - Сценарий, - ИмяМетода, - Параметр = Неопределено, - ВторойПараметр = Неопределено, - ТретийПараметр = Неопределено) - - Параметры = Новый Массив; - - Если Не Параметр = Неопределено Тогда - Параметры.Добавить(Параметр); - КонецЕсли; - - Если Не ВторойПараметр = Неопределено Тогда - Параметры.Добавить(ВторойПараметр); - КонецЕсли; - - Если Не ТретийПараметр = Неопределено Тогда - Параметры.Добавить(ТретийПараметр); - КонецЕсли; - - Задания = Новый Массив(); - - Для Счетчик = 1 По 5 Цикл // BSLLS:UnusedLocalVariable-off - - Задания.Добавить( - ФоновыеЗадания.Выполнить(Сценарий, ИмяМетода, Параметры) - ); - - КонецЦикла; - - Попытка - ФоновыеЗадания.ОжидатьЗавершенияЗадач(); - Исключение - - ВызватьИсключение ПодробноеПредставлениеОшибки( - ИнформацияОбОшибке().Параметры[0].ИнформацияОбОшибке - ); - - КонецПопытки; - - Результаты = Новый Массив; - - Для каждого ФоновоеЗадание Из Задания Цикл - Результаты.Добавить(ФоновоеЗадание.Результат); - КонецЦикла; - - ФоновыеЗадания.Очистить(); - - Возврат Результаты; - -КонецФункции diff --git "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" index dd38bbb..c14b9a4 100644 --- "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" +++ "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" @@ -33,7 +33,7 @@ // Тогда - Ожидаем.Что(Результат).ИмеетТип("ИтераторМассив"); + Ожидаем.Что(Результат).ИмеетТип("СписокИтераторМассив"); КонецПроцедуры @@ -58,7 +58,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ДляКаждого", Новый Действие(ЭтотОбъект, "ДобавитьКПроверяемомуЧислу") @@ -85,7 +85,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Содержит", 2 @@ -121,7 +121,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "СодержитВсе", ПроверяющаяКоллекция @@ -152,7 +152,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Пусто" ); @@ -199,7 +199,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Количество" ); @@ -229,7 +229,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ВМассив" ); @@ -262,7 +262,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Добавить", 5 @@ -298,7 +298,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ДобавитьВсе", ДобавляемаяКоллекция @@ -331,7 +331,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Очистить" ); @@ -356,7 +356,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Удалить", 2 @@ -404,7 +404,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьВсе", УдаляемаяКоллекция @@ -448,7 +448,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьЕсли", Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") @@ -495,7 +495,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "СохранитьВсе", СохраняемаяКоллекция @@ -540,7 +540,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ТестМодуль, "ВСтроку", ПроверяемаяКоллекция @@ -564,7 +564,7 @@ // Дано - ПроверяемаяКоллекция = Новый СинхронизированнаяКоллекция(Список.ИзЭлементов(1, 2)); + ПроверяемаяКоллекция = Новый СинхронизированнаяКоллекция(Списки.ИзЭлементов(1, 2)); // Когда @@ -588,35 +588,3 @@ Процедура ДобавитьКПроверяемомуЧислу(Элемент) Экспорт ПроверяемоеЧисло = ПроверяемоеЧисло + Элемент; КонецПроцедуры - -Функция ВыполнитьВПятьПотоков(Сценарий, ИмяМетода, Параметр = Неопределено) - - Параметры = Новый Массив; - - Если Не Параметр = Неопределено Тогда - Параметры.Добавить(Параметр); - КонецЕсли; - - Задания = Новый Массив(); - - Для Счетчик = 1 По 5 Цикл // BSLLS:UnusedLocalVariable-off - - Задания.Добавить( - ФоновыеЗадания.Выполнить(Сценарий, ИмяМетода, Параметры) - ); - - КонецЦикла; - - ФоновыеЗадания.ОжидатьЗавершенияЗадач(); - - Результаты = Новый Массив; - - Для каждого ФоновоеЗадание Из Задания Цикл - Результаты.Добавить(ФоновоеЗадание.Результат); - КонецЦикла; - - ФоновыеЗадания.Очистить(); - - Возврат Результаты; - -КонецФункции diff --git "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" new file mode 100644 index 0000000..0f3823d --- /dev/null +++ "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -0,0 +1,657 @@ +#Использовать asserts + +#Использовать ".." +#Использовать "./ТестМодуль" + +Перем ПроверяемоеЧисло; // Переменная в которую пишут фоновые задания +Перем Рефлектор; // Рефлектор + +&Тест +Процедура СинхронизированнаяОчередьСоздаётся() Экспорт + + // Дано + + // Когда + + Результат = Новый СинхронизированнаяОчередь(Новый ОчередьМассив); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("СинхронизированнаяОчередь"); + +КонецПроцедуры + +&Тест +Процедура Итератор() Экспорт + + // Дано + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(Новый ОчередьМассив); + + // Когда + + Результат = ПроверяемаяКоллекция.Итератор(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ИтераторМассив"); + +КонецПроцедуры + +&Тест +Процедура ДляКаждого() Экспорт + + ПроверяемоеЧисло = 0; + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + // BSLLS:DuplicatedInsertionIntoCollection-off + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(1); + // BSLLS:DuplicatedInsertionIntoCollection-on + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "ДляКаждого", + Новый Действие(ЭтотОбъект, "ДобавитьКПроверяемомуЧислу") + ); + + // Тогда + + Ожидаем.Что(ПроверяемоеЧисло).Равно(25); + +КонецПроцедуры + +&Тест +Процедура Содержит() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Содержит", + 2 + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).ЭтоИстина(); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура СодержитВсе() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + ПроверяющаяКоллекция = Новый ОчередьМассив(); + ПроверяющаяКоллекция.Добавить(1); + ПроверяющаяКоллекция.Добавить(2); + ПроверяющаяКоллекция.Добавить(3); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "СодержитВсе", + ПроверяющаяКоллекция + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).ЭтоИстина(); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура Пусто() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Пусто" + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).ЭтоЛожь(); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура ПроцессорКоллекции() Экспорт + + // Дано + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(Новый ОчередьМассив); + + // Когда + + Результат = ПроверяемаяКоллекция.ПроцессорКоллекции(); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("ПроцессорКоллекций"); + +КонецПроцедуры + +&Тест +Процедура Количество() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Количество" + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).Равно(3); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура ВМассив() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "ВМассив" + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + + Ожидаем.Что(Результат) + .ИмеетТип("Массив") + .ИмеетДлину(3) + .Содержит(1) + .Содержит(2) + .Содержит(3); + + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура Добавить() Экспорт + + // Дано + + Массив = Новый Массив; + ОчередьМассив = Новый ОчередьМассив(); + + Рефлектор.УстановитьСвойство(ОчередьМассив, "Массив", Массив); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Добавить", + 5 + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).ЭтоИстина(); + КонецЦикла; + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(5); + Ожидаем.Что(Массив[0]).Равно(5); + Ожидаем.Что(Массив[1]).Равно(5); + Ожидаем.Что(Массив[2]).Равно(5); + Ожидаем.Что(Массив[3]).Равно(5); + Ожидаем.Что(Массив[4]).Равно(5); + +КонецПроцедуры + +&Тест +Процедура ДобавитьВсе() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + ДобавляемаяКоллекция = Новый ОчередьМассив(); + ДобавляемаяКоллекция.Добавить(1); + ДобавляемаяКоллекция.Добавить(2); + ДобавляемаяКоллекция.Добавить(3); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "ДобавитьВсе", + ДобавляемаяКоллекция + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).ЭтоИстина(); + КонецЦикла; + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(15); + +КонецПроцедуры + +&Тест +Процедура Очистить() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Очистить" + ); + + // Тогда + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура Удалить() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Удалить", + 2 + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + КоличествоИстина = 0; + КоличествоЛожь = 0; + + Для каждого Результат Из Результаты Цикл + + Если Результат Тогда + КоличествоИстина = КоличествоИстина + 1; + Иначе + КоличествоЛожь = КоличествоЛожь + 1; + КонецЕсли; + + КонецЦикла; + + Ожидаем.Что(КоличествоИстина).Равно(1); + Ожидаем.Что(КоличествоЛожь).Равно(4); + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(2); + +КонецПроцедуры + +&Тест +Процедура УдалитьВсе() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + УдаляемаяКоллекция = Новый ОчередьМассив(); + УдаляемаяКоллекция.Добавить(1); + УдаляемаяКоллекция.Добавить(2); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "УдалитьВсе", + УдаляемаяКоллекция + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + КоличествоИстина = 0; + КоличествоЛожь = 0; + + Для каждого Результат Из Результаты Цикл + + Если Результат Тогда + КоличествоИстина = КоличествоИстина + 1; + Иначе + КоличествоЛожь = КоличествоЛожь + 1; + КонецЕсли; + + КонецЦикла; + + Ожидаем.Что(КоличествоИстина).Равно(1); + Ожидаем.Что(КоличествоЛожь).Равно(4); + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(1); + +КонецПроцедуры + +&Тест +Процедура УдалитьЕсли() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "УдалитьЕсли", + Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + КоличествоИстина = 0; + КоличествоЛожь = 0; + + Для каждого Результат Из Результаты Цикл + + Если Результат Тогда + КоличествоИстина = КоличествоИстина + 1; + Иначе + КоличествоЛожь = КоличествоЛожь + 1; + КонецЕсли; + + КонецЦикла; + + Ожидаем.Что(КоличествоИстина).Равно(1); + Ожидаем.Что(КоличествоЛожь).Равно(4); + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(1); + +КонецПроцедуры + +&Тест +Процедура СохранитьВсе() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(3); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + СохраняемаяКоллекция = Новый ОчередьМассив(); + СохраняемаяКоллекция.Добавить(2); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "СохранитьВсе", + СохраняемаяКоллекция + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетТип("Массив").ИмеетДлину(5); + + КоличествоИстина = 0; + КоличествоЛожь = 0; + + Для каждого Результат Из Результаты Цикл + + Если Результат Тогда + КоличествоИстина = КоличествоИстина + 1; + Иначе + КоличествоЛожь = КоличествоЛожь + 1; + КонецЕсли; + + КонецЦикла; + + Ожидаем.Что(КоличествоИстина).Равно(1); + Ожидаем.Что(КоличествоЛожь).Равно(4); + + Ожидаем.Что(ОчередьМассив).ИмеетДлину(1); + +КонецПроцедуры + +&Тест +Процедура ПреставлениеПереопределяется() Экспорт + + // Дано + + ОчередьМассив = Новый ОчередьМассив(); + ОчередьМассив.Добавить(1); + ОчередьМассив.Добавить(2); + ОчередьМассив.Добавить(ТестМодуль.ОбъектЗаглушка()); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + ПроверяемаяКоллекция.Добавить(ПроверяемаяКоллекция); // BSLLS:SelfInsertion-off Тестовый случай + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ТестМодуль, + "ВСтроку", + ПроверяемаяКоллекция + ); + + // Тогда + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат) + .Равно("[1, 2, Заглушка, (Эта коллекция)]"); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура Подсмотреть() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(3); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Подсмотреть" + ); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетДлину(5); + + Для каждого Результат Из Результаты Цикл + + Ожидаем.Что(Результат).ИмеетТип("Опциональный"); + Ожидаем.Что(Результат.Пустой()).ЭтоЛожь(); + Ожидаем.Что(Результат.Получить()).Равно(1); + + КонецЦикла; + + Ожидаем.Что(Массив).ИмеетДлину(3); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + +КонецПроцедуры + +&Тест +Процедура ОбходитсяЦикломДляКаждого() Экспорт + + Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда + Возврат; + КонецЕсли; + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(2); + + ОчередьМассив = Новый ОчередьМассив; + + Рефлектор.УстановитьСвойство( + ОчередьМассив, + "Массив", + Массив + ); + + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьМассив); + + // Когда + + // Тогда + + Для каждого Элемент Из ПроверяемаяКоллекция Цикл + + Ожидаем.Что(Элемент) + .БольшеИлиРавно(1) + .МеньшеИлиРавно(2); + + КонецЦикла; + +КонецПроцедуры + +Функция БольшеИлиРавноДвум(Элемент) Экспорт + Два = 2; + Возврат Элемент >= Два; +КонецФункции + +Процедура ДобавитьКПроверяемомуЧислу(Элемент) Экспорт + ПроверяемоеЧисло = ПроверяемоеЧисло + Элемент; +КонецПроцедуры + +Рефлектор = Новый Рефлектор(); diff --git "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" index 16631a9..f51a68e 100644 --- "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" +++ "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" @@ -56,7 +56,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ДляКаждого", Новый Действие(ЭтотОбъект, "ДобавитьКПроверяемомуЧислу") @@ -83,7 +83,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Содержит", 2 @@ -119,7 +119,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "СодержитВсе", ПроверяющаяКоллекция @@ -150,7 +150,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Пусто" ); @@ -197,7 +197,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Количество" ); @@ -227,7 +227,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ВМассив" ); @@ -260,7 +260,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Добавить", 5 @@ -305,7 +305,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ДобавитьВсе", ДобавляемаяКоллекция @@ -347,7 +347,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Очистить" ); @@ -372,7 +372,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Удалить", 2 @@ -420,7 +420,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьВсе", УдаляемаяКоллекция @@ -464,7 +464,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьЕсли", Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") @@ -511,7 +511,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "СохранитьВсе", СохраняемаяКоллекция @@ -556,7 +556,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ТестМодуль, "ВСтроку", ПроверяемаяКоллекция @@ -580,7 +580,7 @@ // Дано - ПроверяемаяКоллекция = Новый СинхронизированноеМножество(Множество.ИзЭлементов(1, 2)); + ПроверяемаяКоллекция = Новый СинхронизированноеМножество(Множества.ИзЭлементов(1, 2)); // Когда @@ -604,35 +604,3 @@ Процедура ДобавитьКПроверяемомуЧислу(Элемент) Экспорт ПроверяемоеЧисло = ПроверяемоеЧисло + Элемент; КонецПроцедуры - -Функция ВыполнитьВПятьПотоков(Сценарий, ИмяМетода, Параметр = Неопределено) - - Параметры = Новый Массив; - - Если Не Параметр = Неопределено Тогда - Параметры.Добавить(Параметр); - КонецЕсли; - - Задания = Новый Массив(); - - Для Счетчик = 1 По 5 Цикл // BSLLS:UnusedLocalVariable-off - - Задания.Добавить( - ФоновыеЗадания.Выполнить(Сценарий, ИмяМетода, Параметры) - ); - - КонецЦикла; - - ФоновыеЗадания.ОжидатьЗавершенияЗадач(); - - Результаты = Новый Массив; - - Для каждого ФоновоеЗадание Из Задания Цикл - Результаты.Добавить(ФоновоеЗадание.Результат); - КонецЦикла; - - ФоновыеЗадания.Очистить(); - - Возврат Результаты; - -КонецФункции diff --git "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" index 7de53f7..e6a8ce5 100644 --- "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" +++ "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" @@ -33,7 +33,7 @@ // Тогда - Ожидаем.Что(Результат).ИмеетТип("ИтераторМассив"); + Ожидаем.Что(Результат).ИмеетТип("СписокИтераторМассив"); КонецПроцедуры @@ -58,7 +58,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ДляКаждого", Новый Действие(ЭтотОбъект, "ДобавитьКПроверяемомуЧислу") @@ -85,7 +85,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Содержит", 2 @@ -121,7 +121,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "СодержитВсе", ПроверяющаяКоллекция @@ -152,7 +152,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Пусто" ); @@ -199,7 +199,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Количество" ); @@ -229,7 +229,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ВМассив" ); @@ -262,7 +262,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Добавить", 5 @@ -298,7 +298,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ДобавитьВсе", ДобавляемаяКоллекция @@ -331,7 +331,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Очистить" ); @@ -356,7 +356,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Удалить", 2 @@ -404,7 +404,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьВсе", УдаляемаяКоллекция @@ -448,7 +448,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьЕсли", Новый Действие(ЭтотОбъект, "БольшеИлиРавноДвум") @@ -495,7 +495,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "СохранитьВсе", СохраняемаяКоллекция @@ -538,7 +538,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Получить", 0 @@ -567,7 +567,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Индекс", 1 @@ -597,7 +597,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ПоследнийИндекс", 1 @@ -627,7 +627,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ВГраница" ); @@ -655,7 +655,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Вставить", 0, @@ -693,7 +693,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ВставитьВсе", 0, @@ -733,7 +733,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "ЗаменитьВсе", Новый Действие(ЭтотОбъект, "Инкремент") @@ -763,7 +763,7 @@ // Когда - ВыполнитьВПятьПотоков( + ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Сортировать", СравнениеЗначений.ПрямойПорядок() @@ -794,7 +794,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "УдалитьПоИндексу", 0 @@ -825,7 +825,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ПроверяемаяКоллекция, "Установить", 0, @@ -872,7 +872,7 @@ // Когда - Результаты = ВыполнитьВПятьПотоков( + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( ТестМодуль, "ВСтроку", ПроверяемаяКоллекция @@ -896,7 +896,7 @@ // Дано - ПроверяемаяКоллекция = Новый СинхронизированныйСписок(Список.ИзЭлементов(1, 2)); + ПроверяемаяКоллекция = Новый СинхронизированныйСписок(Списки.ИзЭлементов(1, 2)); // Когда @@ -924,43 +924,3 @@ Процедура ДобавитьКПроверяемомуЧислу(Элемент) Экспорт ПроверяемоеЧисло = ПроверяемоеЧисло + Элемент; КонецПроцедуры - -Функция ВыполнитьВПятьПотоков( - Сценарий, - ИмяМетода, - Параметр = Неопределено, - ВторойПараметр = Неопределено) - - Параметры = Новый Массив; - - Если Не Параметр = Неопределено Тогда - Параметры.Добавить(Параметр); - КонецЕсли; - - Если Не ВторойПараметр = Неопределено Тогда - Параметры.Добавить(ВторойПараметр); - КонецЕсли; - - Задания = Новый Массив(); - - Для Счетчик = 1 По 5 Цикл // BSLLS:UnusedLocalVariable-off - - Задания.Добавить( - ФоновыеЗадания.Выполнить(Сценарий, ИмяМетода, Параметры) - ); - - КонецЦикла; - - ФоновыеЗадания.ОжидатьЗавершенияЗадач(); - - Результаты = Новый Массив; - - Для каждого ФоновоеЗадание Из Задания Цикл - Результаты.Добавить(ФоновоеЗадание.Результат); - КонецЦикла; - - ФоновыеЗадания.Очистить(); - - Возврат Результаты; - -КонецФункции diff --git "a/tests/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" "b/tests/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" new file mode 100644 index 0000000..81454e5 --- /dev/null +++ "b/tests/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217.os" @@ -0,0 +1,75 @@ +#Использовать ".." + +&Тест +Процедура КакКарта() Экспорт + + // Дано + + Соответствие = Новый Соответствие; + Соответствие.Вставить("1", 1); + Соответствие.Вставить("2", 2); + Соответствие.Вставить("3", 3); + + // Когда + + Результат = Соответствия.КакКарта(Соответствие); + + // Тогда + + Ожидаем.Что(Результат) + .ИмеетТип("КартаСоответствие") + .ИмеетДлину(3); + + Ожидаем.Что(Результат.Получить("1").Иначе_(0)).Равно(1); + Ожидаем.Что(Результат.Получить("2").Иначе_(0)).Равно(2); + Ожидаем.Что(Результат.Получить("3").Иначе_(0)).Равно(3); + +КонецПроцедуры + +&Тест +Процедура ИзЭлементов() Экспорт + + // Когда + + Результат = Соответствия.ИзЭлементов( + "1", 1, "2", 2, "3", 3, "4", 4, "5", 5 + ); + + // Тогда + + Ожидаем.Что(Результат) + .ИмеетТип("ФиксированноеСоответствие") + .ИмеетДлину(5); + + Для Сч = 1 По 5 Цикл + Ожидаем.Что(Результат.Получить(Строка(Сч))).Равно(Сч); + КонецЦикла; + +КонецПроцедуры + +&Тест +Процедура Скопировать() Экспорт + + // Дано + + Соответствие = Новый Соответствие; + Соответствие.Вставить("1", 1); + Соответствие.Вставить("2", 2); + Соответствие.Вставить("3", 3); + + // Когда + + Результат = Соответствия.Скопировать(Соответствие); + + // Тогда + + Ожидаем.Что(Результат) + .ИмеетТип("Соответствие") + .ИмеетДлину(3) + .Не_().Равно(Соответствие); + + Ожидаем.Что(Результат.Получить("1")).Равно(1); + Ожидаем.Что(Результат.Получить("2")).Равно(2); + Ожидаем.Что(Результат.Получить("3")).Равно(3); + +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\241\320\277\320\270\321\201\320\276\320\272.os" "b/tests/\320\241\320\277\320\270\321\201\320\272\320\270.os" similarity index 85% rename from "tests/\320\241\320\277\320\270\321\201\320\276\320\272.os" rename to "tests/\320\241\320\277\320\270\321\201\320\272\320\270.os" index 19e151e..77394b9 100644 --- "a/tests/\320\241\320\277\320\270\321\201\320\276\320\272.os" +++ "b/tests/\320\241\320\277\320\270\321\201\320\272\320\270.os" @@ -5,7 +5,7 @@ // Когда - Результат = Список.ИзЭлементов( + Результат = Списки.ИзЭлементов( 1, 2, 3, 4, 5, 6, 7, 8, 9, 9 ); @@ -34,7 +34,7 @@ // Когда - Результат = Список.Скопировать(СписокМассив); + Результат = Списки.Скопировать(СписокМассив); // Тогда @@ -52,13 +52,13 @@ // Дано - КопируемыйСписок = Список.ИзЭлементов( + КопируемыйСписок = Списки.ИзЭлементов( 1, 2, 3, 4, 5, 6, 7, 8, 9, 9 ); // Когда - Результат = Список.Скопировать(КопируемыйСписок); + Результат = Списки.Скопировать(КопируемыйСписок); // Тогда diff --git "a/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" new file mode 100644 index 0000000..2603e51 --- /dev/null +++ "b/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -0,0 +1,554 @@ +#Использовать asserts +#Использовать ".." +#Использовать "./ТестМодуль" + +Перем Рефлектор; // Рефлектор +Перем ДляКаждогоВыполнилсяРаз; // Количество раз которое выполнился метод ДляКаждого + +&Тест +Процедура ИтераторСоздается() Экспорт + + // Когда + Результат = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Тогда + + Ожидаем.Что(Результат).ИмеетТип("СписокИтераторМассив"); + +КонецПроцедуры + +&Тест +Процедура ИтераторПодписанНаМодификациюКоллекции() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Когда + + ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); + + // Тогда + + Ожидаем.Что(Рефлектор.ПолучитьСвойство(Итератор, "КоллекцияМодифицирована")).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ИтераторНеИнвалидируетсяПриМутацииСамимСобой() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Когда + + Параметры = Новый Массив; + Параметры.Добавить(Итератор); + + ВызватьСобытие("КоллекцияМодифицирована", Параметры); + + // Тогда + + Ожидаем.Что(Рефлектор.ПолучитьСвойство(Итератор, "КоллекцияМодифицирована")).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ЕстьСледующий() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + + // Когда + + Результат = Итератор.ЕстьСледующий(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура НетСледующего() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Когда + + Результат = Итератор.ЕстьСледующий(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура Следующий() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + + // Когда + + Результат = Итератор.Следующий(); + + // Тогда + + Ожидаем.Что(Результат).Равно(1); + +КонецПроцедуры + +&Тест +Процедура СледующийВызываетИсключениеПриКонкурентнойМодификации() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Массив, ЭтотОбъект); + Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Следующий") + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +&Тест +Процедура СледующийВызываетИсключениеПриВыходеЗаГраницы() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Следующий") + .ВыбрасываетИсключение("Значение индекса выходит за пределы диапазона"); + +КонецПроцедуры + +&Тест +Процедура Удалить() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Итератор.Удалить(); + + // Тогда + + Ожидаем.Что(Коллекция).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура УдалитьВызываетИсключениеПриКонкурентнойМодификации() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Массив, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Удалить") + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +&Тест +Процедура УдалитьВызываетИсключениеПриНеустановленномЭлементе() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Удалить") + .ВыбрасываетИсключение("Итератор не указывает на элемент коллекции"); + +КонецПроцедуры + +&Тест +Процедура ДляКаждогоОставшегося() Экспорт + + // Дано + + ДляКаждогоВыполнилсяРаз = 0; + + Коллекция = Новый Массив; + Коллекция.Добавить(0); + Коллекция.Добавить(1); + Коллекция.Добавить(2); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + + Итератор.Следующий(); + + // Когда + + Итератор.ДляКаждогоОставшегося(Новый Действие(ЭтотОбъект, "ДействиеДляКаждогоОставшегося")); + + // Тогда + + Ожидаем.Что(ДляКаждогоВыполнилсяРаз).Равно(2); + Ожидаем.Что(Итератор.ЕстьСледующий()).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ДляКаждогоОставшегосяЛямбда() Экспорт + + // Дано + + ТестМодуль.ДляКаждогоВыполнилсяРаз = 0; + ТестМодуль.СуммаЭлементов = 0; + + Коллекция = Новый Массив; + Коллекция.Добавить(0); + Коллекция.Добавить(1); + Коллекция.Добавить(2); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + + Итератор.Следующий(); + + // Когда + + Итератор.ДляКаждогоОставшегося( + "Элемент -> ТестМодуль.ДляКаждогоВыполнилсяРаз = ТестМодуль.ДляКаждогоВыполнилсяРаз + 1; + | ТестМодуль.СуммаЭлементов = ТестМодуль.СуммаЭлементов + Элемент;" + ); + + // Тогда + + Ожидаем.Что(ТестМодуль.ДляКаждогоВыполнилсяРаз).Равно(2); + Ожидаем.Что(ТестМодуль.СуммаЭлементов).Равно(3); + Ожидаем.Что(Итератор.ЕстьСледующий()).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ПриМутацииИтераторомИнвалидируютсяДругиеИтераторы() Экспорт + + // Дано + + ДляКаждогоВыполнилсяРаз = 0; + + Коллекция = Новый Массив; + Коллекция.Добавить(0); + Коллекция.Добавить(1); + Коллекция.Добавить(2); + + ИтераторМутирующий = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + ИтераторИнвалидирующийся = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + + // Когда + + ИтераторМутирующий.Следующий(); + ИтераторМутирующий.Удалить(); + + // Тогда + + Ожидаем.Что(Рефлектор.ПолучитьСвойство(ИтераторИнвалидирующийся, "КоллекцияМодифицирована")).ЭтоИстина(); + Ожидаем.Что(Рефлектор.ПолучитьСвойство(ИтераторМутирующий, "КоллекцияМодифицирована")).ЭтоЛожь(); + +КонецПроцедуры + +Процедура ДействиеДляКаждогоОставшегося(Элемент) Экспорт + + ДляКаждогоВыполнилсяРаз = ДляКаждогоВыполнилсяРаз + 1; + + Ожидаем.Что(Элемент).Равно(ДляКаждогоВыполнилсяРаз); + +КонецПроцедуры + +&Тест +Процедура ЕстьПредыдущий() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Результат = Итератор.ЕстьПредыдущий(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура НетПредыдущего() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Когда + + Результат = Итератор.ЕстьПредыдущий(); + + // Тогда + + Ожидаем.Что(Результат).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура Предыдущий() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Результат = Итератор.Предыдущий(); + + // Тогда + + Ожидаем.Что(Результат).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ПредыдущийВызываетИсключениеПриКонкурентнойМодификации() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Массив, ЭтотОбъект); + Итератор.Следующий(); + Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Предыдущий") + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +&Тест +Процедура ПредыдущийВызываетИсключениеПриВыходеЗаГраницы() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Предыдущий") + .ВыбрасываетИсключение("Значение индекса выходит за пределы диапазона"); + +КонецПроцедуры + +&Тест +Процедура СледующийИндекс() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Результат = Итератор.СледующийИндекс(); + + // Тогда + + Ожидаем.Что(Результат).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ПредыдущийИндекс() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Результат = Итератор.ПредыдущийИндекс(); + + // Тогда + + Ожидаем.Что(Результат).Равно(0); + +КонецПроцедуры + +&Тест +Процедура Установить() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Итератор.Установить(2); + + // Тогда + + Ожидаем.Что(Коллекция) + .ИмеетДлину(1) + .Содержит(2); + +КонецПроцедуры + +&Тест +Процедура УстановитьВызываетИсключениеПриКонкурентнойМодификации() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Массив, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + + Параметры = Новый Массив; + Параметры.Добавить(1); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Установить", Параметры) + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +&Тест +Процедура УстановитьВызываетИсключениеПриНеустановленномЭлементе() Экспорт + + // Дано + + Итератор = Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект); + + Параметры = Новый Массив; + Параметры.Добавить(1); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Установить", Параметры) + .ВыбрасываетИсключение("Итератор не указывает на элемент коллекции"); + +КонецПроцедуры + +&Тест +Процедура Вставить() Экспорт + + // Дано + + Коллекция = Новый Массив; + Коллекция.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Коллекция, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Итератор.Вставить(2); + + // Тогда + + Ожидаем.Что(Коллекция) + .ИмеетДлину(2) + .Содержит(1) + .Содержит(2); + +КонецПроцедуры + +&Тест +Процедура ВставитьВызываетИсключениеПриКонкурентнойМодификации() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(1); + + Итератор = Новый СписокИтераторМассив(Массив, ЭтотОбъект); + Итератор.Следующий(); + + // Когда + + Рефлектор.УстановитьСвойство(Итератор, "КоллекцияМодифицирована", Истина); + + Параметры = Новый Массив; + Параметры.Добавить(1); + + // Тогда + + Ожидаем.Что(Итератор) + .Метод("Вставить", Параметры) + .ВыбрасываетИсключение("Коллекция была изменена в процессе обхода"); + +КонецПроцедуры + +Рефлектор = Новый Рефлектор; diff --git "a/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" index 7861407..119504b 100644 --- "a/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" +++ "b/tests/\320\241\320\277\320\270\321\201\320\276\320\272\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -35,7 +35,7 @@ // Тогда - Ожидаем.Что(Результат).ИмеетТип("ИтераторМассив"); + Ожидаем.Что(Результат).ИмеетТип("СписокИтераторМассив"); КонецПроцедуры @@ -1497,7 +1497,7 @@ МетодИтератор = Новый Метод("Итератор") .Публичный() - .ТелоМетода("Возврат Новый ИтераторМассив(Массив, ЭтотОбъект);"); + .ТелоМетода("Возврат Новый СписокИтераторМассив(Массив, ЭтотОбъект);"); МетодСодержит = Новый Метод("Содержит") .Публичный() @@ -1518,7 +1518,7 @@ МетодИтератор = Новый Метод("Итератор") .Публичный() - .ТелоМетода("Возврат Новый ИтераторМассив(Новый Массив, ЭтотОбъект);"); + .ТелоМетода("Возврат Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект);"); Возврат Новый ПостроительДекоратора() .Метод(МетодИтератор) diff --git "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/lib.config" "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/lib.config" index df93c87..e184a6d 100644 --- "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/lib.config" +++ "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/lib.config" @@ -1,3 +1,4 @@  + \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\320\271.os" "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\320\271.os" new file mode 100644 index 0000000..6977649 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\320\271.os" @@ -0,0 +1,38 @@ +Перем Пора; // Дата, когда необходимо сработать +Перем Значение; // Хранящееся значение +Перем ДобавлятьПораВПредставление; // Добавить поле пора в представление значения + +Функция Задержка() Экспорт + Возврат Пора - ТекущаяУниверсальнаяДатаВМиллисекундах(); +КонецФункции + +Функция Значение() Экспорт + Возврат Значение; +КонецФункции + +Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) // BSLLS:UnusedLocalMethod-off + + СтандартнаяОбработка = Ложь; + + Если ДобавлятьПораВПредставление Тогда + + Представление = СтрШаблон( + "Отложенный{Пора=%1, Значение=%2}", + Формат( + МестноеВремя('00010101' + Пора / 1000, ЧасовойПояс()), + "ДФ=HH:mm:ss" + ) + ":" + Цел(((Пора / 1000) - Цел(Пора / 1000)) * 1000), + Значение + ); + + Иначе + Представление = СтрШаблон("Отложенный{Значение=%1}", Значение); + КонецЕсли; + +КонецПроцедуры + +Процедура ПриСозданииОбъекта(пПора, пЗначение, пДобавлятьПораВПредставление = Истина) + Пора = пПора; + Значение = пЗначение; + ДобавлятьПораВПредставление = пДобавлятьПораВПредставление; +КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" index dcc1ec4..089a1bb 100644 --- "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" +++ "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" @@ -30,5 +30,58 @@ Возврат Число(Лев(Новый СистемнаяИнформация.Версия, 1)) >= 2; КонецФункции +Функция ВыполнитьВПятьПотоков( + Сценарий, + ИмяМетода, + Параметр = Неопределено, + ВторойПараметр = Неопределено, + ТретийПараметр = Неопределено) Экспорт + + Параметры = Новый Массив; + + Если Не Параметр = Неопределено Тогда + Параметры.Добавить(Параметр); + КонецЕсли; + + Если Не ВторойПараметр = Неопределено Тогда + Параметры.Добавить(ВторойПараметр); + КонецЕсли; + + Если Не ТретийПараметр = Неопределено Тогда + Параметры.Добавить(ТретийПараметр); + КонецЕсли; + + Задания = Новый Массив(); + + Для Счетчик = 1 По 5 Цикл // BSLLS:UnusedLocalVariable-off + + Задания.Добавить( + ФоновыеЗадания.Выполнить(Сценарий, ИмяМетода, Параметры) + ); + + КонецЦикла; + + Попытка + ФоновыеЗадания.ОжидатьЗавершенияЗадач(); + Исключение + + ВызватьИсключение ПодробноеПредставлениеОшибки( + ИнформацияОбОшибке().Параметры[0].ИнформацияОбОшибке + ); + + КонецПопытки; + + Результаты = Новый Массив; + + Для каждого ФоновоеЗадание Из Задания Цикл + Результаты.Добавить(ФоновоеЗадание.Результат); + КонецЦикла; + + ФоновыеЗадания.Очистить(); + + Возврат Результаты; + +КонецФункции + ДляКаждогоВыполнилсяРаз = 0; -СуммаЭлементов = 0; \ No newline at end of file +СуммаЭлементов = 0; diff --git "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" index 8745c70..f41be21 100644 --- "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" +++ "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" @@ -298,7 +298,7 @@ МетодИтератор = Новый Метод("Итератор") .Публичный() - .ТелоМетода("Возврат Новый ИтераторЗначениеСоответствие(ВнутренняяКарта.Соответствие, ЭтотОбъект);"); + .ТелоМетода("Возврат Новый ИтераторКлючСоответствие(ВнутренняяКарта.Соответствие, ЭтотОбъект);"); МетодДляКаждого = Новый Метод("ДляКаждого") .Публичный() diff --git "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" index 77a174d..090300b 100644 --- "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" +++ "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\276\320\265\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" @@ -296,7 +296,7 @@ МетодИтератор = Новый Метод("Итератор") .Публичный() - .ТелоМетода("Возврат Новый ИтераторЗначениеСоответствие(ВнутренняяКарта.Соответствие, ЭтотОбъект);"); + .ТелоМетода("Возврат Новый ИтераторКлючСоответствие(ВнутренняяКарта.Соответствие, ЭтотОбъект);"); МетодДляКаждого = Новый Метод("ДляКаждого") .Публичный() diff --git "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" index c28280d..9d69787 100644 --- "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" +++ "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272.os" @@ -383,7 +383,7 @@ МетодИтератор = Новый Метод("Итератор") .Публичный() - .ТелоМетода("Возврат Новый ИтераторМассив(Массив, ЭтотОбъект);"); + .ТелоМетода("Возврат Новый СписокИтераторМассив(Массив, ЭтотОбъект);"); МетодДляКаждого = Новый Метод("ДляКаждого") .Публичный() diff --git "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.os" "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.os" index 45262c2..de57fff 100644 --- "a/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.os" +++ "b/tests/\320\244\320\270\320\272\321\201\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\241\320\277\320\270\321\201\320\276\320\272\320\230\321\202\320\265\321\200\320\260\321\202\320\276\321\200.os" @@ -9,7 +9,7 @@ // Когда - Результат = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Результат = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); // Тогда @@ -22,7 +22,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); @@ -44,7 +44,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); // Когда @@ -62,7 +62,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); // Когда @@ -80,7 +80,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); @@ -102,7 +102,7 @@ ДляКаждогоВыполнилсяРаз = 0; - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); @@ -122,7 +122,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); // Когда @@ -140,7 +140,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); @@ -160,7 +160,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); @@ -180,7 +180,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); // Тогда @@ -196,7 +196,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); @@ -216,7 +216,7 @@ // Дано - Итератор = Новый ФиксированныйСписокИтератор(Новый ИтераторМассив(Новый Массив, ЭтотОбъект)); + Итератор = Новый ФиксированныйСписокИтератор(Новый СписокИтераторМассив(Новый Массив, ЭтотОбъект)); Рефлектор.УстановитьСвойство(Итератор, "ВнутреннийИтератор", ИтераторФикстура()); Итератор.Следующий(); From 46eac4ac8f7c6c8b198effcc39a32279cc4d64a8 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Tue, 17 Dec 2024 15:15:02 +1000 Subject: [PATCH 3/4] =?UTF-8?q?1.=20=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=20=D0=BA=D1=80=D0=BE=D0=BB=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=202.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BA=D0=BE=D0=BC=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BE=D1=80=D0=B8=D1=82=D0=B5=D1=82=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8=203.=20=D0=A1=D0=B8?= =?UTF-8?q?=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=BE=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D1=8C=20=D1=82=D0=B0=D0=BA=20=D0=B6=D0=B5=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BE=D0=B6=D0=B8?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=B2=D0=B7?= =?UTF-8?q?=D1=8F=D1=82=D0=B8=D0=B8=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\277\320\270\321\201\320\276\320\272.md" | 2 +- ...20\265\320\275\320\275\321\213\321\205.os" | 18 +++--- ...20\265\321\200\320\265\320\264\321\214.os" | 22 +++---- ...20\265\321\200\320\265\320\264\321\214.os" | 39 ++++++++----- ...21\201\321\201\320\270\320\262\321\213.os" | 8 +-- ...20\265\321\200\320\265\320\264\321\214.os" | 58 +++++++++---------- ...20\265\321\200\320\265\320\264\321\214.os" | 53 +++++++++++++++++ ...20\276\320\264\321\203\320\273\321\214.os" | 10 +++- 8 files changed, 140 insertions(+), 70 deletions(-) diff --git "a/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" "b/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" index 76cd03c..fead94c 100644 --- "a/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" +++ "b/doc/\320\241\320\277\320\270\321\201\320\272\320\270/\320\241\320\277\320\270\321\201\320\276\320\272.md" @@ -101,7 +101,7 @@ // // Параметры: // Индекс - Число - Индекс устанавливаемого элемента -// Значение -Произвольный - Устанавливаемый элемент +// Значение - Произвольный - Устанавливаемый элемент // // Возвращаемое значение: // Произвольный - Значение которое было заменено diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" index dc51a27..e24eaf0 100644 --- "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\321\214\320\236\321\202\320\273\320\276\320\266\320\265\320\275\320\275\321\213\321\205.os" @@ -31,7 +31,7 @@ Функция ПроцессорКоллекции() Экспорт Возврат Очередь.ПроцессорКоллекции(); КонецФункции - + Функция Количество() Экспорт Возврат Очередь.Количество(); КонецФункции @@ -71,7 +71,7 @@ Блокировка.Разблокировать(); Исключение - + Блокировка.Разблокировать(); ВызватьИсключение; @@ -108,7 +108,7 @@ КонецЕсли; _ = Новый РефлекторОбъекта(Элемент) // BSLLS:UnusedLocalVariable-off - .РеализуетИнтерфейс(ИнтерфейсОтложенный, Истина); + .РеализуетИнтерфейс(ИнтерфейсОтложенный, Истина); Возврат Очередь.Положить(Элемент); КонецФункции @@ -131,24 +131,24 @@ КонецЕсли; Исключение - + Блокировка.Разблокировать(); ВызватьИсключение; - + КонецПопытки; - + Блокировка.Разблокировать(); - + Если ТекущаяУниверсальнаяДатаВМиллисекундах() >= Конец И Результат = Неопределено Тогда Результат = Опциональные.Пустой(); КонецЕсли; - Если Результат <> Неопределено Тогда + Если Результат <> Неопределено Тогда Возврат Результат; КонецЕсли; Приостановить(100); - + КонецЦикла; КонецФункции diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" index 92bf391..694f5c1 100644 --- "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -60,7 +60,7 @@ Функция ПроцессорКоллекции() Экспорт Возврат ПроцессорыКоллекций.ИзКоллекции(ВМассив()); КонецФункции - + Функция Количество() Экспорт Возврат Массив.Количество(); КонецФункции @@ -108,7 +108,7 @@ КонецПроцедуры Функция Удалить(Элемент) Экспорт - + Индекс = Массив.Найти(Элемент); Если Индекс <> Неопределено Тогда @@ -117,7 +117,7 @@ ОповеститьОбИзмененииКоллекции(); Возврат Истина; - + КонецЕсли; Возврат Ложь; @@ -156,7 +156,7 @@ Пока Итератор.ЕстьСледующий() Цикл Если Предикат.Выполнить(Итератор.Следующий()) Тогда - + Итератор.Удалить(); БылУдаленХотяБыОдинЭлемент = Истина; @@ -178,7 +178,7 @@ Пока Итератор.ЕстьСледующий() Цикл Если Не Коллекция.Содержит(Итератор.Следующий()) Тогда - + Итератор.Удалить(); БылУдаленХотяБыОдинЭлемент = Истина; @@ -200,8 +200,8 @@ Добавлен = Ложь; Для Индекс = 0 По Массив.ВГраница() Цикл - - Если Компаратор.Выполнить(Массив[Индекс], Элемент) < 0 Тогда + + Если Компаратор.Выполнить(Массив[Индекс], Элемент) > 0 Тогда Массив.Вставить(Индекс, Элемент); Добавлен = Истина; Прервать; @@ -222,21 +222,21 @@ Функция Взять() Экспорт Если Количество() > 0 Тогда - + Элемент = Массив[0]; Массив.Удалить(0); ОповеститьОбИзмененииКоллекции(); Возврат Новый Опциональный(Элемент); - + КонецЕсли; Возврат Опциональные.Пустой(); - + КонецФункции Процедура ОповеститьОбИзмененииКоллекции() - + Если ЕстьИтераторы Тогда ВызватьСобытие("КоллекцияМодифицирована", Новый Массив); КонецЕсли; diff --git "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" index 2d2514b..7fe11eb 100644 --- "a/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" +++ "b/src/\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\320\270/\320\236\321\207\320\265\321\200\320\265\320\264\320\270/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -255,28 +255,41 @@ Блокировка.Разблокировать(); ВызватьИсключение; КонецПопытки; - + Блокировка.Разблокировать(); Возврат Результат; КонецФункции -Функция Взять() Экспорт +Функция Взять(Таймаут = 0) Экспорт - Блокировка.Заблокировать(); + Конец = ТекущаяУниверсальнаяДатаВМиллисекундах() + Таймаут; + Результат = Неопределено; + + Пока Истина Цикл + + Блокировка.Заблокировать(); + + Попытка + Результат = ВнутренняяОчередь.Взять(); + Исключение + Блокировка.Разблокировать(); + ВызватьИсключение; + КонецПопытки; - Попытка - Результат = ВнутренняяОчередь.Взять(); - Исключение Блокировка.Разблокировать(); - ВызватьИсключение; - КонецПопытки; - - Блокировка.Разблокировать(); - Возврат Результат; - + ВремяВышло = ТекущаяУниверсальнаяДатаВМиллисекундах() >= Конец; + + Если Результат.СодержитЗначение() Или ВремяВышло Тогда + Возврат Результат; + КонецЕсли; + + Приостановить(100); + + КонецЦикла; + КонецФункции Процедура ОбработкаПолученияПредставления(Представление, СтандартнаяОбработка) // BSLLS:UnusedLocalMethod-off @@ -290,7 +303,7 @@ &Обходимое &Реализует("Очередь") Процедура ПриСозданииОбъекта(Очередь) - + ВнутренняяОчередь = Очередь; Блокировка = Новый БлокировкаРесурса(ЭтотОбъект); diff --git "a/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" "b/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" index b9df48f..0d2057f 100644 --- "a/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" +++ "b/tests/\320\234\320\260\321\201\321\201\320\270\320\262\321\213.os" @@ -80,7 +80,7 @@ &Тест Процедура ИзЭлементов() Экспорт - + // Когда Результат = Массивы.ИзЭлементов( @@ -94,9 +94,9 @@ .ИмеетДлину(10); Для Сч = 1 По 9 Цикл - - Ожидаем.Что(Результат.Найти(Сч)).Не_().ЭтоНеопределено(); - + Ожидаем.Что(Результат[Сч - 1]).Равно(Сч); КонецЦикла; + Ожидаем.Что(Результат[9]).Равно(9); + КонецПроцедуры diff --git "a/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" index a591493..f827ac5 100644 --- "a/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" +++ "b/tests/\320\237\321\200\320\270\320\276\321\200\320\270\321\202\320\265\321\202\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -389,9 +389,9 @@ // Дано Массив = Новый Массив; - Массив.Добавить(3); - Массив.Добавить(2); Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(5); ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; @@ -410,10 +410,10 @@ Ожидаем.Что(Результат).ЭтоИстина(); Ожидаем.Что(Массив).ИмеетДлину(4); - Ожидаем.Что(Массив[0]).Равно(4); - Ожидаем.Что(Массив[1]).Равно(3); - Ожидаем.Что(Массив[2]).Равно(2); - Ожидаем.Что(Массив[3]).Равно(1); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(4); + Ожидаем.Что(Массив[3]).Равно(5); КонецПроцедуры @@ -423,9 +423,9 @@ // Дано Массив = Новый Массив; - Массив.Добавить(1); Массив.Добавить(2); - Массив.Добавить(4); + Массив.Добавить(1); + Массив.Добавить(3); ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь(КомпараторДействие()); @@ -436,16 +436,16 @@ ); // Когда - Результат = ПриоритетнаяОчередь.Добавить(3); + Результат = ПриоритетнаяОчередь.Добавить(4); // Тогда Ожидаем.Что(Результат).ЭтоИстина(); Ожидаем.Что(Массив).ИмеетДлину(4); - Ожидаем.Что(Массив[0]).Равно(1); - Ожидаем.Что(Массив[1]).Равно(3); - Ожидаем.Что(Массив[2]).Равно(2); - Ожидаем.Что(Массив[3]).Равно(4); + Ожидаем.Что(Массив[0]).Равно(2); + Ожидаем.Что(Массив[1]).Равно(4); + Ожидаем.Что(Массив[2]).Равно(1); + Ожидаем.Что(Массив[3]).Равно(3); КонецПроцедуры @@ -487,9 +487,9 @@ Массив = Рефлектор.ПолучитьСвойство(ПриоритетнаяОчередь, "Массив"); Ожидаем.Что(Массив).ИмеетДлину(3); - Ожидаем.Что(Массив[0]).Равно(3); + Ожидаем.Что(Массив[0]).Равно(1); Ожидаем.Что(Массив[1]).Равно(2); - Ожидаем.Что(Массив[2]).Равно(1); + Ожидаем.Что(Массив[2]).Равно(3); КонецПроцедуры @@ -1034,9 +1034,9 @@ // Дано Массив = Новый Массив; - Массив.Добавить(3); - Массив.Добавить(2); Массив.Добавить(1); + Массив.Добавить(2); + Массив.Добавить(4); ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь; @@ -1048,17 +1048,17 @@ // Когда - Результат = ПриоритетнаяОчередь.Положить(4); + Результат = ПриоритетнаяОчередь.Положить(3); // Тогда - + Ожидаем.Что(Результат).ЭтоИстина(); Ожидаем.Что(Массив).ИмеетДлину(4); - Ожидаем.Что(Массив[0]).Равно(4); - Ожидаем.Что(Массив[1]).Равно(3); - Ожидаем.Что(Массив[2]).Равно(2); - Ожидаем.Что(Массив[3]).Равно(1); + Ожидаем.Что(Массив[0]).Равно(1); + Ожидаем.Что(Массив[1]).Равно(2); + Ожидаем.Что(Массив[2]).Равно(3); + Ожидаем.Что(Массив[3]).Равно(4); КонецПроцедуры @@ -1086,9 +1086,9 @@ // Дано Массив = Новый Массив; - Массив.Добавить(1); - Массив.Добавить(2); Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(1); ПриоритетнаяОчередь = Новый ПриоритетнаяОчередь(СравнениеЗначений.ОбратныйПорядок()); @@ -1106,11 +1106,11 @@ Ожидаем.Что(Результат).ИмеетТип("Опциональный"); Ожидаем.Что(Результат.Пустой()).ЭтоЛожь(); - Ожидаем.Что(Результат.Получить()).Равно(1); + Ожидаем.Что(Результат.Получить()).Равно(3); Ожидаем.Что(Массив).ИмеетДлину(2); Ожидаем.Что(Массив[0]).Равно(2); - Ожидаем.Что(Массив[1]).Равно(3); + Ожидаем.Что(Массив[1]).Равно(1); КонецПроцедуры @@ -1128,14 +1128,14 @@ КонецПроцедуры Функция Компаратор(Первый, Второй) Экспорт - + Если Первый % 2 > Второй % 2 Тогда Возврат 1; ИначеЕсли Первый % 2 = Второй % 2 Тогда Возврат 0; Иначе Возврат -1; - КонецЕсли; + КонецЕсли; КонецФункции diff --git "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" index 0f3823d..6036e95 100644 --- "a/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" +++ "b/tests/\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\270\321\200\320\276\320\262\320\260\320\275\320\275\320\260\321\217\320\236\321\207\320\265\321\200\320\265\320\264\321\214.os" @@ -608,6 +608,39 @@ КонецПроцедуры +&Тест +Процедура ВзятьСОжиданием() Экспорт + + // Дано + + ОчередьФикстура = ФикстураВзять(); + ПроверяемаяКоллекция = Новый СинхронизированнаяОчередь(ОчередьФикстура); + + // Когда + + Начало = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + Результаты = ТестМодуль.ВыполнитьВПятьПотоков( + ПроверяемаяКоллекция, + "Взять", + 350 + ); + + Конец = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + // Тогда + + Ожидаем.Что(Результаты).ИмеетДлину(5); + Ожидаем.Что(Конец - Начало).БольшеИлиРавно(350); + Ожидаем.Что(ОчередьФикстура.ВызванМетодВзятьРаз).Равно(25); + + Для каждого Результат Из Результаты Цикл + Ожидаем.Что(Результат).ИмеетТип("Опциональный"); + Ожидаем.Что(Результат.Пустой()).ЭтоИстина(); + КонецЦикла; + +КонецПроцедуры + &Тест Процедура ОбходитсяЦикломДляКаждого() Экспорт @@ -654,4 +687,24 @@ ПроверяемоеЧисло = ПроверяемоеЧисло + Элемент; КонецПроцедуры +Функция ФикстураВзять() + + ПолеВызванМетодВзятьРаз = Новый Поле("ВызванМетодВзятьРаз").Публичное().ЗначениеПоУмолчанию(0); + + МетодВзять = Новый Метод("Взять") + .Публичный() + .ТелоМетода(" + | ВызванМетодВзятьРаз = ВызванМетодВзятьРаз + 1; + | Возврат Опциональные.Пустой();" + ); + + Результат = Новый ПостроительДекоратора() + .Поле(ПолеВызванМетодВзятьРаз) + .Метод(МетодВзять) + .Построить(); + + Возврат Результат; + +КонецФункции + Рефлектор = Новый Рефлектор(); diff --git "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" index 089a1bb..1c2df8f 100644 --- "a/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" +++ "b/tests/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214/\320\242\320\265\321\201\321\202\320\234\320\276\320\264\321\203\320\273\321\214.os" @@ -65,9 +65,13 @@ ФоновыеЗадания.ОжидатьЗавершенияЗадач(); Исключение - ВызватьИсключение ПодробноеПредставлениеОшибки( - ИнформацияОбОшибке().Параметры[0].ИнформацияОбОшибке - ); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Сообщить(ТипЗнч(ИнформацияОбОшибке)); + Если ИнформацияОбОшибке.Параметры <> Неопределено И ИнформацияОбОшибке.Параметры.Количество() > 0 Тогда + ИнформацияОбОшибке = ИнформацияОбОшибке.Параметры[0].ИнформацияОбОшибке; + КонецЕсли; + + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; From a1d949565195e5d9f8e966ddbfc636a686b67c99 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Tue, 17 Dec 2024 15:23:59 +1000 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BD=D1=8F=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=B1=D0=B8=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index 28d9ab9..49e5be4 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("collectionos") - .Версия("0.5.0") + .Версия("0.6.0") .Автор("Кирилл Черненко") .АдресАвтора("https://github.com/sfaqer") .Описание("Фреймворк коллекций для OneScript")