Opened 4 years ago
Last modified 4 years ago
#949 assigned ожидается проверка
HW #3
Reported by: | Bagryanova Ekaterina | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (6)
comment:1 Changed 4 years ago by
Version: | 1.0 → 2.0 |
---|
comment:2 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:3 Changed 4 years ago by
P.S. А ещё перепроверьте, пожалуйста, наличие слов final
, noexcept
, explicit
(это в стиль).
comment:4 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Bagryanova Ekaterina |
---|
comment:6 Changed 4 years ago by
Owner: | changed from Bagryanova Ekaterina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
Note: See
TracTickets for help on using
tickets.
Проверялась ревизия 4014 или ранее.
Третья попытка разблокирована.
Корректность 4/9
Тесты 5/8
ByteWriter
: лучше загляните напрямую вstringstream
при помощиstr()
и сравните ответ при помощи одного==
.write code
сделайте честную list-init переменнойcode
вместо циклов. Используйте битовые литералы вроде 0b10'0000'00` вместо сдвигов.Архитектура 3/5
ByteWriter
— зачем публичныйout
,buffer
,statistics
? Стоит закрыть и сделать геттеры. Аналогичная претензия кHuffmanArchiver
.is_additional
плохо согласуется со статистикой (вероятно, из-за этого у вас и проблемы): "дополнительными или нет" могут быть только биты, а статистику вы считаете по байтам, причём характер байта определяется последним записанным битом. Это странно. Кажется, что надо либо статистику считать по битам, либо создаватьByteWriter
с фиксированным видом байт.ByteWriter
стоит поставитьassert
, что буфер пуст. Иначе пользователь может забыть его очистить.Trie::add_node
— в чём сакральный смысл передаватьdeque<bool>
по ссылке?add_node
не возвращает в нём никакого значения. Если это нужно для оптимизации, то возьмитеdeque<>
по значению, а при вызове сделайтеmove
, явно показав, что вам неважно значениеdeque
после вызова.Trie::go
— кажется, это либо всё-таки методTrieNode
и не используетroot
, либо не должно быть первого параметра. И тоже очень странно, что второй параметр мутабельный. Судя по тому, как это используется в тестах, послеgo()
мы всегда ожидаем, что пришли в вершину со значением => это звучит как инвариант.HuffmanTree
HuffmanNode
от одной вершины.HuffmanArchiver
появился кусок логики ввода-вывода и подсчёта статистики (read_symbol
,write_symbol
). Он не имеет никакого отношения к сжатия по Хаффману.Стиль 4/8
CLIException
помог быusing
конструктора.TestCLI.cpp
лучше неCLI_checks
(тем более что название не очень соответствуетsnake_case
илиCamelCase
), а честно написать триCHECK
в каждом тесте.main.cpp
незачем обрабатыватьstd::exception
иCLIException
по-разному. Второе является наследником первого.main.cpp
: лучшеassert
на парсинг условий поставить сразу после созданияcli
. А ещё лучше внести это в инвариант классаCLI
и проверить в конструктореCLI
.Statistics.hpp
не хватаетsize_t
endl
внутриoperator<<
. Он сбрасывает буфер, это пользователь должен делать сам.write_all
—pad_to_byte
(добей до байта)Trie tests
лучше сделатьdeque<bool> x = {0, 1, 0, 0, 0, 1}
. Или хотя бы одинаково инициализироватьcode_a
иbin_text
. А вообще промежуточные переменныеcode_a
, конечно, не нужны.TestTrie
: мойте тарелки перед едой http://blog.algoprog.ru/init-not-clear/!Huffman.cpp
(и в остальных местах) не пытайтесь сделать длинный отступ перед:
и,
, а просто сделайте перенос строки перед:
и обычный отступ.HuffmanNodeComparator
— не хватает слова "по весу"element.first
/element.second
используйте structured binding в range-based-fornew_node
не нужна.HuffmanTree
: а что если ни один из ифов не сработает? Должен быть хотя быassert
на все технически возможные случаи.go_and_find_code
разумно братьcur_code
по ссылке.find_symbols_code
зря разобран случайroot == nullptr
, он должен разобраться автоматически.HuffmanArchiver
очень напрягает, что вcompress
записи байт перемежаются с использованиемByteWriter
. Неочевидно, что не распилим биты где-то в середине. Чтобы это точно не было проблемой, создавайтеByteWriter
только в самых вложенных местах, где используется только он.assert
'а вextract
про то, что прочитали либо'0'
(стоит иф), либо'1'
(хочуassert
).HuffmanArchiver
`