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: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
comment:3 Changed 3 years ago by
Resolution: | задача сдана |
---|---|
Status: | closed → reopened |
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
Note: See
TracTickets for help on using
tickets.
Половина тестов попадала, при том с пустым разархивированным файлом.
Например, тест на компрессию-декомпрессию однобайтового файла
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>
, к примеруВо-первых, почему у тебя класс объявлен в
huffman.h
, а его конструктор определен вmain.cpp
, а во-вторых, можно просто заюзать конструкторы базового классаusing std::logic_error::logic_error;
По тестам:
Много чего закомменчено, а после раскоммента не работает. Ты либо почини тесты, либо удали.
Тех тестов, что не закомменчены, не очень-то много и они не очень-то юнит. Не хватает проверки простых и граничных кейсов (строка из одного символа, пустая строка, строка из двух-трех символов, ты бы, кстати, отловил свои баги будь у тебя такие тесты). Не хватает гранулярности -- в идеале каждая нетривиальная функция должна быть оттестирована по отдельности.
Вот так писать не надо:
Если у тебя внезапно дерево окажется не таким каким ты ожидаешь и один из узлов будет
nullptr
у тебя просто крашнутся все тесты и будет сложно понять почему именно.5/2.5/5