Opened 3 years ago
Closed 3 years ago
#720 closed ожидается проверка (задача сдана)
HW #2
Reported by: | predelina.anastasiya | Owned by: | Святослав Власов |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (4)
comment:1 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 3 years ago by
Upd:
void HuffmanArchiver::load_file(std::string filename)
-- собираешься менять filename
? Если нет, то константная ссылка.
comment:3 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:4 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Почти все тесты попадали с тем, что сжатый и затем распакованный файл не совпадает с исходным. Даже пресловутый файл с иксом, после декомпрессии там 0x00
Тестов критически мало.
К сожалению, могу поставить только 1/2/8
Note: See
TracTickets for help on using
tickets.
Корректность нулевая -- прошел только тест на пустом файле. На всех остальных после сжатия-распаковки выходной файл пустой.
Убедись, что твоя программа работает хотя бы на файлах из одного, двух, трех байт.
По стилю:
Исключения не должны ничего выводить в консоль в конструкторе. Вдруг я захочу их отловить, а тут мне какие-то сообщения в консоль сыпятся, с которыми ничего нельзя сделать. Что-то в консоль может выводить обработчик исключений.
"Виртуальность" методов указывается только в базовом классе, у переопределенных в наследниках методов нет нужды указывать
virtual
.std::unique_ptr<HuffTree> _tree;
-- тут нет нужды юзатьunique_ptr
, здесь просто можно хранить поле по значению.TreeNode* _root;
-- а вот тут подходящее место дляunique_ptr
, если сделать чтобыTreeNode
также владел своими детьми черезunique_ptr
, это избавит тебя от необходимости в деструкторах вообще (но тебе придется определить виртуальный деструктор в базовом классе, чтобы вызвались деструкторы у полей классов-наследников)virtual TreeNode*& get_parent();
-- если хочешь менять парента по ссылке, то лучше напиши геттер и сеттер.Читать файл целиком в память -- плохая идея. Так твоя программа не будет работать на файлах больших размера ОЗУ, при том, что сам алгоритм такого ограничения на входные данные не накладывает. Узнать размер файла ты можешь другим способом (
seekp
иtellp
). Аналогично также плохая идея хранить результат в памяти. Алгоритм должен обрабатывать данные "на лету".Зачем это хранить на куче? Размер массива у тебя же фиксированный. Хранить эти поля по значению в
std::array
будет намного удобнее и безопаснее.Вместо magic numbers лучше использовать константы из
<climits>
(напримерCHAR_BIT
вместо 8, там где ты проходишь по битам)Тестов мало. Желательно протестировать каждый нетривиальный метод (приватный и публичный), проверив основные и граничные случаи.
0/2/4