Лабораторная работа №2

Вариант: HashMap + Separate Chain

Цель: освоиться с построением пользовательских типов данных, полиморфизмом, рекурсивными алгоритмами и средствами тестирования (unit testing, property-based testing).

В рамках лабораторной работы вам предлагается реализовать одну из предложенных классических структур данных (список, дерево, бинарное дерево, hashmap, граф...).

Требования:

  1. Функции:
    • добавление и удаление элементов;
    • фильтрация;
    • отображение (map);
    • свертки (левая и правая);
    • структура должна быть моноидом.
  2. Структуры данных должны быть неизменяемыми.
  3. Библиотека должна быть протестирована в рамках unit testing.
  4. Библиотека должна быть протестирована в рамках property-based тестирования (как минимум 3 свойства, включая свойства моноида).
  5. Структура должна быть полиморфной.
  6. Требуется использовать идиоматичный для технологии стиль программирования. Примечание: некоторые языки позволяют получить большую часть API через реализацию небольшого интерфейса. Так как лабораторная работа про ФП, а не про экосистему языка -- необходимо реализовать их вручную и по возможности -- обеспечить совместимость.

Содержание отчёта:

  • титульный лист;
  • требования к разработанному ПО;
  • ключевые элементы реализации с минимальными комментариями;
  • тесты, отчет инструмента тестирования, метрики;
  • выводы (отзыв об использованных приёмах программирования).