Change History (4)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Корректность нулевая -- прошел только тест на пустом файле. На всех остальных после сжатия-распаковки выходной файл пустой.
Убедись, что твоя программа работает хотя бы на файлах из одного, двух, трех байт.

По стилю:
Исключения не должны ничего выводить в консоль в конструкторе. Вдруг я захочу их отловить, а тут мне какие-то сообщения в консоль сыпятся, с которыми ничего нельзя сделать. Что-то в консоль может выводить обработчик исключений.

"Виртуальность" методов указывается только в базовом классе, у переопределенных в наследниках методов нет нужды указывать virtual.

std::unique_ptr<HuffTree> _tree; -- тут нет нужды юзать unique_ptr, здесь просто можно хранить поле по значению.

TreeNode* _root; -- а вот тут подходящее место для unique_ptr, если сделать чтобы TreeNode также владел своими детьми через unique_ptr, это избавит тебя от необходимости в деструкторах вообще (но тебе придется определить виртуальный деструктор в базовом классе, чтобы вызвались деструкторы у полей классов-наследников)

virtual TreeNode*& get_parent(); -- если хочешь менять парента по ссылке, то лучше напиши геттер и сеттер.

Читать файл целиком в память -- плохая идея. Так твоя программа не будет работать на файлах больших размера ОЗУ, при том, что сам алгоритм такого ограничения на входные данные не накладывает. Узнать размер файла ты можешь другим способом (seekp и tellp). Аналогично также плохая идея хранить результат в памяти. Алгоритм должен обрабатывать данные "на лету".

  freq_table = new int[ALPHABET_SIZE];
  code_len = new int[ALPHABET_SIZE];

Зачем это хранить на куче? Размер массива у тебя же фиксированный. Хранить эти поля по значению в std::array будет намного удобнее и безопаснее.

Вместо magic numbers лучше использовать константы из <climits> (например CHAR_BIT вместо 8, там где ты проходишь по битам)

Тестов мало. Желательно протестировать каждый нетривиальный метод (приватный и публичный), проверив основные и граничные случаи.

0/2/4

comment:2 Changed 3 years ago by Святослав Власов

Upd:
void HuffmanArchiver::load_file(std::string filename) -- собираешься менять filename? Если нет, то константная ссылка.

comment:3 Changed 3 years ago by predelina.anastasiya

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:4 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

Почти все тесты попадали с тем, что сжатый и затем распакованный файл не совпадает с исходным. Даже пресловутый файл с иксом, после декомпрессии там 0x00

Тестов критически мало.

К сожалению, могу поставить только 1/2/8

Note: See TracTickets for help on using tickets.