-
Notifications
You must be signed in to change notification settings - Fork 1
Timsort и документаци 8000 я #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
1. Реализована сортировка массивов с помощью алгоритма TimSort (прощай пузырь) 2. Сортировка списков так же теперь производится с помощью TimSort 3. Документация и небольшие исправления в статических модулях хелперах для работы с коллекциями
WalkthroughОбновлён номер версии пакета до 0.8.1. Внесены изменения в алгоритмы сортировки и копирования структур данных: в процедуре Сортировать класса списка реализована передача сортировки в модуль Массивы, где добавлены новые функции для сортировки по блокам и работы с массивами. Кроме того, улучшена документация функций во многих модулях (Карты, Множества, Соответствия, Списки, СравнениеЗначений) и добавлены тестовые процедуры для валидации копирования и сортировки коллекций. Changes
Sequence Diagram(s)sequenceDiagram
participant Список as "СписокМассив"
participant Массивы as "Массивы"
participant Блок as "СортироватьБлок/СлияниеБлоков"
Список->>Массивы: Сортировать(Массив, Сравнение, Контекст)
activate Массивы
Массивы->>Блок: СортироватьБлок(Массив, …)
Блок-->>Массивы: Отсортированный блок
Массивы->>Блок: СлияниеБлоков(Массив, …)
Блок-->>Массивы: Отсортированный массив
deactivate Массивы
Массивы-->>Список: Отсортированный массив
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (12)
🚧 Files skipped from review as they are similar to previous changes (12)
⏰ Context from checks skipped due to timeout of 90000ms (2)
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
tests/Массивы.os (1)
132-161
: Добавлен важный тест для проверки новой функциональности сортировки массива.Отличное дополнение, которое напрямую связано с основной целью PR - реализацией алгоритма TimSort. Тест проверяет, что массив правильно сортируется с использованием делегата сравнения в прямом порядке. Тестовые данные хорошо подобраны для проверки корректности сортировки.
Стоит рассмотреть возможность добавления дополнительного теста для проверки сортировки с использованием делегата обратного порядка, чтобы обеспечить полное покрытие функциональности.
src/Модули/Карты.os (1)
44-51
: Рассмотрите альтернативу вместоВычислить
.Вызывая
Вычислить("Ключ" + сч)
, вы потенциально усложняете поддержку и ослабляете типобезопасность. Вместо динамического составления имени переменной можно хранить параметры в массиве или списке и итерироваться по ним напрямую. Это повысит читаемость и упростит отладку.src/Модули/Массивы.os (1)
70-74
: Проверьте корректность копирования при работе со «свободными» (нефиксированными) массивами.Текущая логика создает новый объект типа
Массив
, в который помещается ещё одинФиксированныйМассив
. Возможно, в некоторых случаях вам нужно сохранить оригинальный тип массива или наоборот отказаться от дополнительной «обёртки».
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
packagedef
(1 hunks)src/Классы/Коллекции/Списки/СписокМассив.os
(1 hunks)src/Модули/Карты.os
(2 hunks)src/Модули/Массивы.os
(3 hunks)src/Модули/Множества.os
(2 hunks)src/Модули/Соответствия.os
(2 hunks)src/Модули/Списки.os
(2 hunks)src/Модули/СравнениеЗначений.os
(2 hunks)tests/Массивы.os
(2 hunks)tests/Соответствия.os
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: test (default) / build (ubuntu-latest, default)
- GitHub Check: test (lts-dev) / build (macos-latest, lts-dev)
- GitHub Check: test (lts-dev) / build (ubuntu-latest, lts-dev)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
🔇 Additional comments (24)
packagedef (1)
2-2
: Обновление версии пакета.Версия пакета была обновлена с "0.7.2" до "0.8.1", что соответствует внедрению значительных изменений, таких как реализация алгоритма TimSort для сортировки массивов и списков.
src/Модули/СравнениеЗначений.os (2)
6-10
: Добавлена документация к функции ПрямойПорядок.Хорошее дополнение документации, которое четко объясняет назначение функции и тип возвращаемого значения.
21-25
: Добавлена документация к функции ОбратныйПорядок.Хорошее дополнение документации, которое четко объясняет назначение функции и тип возвращаемого значения.
tests/Соответствия.os (1)
77-104
: Добавлен новый тест для проверки копирования фиксированного соответствия.Хорошее расширение тестового покрытия. Тест проверяет корректность работы функции
Скопировать
с фиксированным соответствием, что дополняет существующий тест для обычного соответствия. Тест следует шаблону "Дано-Когда-Тогда", что делает его структуру понятной и поддерживаемой.tests/Массивы.os (1)
81-107
: Добавлен новый тест для проверки копирования фиксированного массива.Хорошее расширение тестового покрытия. Тест проверяет корректность работы функции
Скопировать
с фиксированным массивом, что дополняет существующий тест для обычного массива. Тестовая логика хорошо структурирована по шаблону "Дано-Когда-Тогда".src/Модули/Списки.os (4)
1-40
: Хорошее дополнение в виде подробной документации!Отличное добавление подробной документации к функции
ИзЭлементов
. Это значительно улучшает понимание назначения функции и ее параметров. Документация четко описывает, что функция создает фиксированный список из произвольных элементов (до 32) и указывает тип возвращаемого значения.
75-82
: Документация улучшает читаемость кодаДобавление документации к функции
Скопировать
делает код более понятным и поддерживаемым. Теперь четко описаны назначение функции, ее параметр и возвращаемое значение.
83-83
: Уточнение имени параметра улучшает понимание функцииИзменение имени параметра с
Коллекция
наСписок
делает функцию более понятной и точно отражает ожидаемый тип входных данных.
88-94
: Логика обновлена в соответствии с новым именем параметраКорректно обновлена логика функции для использования нового имени параметра
Список
вместоКоллекция
.src/Модули/Множества.os (4)
1-39
: Детальная документация улучшает понимание функцииДобавление подробной документации к функции
ИзЭлементов
значительно повышает читаемость и понимание кода. Теперь явно описано назначение функции, её параметры и возвращаемое значение.
74-81
: Хорошее дополнение документации к функцииДобавление документации к функции
Скопировать
делает ее использование более понятным, четко указывая назначение, параметр и тип возвращаемого значения.
82-82
: Уточнение имени параметра повышает ясность кодаИзменение имени параметра с
Коллекция
наМножество
точнее отражает ожидаемый тип входных данных и делает код более понятным.
87-93
: Корректное обновление логики в соответствии с новым именем параметраЛогика функции правильно обновлена для использования нового имени параметра
Множество
.src/Модули/Соответствия.os (5)
1-8
: Улучшенная документация функцииДобавление подробной документации к функции
КакКарта
улучшает понимание ее назначения, параметров и возвращаемого значения.
13-19
: Улучшение реализации с использованием РефлектораЗамена ручного итерирования на использование
Рефлектор
для установки свойства - хорошее улучшение, которое делает код более компактным и выразительным.
25-51
: Подробная документация для ИзЭлементовОтличное дополнение в виде детальной документации для функции
ИзЭлементов
, которая теперь ясно описывает параметры и возвращаемое значение.
85-93
: Улучшенная документация функции СкопироватьПодробная документация с указанием возможных типов входного параметра (как
Соответствие
, так иФиксированноеСоответствие
) улучшает понимание использования функции.
96-103
: Улучшенная реализация для обработки разных типов данныхОтличное улучшение в реализации функции
Скопировать
, которая теперь корректно обрабатывает как обычные, так и фиксированные соответствия. Код стал более надежным и гибким.src/Модули/Карты.os (3)
1-27
: Отличная и подробная документация.Описательные комментарии помогают быстрее понять назначение и использование функции. Продолжайте в том же духе.
61-68
: Документация функции копирования выглядит информативно.Чётко описаны параметры и возвращаемое значение. Дополнительно можно указать, как функция обрабатывает пустые карты или нестандартные типы ключей.
78-78
: Инициализация копии на основеКартыСоответствие
выглядит корректной.Благодаря этому подходу вы чётче контролируете процесс копирования. При необходимости можете добавить проверку типов ключей/значений, если в будущем планируется расширение функционала.
src/Модули/Массивы.os (3)
3-26
: Улучшенное описаниеКакСписок
упрощает понимание логики.Документирование типов входных параметров и результата помогает будущим читателям кода. Текущий вариант выглядит логичным и хорошо структурированным.
28-57
: Отличная реализацияКакМножество
.Использование
Соответствие
для отслеживания уникальных элементов упрощает преобразование массива в множество. Функция корректно добавляет только уникальные значения.
153-295
: Реализация блочного слияния и вставки требует дополнительного тестирования.Новая логика «Тимсорта» (сортировка блоками и последующее слияние) выглядит правильной, однако важно убедиться, что в неклассических сценариях (например, в массивах с очень маленьким или очень большим числом элементов) алгоритм работает корректно и не снижает производительность.
КонецЕсли; | ||
|
||
КонецЦикла; | ||
Массивы.Сортировать(Массив, СравнениеЗначений, Контекст); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Улучшение алгоритма сортировки
Отличное улучшение - замена собственной реализации сортировки вызовом специализированной функции Массивы.Сортировать
. Это соответствует цели PR по реализации алгоритма TimSort, делает код более компактным и, вероятно, более эффективным.
Возможно, стоит добавить комментарий, указывающий, что здесь используется алгоритм TimSort, для будущих разработчиков:
- Массивы.Сортировать(Массив, СравнениеЗначений, Контекст);
+ // Используем TimSort алгоритм для эффективной сортировки
+ Массивы.Сортировать(Массив, СравнениеЗначений, Контекст);
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Массивы.Сортировать(Массив, СравнениеЗначений, Контекст); | |
// Используем TimSort алгоритм для эффективной сортировки | |
Массивы.Сортировать(Массив, СравнениеЗначений, Контекст); |
…тов для СинхронизированнойОчереди - Отключены тесты "ПреставлениеПереопределяется" во множестве файлов тестов из-за ошибки движка (EvilBeaver/OneScript#1530). - Добавлены новые тесты для методов "Взять" и "Положить" в СинхронизированнойОчереди. - Добавлена возможность указания тестового движка в workflow тестирования. - Исправлена логика проверок в тесте "ВзятьСОжиданием" для СинхронизированнойОчереди. - Добавлена фикстура для методов "Взять" и "Положить" в СинхронизированнойОчереди.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Caution
Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 2
🛑 Comments failed to post (2)
.github/workflows/testing.yml (2)
23-23: 🛠️ Refactor suggestion
Исправьте ссылку на переменную в разделе with
В шаге «with» используется обращение к переменной ${{ matrix.test_engiene }}, которое теперь должно соответствовать исправленному ключу, то есть ${{ matrix.test_engine }}.Рекомендуемый diff:
- test_engine: ${{ matrix.test_engiene }} + test_engine: ${{ matrix.test_engine }}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.test_engine: ${{ matrix.test_engine }}
18-19: 🛠️ Refactor suggestion
Опечатка в матричном параметре
В третьей записи матрицы используется неверное имя ключа «test_engiene». Для согласованности с остальными записями и правильной работы переменной, замените «test_engiene» на «test_engine».Рекомендуемый diff:
- - oscript_version: 'dev' - test_engiene: 'oneunit' + - oscript_version: 'dev' + test_engine: 'oneunit'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.- oscript_version: 'dev' test_engine: 'oneunit'
Summary by CodeRabbit
Chores
New Features
Documentation
Refactor