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 Georgiy Angeni

Вроде получилось подключить.

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 Georgiy Angeni

Type: ожидаются исправленияожидается проверка
Version: 1.02.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 Georgiy Angeni

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

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

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

15/5/9

Note: See TracTickets for help on using tickets.