Opened 3 years ago
Closed 3 years ago
#684 closed ожидается проверка (задача сдана)
BIG HW #02
Reported by: | Georgiy Angeni | Owned by: | Святослав Власов |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Прошу прощения, но я не понял, как подключить doctest.h
так, чтобы заголовочный файл не содержался прямо в проекте и чтобы проект собирался на всех системах (у меня вариант под Linux).
Change History (6)
comment:1 Changed 3 years ago by
comment:2 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Половина тестов упала, потому что размер архива оказывался больше, чем размер исходного файла. Это проявляется на маленьких файлах. Такого быть не должно иначе смысл архивирования теряется :)
Еще часть тестов упала из-за того, что разархивированный файл не совпадает с исходным, при том в самых первых байтах.
Вместо мапы char_counter
проще будет статический массивчик на 255 элементов завести.
И хранить битовый массив в строке и гонять его в bool и обратно -- так себе решение. std::vector<bool>
лучше бы подошел для этой задачи.
Опции archive
и unarchive
очевидно взаимоисключающие, может имеет смысл их заменить enum
-ом?
Что это? О_о
test_write.add_and_write((std::ofstream&)ss, i % 2);
std::stringstream
не является наследником std::ofstream
, поэтому их нельзя кастовать друг к другу. Да и зачем -- ты можешь сделать чтобы метод принимал их общего предка -- std::ostream
и не придется ничего кастить.
Тестов маловато. В идеале у тебя должно быть по одному тесту на каждый метод класса, а у тебя один тест на класс который проверяет всё скопом.
Корректность -- 5/15, тесты -- 3/5
comment:3 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
В несколько раз уменьшил количество места, занимаемое дополнительной информацией в сжатом файле. Тесты сделал по функциям, надеюсь, геттеры и сеттеры тестировать не нужно.
comment:4 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Проблема не в размере дополнительной информации, а в размере самих данных.
Например, сжимая файл размером 1 байт, твоя программа делает файл размером 9 байт исходных и 4 байта доп. данных.
Многие тесты попадали на сравнении исходного и распакованного файла, например тест с трехбайтовым файлом 0x00, 0x00, 0x01
.
Стиль.
enum OperationChoice
-- лучше enum class
std::vector<bool> new_code_1(cur_code); new_code_1.push_back(true); right->assign_codes(char_codes, new_code_1);
Зачем копия? Можно же push_back/pop_back
Заюзай std::unique_ptr
вместо ручных вызовов delete
std::map<char, std::vector<bool> >::const_iterator it = char_codes.begin();
Зачем так? Есть же божественный auto
, который добавили специально чтобы ТАК не писать :)
А еще есть std::accumulate
, который сюда прекрасно подойдет https://en.cppreference.com/w/cpp/algorithm/accumulate
Твои собственные тесты, запущенные под валгриндом, репортят, что память течет
comment:5 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
Вроде получилось подключить.