#924 closed ожидается проверка (задача сдана)
HW #3
Reported by: | lebedev.egor | Owned by: | Дмитрий Свиридкин |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Оно даже работает!
Attachments (2)
Change History (15)
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to lebedev.egor |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 follow-up: 5 Changed 4 years ago by
Хм, я пофиксил все, что тут было написано, не хотелось бы переводить это в следующую попытку...
И еще вопрос: а в какой момент под windows будет портить файлы (и зачем нужен windows)?
comment:3 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Меняю статус на "ожидается проверка", чтобы подать сигнал, что тут есть коммент выше
comment:4 Changed 4 years ago by
Owner: | changed from lebedev.egor to Дмитрий Свиридкин |
---|
Видимо еще вот так надо сделать
comment:5 Changed 4 years ago by
Replying to lebedev.egor:
И еще вопрос: а в какой момент под windows будет портить файлы (и зачем нужен windows)?
В произвольный момент, в зависимости от содержимого файла. У вас платформозависимое решение.
Changed 4 years ago by
Attachment: | Screenshot_20200419_120405.png added |
---|
comment:6 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to lebedev.egor |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Формамирование не исправлено. Табы и пробелы все так же перемешаны (см. скриншот).
Включите отображение непечатаемых символов и отформатируйте все файлы.
Нет тестов на построение дерева по таблице частот.
В тесте check_archive_and_extract
не проверяется равенство файлов. Подумайте почему.
8 + 5 + ? + ?
Следующую попытку переводите в "следующую попытку".
comment:7 Changed 4 years ago by
Owner: | changed from lebedev.egor to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
С форматированием произошла какая-то беда, я его точно исправлял, извиняюсь :(
- Сейчас форматирование поправил
- Добавил тест на корректность построение дерева (по факту получения кодов из дерева) по таблице
- Добавил тестик на 5MB
- Протестил на 3 оперционках, все работает
- На винде отдельно потестил именно на файлах, теперь все работает (это было больно)
- Исправил
check_archive_and_extract
comment:8 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to lebedev.egor |
---|---|
Type: | ожидается проверка → ожидаются исправления |
size_t CLI::getIndex(std::string s1, std::string s2 = {}) const;
Метод хоть и приватный, но совершенно не понятно, что это за аргументы.
HuffmanNode(std::unique_ptr<HuffmanNode>& left, std::unique_ptr<HuffmanNode>& right);
Конструктор захватывает владение указателями. unique_ptr некопируем -- должны быть rvalue ссылки.
HuffmanNode(std::pair<int, uint8_t> pair);
Ну пара. А что это за пара?
friend bool operator<(HuffmanNode& first, HuffmanNode& second);
const?
Расставьте const там, где это уместно.
const std::vector<std::pair<std::vector<bool>, uint8_t>>&
Заверните это безобразие в собственнуб структуру CodeTable
с интерфейсом, позволящим выполнять преобразование кодов.
Типы из стандартной библиотеки не очень подходят для сложных структур. Особенно std::pair.
У вас вроде 17 стандарт -- используйте string_view вместо сырых указателей на char.
structure bindings для итерирования по контейнеру пар и т.д.
* little endian размер блока с кодом для каждого символа - 2 байта
У вас максимум 256 символов. Если дерево выродится в бамбук (список с одним листом в каждом узле), вам точно хватит двух байт?
Код статических методов compress/decompress надо разбить на отдельные шаги. Ввести необходимые сущности (таблица символов, таблица частот) с методами чтения/записи в файл.
Логику чтения и записи по одному биту/байту тоже надо вынести в отдельные структуры. И протестировать их.
8 + 5 + 1.5 + 4
comment:9 follow-up: 10 Changed 4 years ago by
* little endian размер блока с кодом для каждого символа - 2 байта
У вас максимум 256 символов. Если дерево выродится в бамбук (список с одним листом в каждом узле), вам точно хватит двух байт?
Это число, которое описывает размер блока, занимает 2 байта; думаю 65 тысяч битов (кажется, даже байт) точно хватит.
- Где-то все еще остались проблемы с корректностью? Или почему 8/9?
- Правильно ли я понимаю, что за тесты сейчас 5 из-за последнего пункта? Или у них тоже отдельные проблемы есть
- Еще вопрос: нормально ли делать "итератор по дереву" который тупо по массиву с кодами проходит?
comment:10 Changed 4 years ago by
Это число, которое описывает размер блока, занимает 2 байта; думаю 65 тысяч битов (кажется, даже байт) точно хватит.
Ок. Считайте, что этот минус за документацию, из которой не сразу ясно, что вы храните:
[кодируемый байт][блок с кодом; фиксированного размера, размер указывается в заголовке файлу]
- Правильно ли я понимаю, что за тесты сейчас 5 из-за последнего пункта? Или у них тоже отдельные проблемы есть
У вас есть только тесты построения дерева и end-to-end тесты. Тестов проверки полученных кодов нет (только размеры вроде проверяете). Есть еще парсер аргументов, чтение и запись вашего формата. Раскодирование одной строчки кода.
- Еще вопрос: нормально ли делать "итератор по дереву" который тупо по массиву с кодами проходит?
Почему бы и нет. Что у вас там в приватных кишках -- без разницы. Можно честно по листьям дерева проитерироваться. Можно сделать проще и проитерироваться по предпросчитанному массиву.
comment:11 Changed 4 years ago by
Owner: | changed from lebedev.egor to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
Что произошло:
- Добавил битовый поток
- Довольно сильно порефакторил код
- Добавились тесты
- Появилась парочка самописных итераторов
- Все структуры типа
pair<pair<pair<vector<pair<int, pair...
переименованы и выделены в отдельные классы, теперь, смотря compress и extract, не очень хочется плакать - Вероятно, что-нибудь еще упустил, но в основном поправлял архитектуру, за которой следовал стиль, ну и тестов подкрутил
- В пару мест вставил
const
еще
Changed 4 years ago by
comment:13 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
- вложенность кода в main можно уменьшить с помощью function-try-block
-
std::queue<std::unique_ptr<HuffmanNode>> initialNodes_, newNodes_;
Их, скорее всего, можно не делать полями класса. EncodingHuffmanTree?. Очереди нужны только для построения.
У вложенного класса Iterator выравнивание поехало.
-
REQUIRE(std::distance(std::istreambuf_iterator<char>(input), std::istreambuf_iterator<char>()) == std::distance(std::istreambuf_iterator<char>(output), std::istreambuf_iterator<char>())); CHECK(std::equal(std::istreambuf_iterator<char>(input), std::istreambuf_iterator<char>(), std::istreambuf_iterator<char>(output)));
equel вернет true, ничего не проверив
7.1 + 7 + 4.5 + 7.9
Давненько не было рукописных Makefile...
У бинаря с тестами имя неправильное.
Табы и пробелы перемешаны. Настройте IDE на автозамену табов на пробелы. Сейчас тут адски вырвиглазное выравнивание в исходниках, что проверять невозможно.
Под windows будет портить файлы.
Для пустого файла не выводится статистика.
Возможно, даже работает.