No description
Find a file
erius f8bfc78cad Updated README.md to include additional info about this project
Implemented reading settings from config file
ftsort now outputs total runtime in ms and peak virtual memory usage
Added some error handling
Added documenation to tape_config.h
Changed catch2 cmake dependency to be resolved using FetchContent
Added generate_input test binary to generate big input tape data sets
Header inclusion path changed to _include_ directory, so that tapelib has to be explicitly specified in include directrives
2024-10-28 05:23:42 +03:00
bin Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00
include/tapelib Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00
src Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00
tests Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00
.clang-format Integrated clang-tidy into cmake 2024-10-23 14:41:12 +03:00
.clang-tidy Removed clang-tidy check for do-while loops 2024-10-27 05:18:23 +02:00
.gitignore Added clang-format and clang-tidy 2024-10-21 11:03:12 +03:00
.pre-commit-config.yaml Integrated clang-tidy into cmake 2024-10-23 14:41:12 +03:00
CMakeLists.txt Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00
README.md Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00

Yadro TATLIN Data Services - Задание

Устройство хранения данных типа лента (Tape) предназначено для последовательной записи и чтения данных. Считывающая/записывающая магнитная головка неподвижна во время чтения и записи, а лента имеет возможность двигаться в обоих направлениях. Запись и чтение информации возможны в ячейку ленты, на которой в данный момент находится магнитная головка. Перемещения ленты затратная по времени операция лента не предназначена для произвольного доступа. Имеется входная лента длины N (где N велико), содержащая элементы типа integer (2^32). Имеется выходная лента такой же длины. Необходимо записать в выходную ленту отсортированные по возрастанию элементы с входной ленты. Есть ограничение по использованию оперативной памяти не более M байт (M может быть < N, т.е. загрузить все данные с ленты в оперативную память не получится). Для реализации алгоритма можно использовать разумное количество временных лент, т.е. лент, на которых можно хранить какую-то временную информацию, необходимую в процессе работы алгоритма.

Необходимо создать проект С++, компилируемый в консольное приложение, которое реализует алгоритм сортировки данных с входной ленты на выходную. Необходимо сделать следующее:

  • Определить интерфейс для работы с устройством типа лента.
  • Написать класс, реализующий этот интерфейс и эмулирующий работу с лентой посредством обычного файла. Должно быть возможно сконфигурировать (без перекомпиляции например, через внешний конфигурационный файл, который будет прочитан на старте приложения) задержки по записи/чтению элемента с ленты, перемотки ленты, и сдвига ленты на одну позицию.
  • Файлы временных лент можно сохранять в директорию tmp.
  • Написать класс, реализующий алгоритм сортировки данных с входной ленты на выходную.
  • Консольное приложение должно принимать на вход имя входного и выходного файлов и производить сортировку.
  • Желательно написать юнит-тесты.

Описание

Проект использует CMake для сборки. Некоторый функционал проекта несовместим с Windows и MacOS (получение используемой памяти, создание временных файлов и т. п.) Проект успешно собирался на Linux x86_64 и aarch64. Документация реализована посредством этого README файла, а также подробными комментариями в коде

Структура проекта:

  • bin - Исходный код исполняемых файлов
    • ftsort - Исходный код основной программы проекта
  • include - Директория для заголовков
    • tapelib - Директория для заголовков библиотеки tapelib
  • src - Исходный код библиотек
  • tests - Исходный код unit-тестов

Сборка

Linux

  1. Склонируйте данный репозиторий и перейдите в него
git clone https://git.obamna.ru/erius/yadro-task.git
cd yadro-task
  1. Сгенерируйте файлы сборки CMake
cmake -S . -B build
  1. Соберите проект с помощью CMake
cmake --build build
  1. Запустите unit-тесты
ctest --test-dir build -V

Сборка и работоспособность проекта не проверялись на Windows и MacOS