Opened 3 years ago

Closed 3 years ago

#719 closed ожидается проверка (задача сдана)

HW 02 em

Reported by: em.vladislv Owned by: Святослав Власов
Component: HW #3 (Huffman) Version: 2.0
Keywords: Cc:

Description


Change History (4)

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

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

Половина тестов попадала, при том с пустым разархивированным файлом.
Например, тест на компрессию-декомпрессию однобайтового файла 0x78 или файла 0xff
Еще часть тестов попадала из-за того, что размер сжатых данных больше, чем размер исходных, например файл состоящий из всех байт от 0x00 до 0xff после сжатия репортит размер данных 257 байт, что на 1 байт больше, чем размер исходных.

По стилю:
Стоит поместить всё в неймспейс

const int BYTE = 8; не нужен, есть готовая константа CHAR_BIT в <climit> http://www.cplusplus.com/reference/climits/)

HuffTree::HuffTree(std::string word) -- собираешься аргумент модифицировать? Если нет, то константная ссылка.

Постарайся избавиться от ручного управления памятью используя std::unique_ptr

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

Аналогично также плохая идея хранить результат в памяти. Алгоритм должен обрабатывать данные "на лету".

Кодировать битовую последовательность в виде строки -- это тоже плохая идея. Есть более подходящие контейнеры для этого -- std::vector<bool>, к примеру

ManualException::ManualException(const std::string &info)
    : std::logic_error(info) {}

Во-первых, почему у тебя класс объявлен в huffman.h, а его конструктор определен в main.cpp, а во-вторых, можно просто заюзать конструкторы базового класса using std::logic_error::logic_error;

По тестам:
Много чего закомменчено, а после раскоммента не работает. Ты либо почини тесты, либо удали.
Тех тестов, что не закомменчены, не очень-то много и они не очень-то юнит. Не хватает проверки простых и граничных кейсов (строка из одного символа, пустая строка, строка из двух-трех символов, ты бы, кстати, отловил свои баги будь у тебя такие тесты). Не хватает гранулярности -- в идеале каждая нетривиальная функция должна быть оттестирована по отдельности.
Вот так писать не надо:

CHECK(test_tree._tree.top()->_left->_left->_letter == 'n');

Если у тебя внезапно дерево окажется не таким каким ты ожидаешь и один из узлов будет nullptr у тебя просто крашнутся все тесты и будет сложно понять почему именно.

5/2.5/5

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

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

comment:3 Changed 3 years ago by em.vladislv

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

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

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

7/2.5/6

Note: See TracTickets for help on using tickets.