Opened 3 years ago

Closed 3 years ago

#679 closed ожидается проверка (задача сдана)

HW_Huffman kozlovceva.mariya hw_02

Reported by: Maria Kozlovtseva (kozlovceva.mariya) Owned by: Дмитрий Лапшин (lapshin)
Component: HW #3 (Huffman) Version: 3.0
Keywords: Cc:

Description


Change History (10)

comment:1 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Пока нет тестов и иногда почему-то в самом конце перевод строки и "y" путает. Если скажете, почему, буду очень рада. Но я просто пока не вникала, на самом деле.

И хотелось бы знать, насколько нормально сжимает. На очень маленьких файлах просто таблица слишком много места занимает, больше, чем исходник.

comment:2 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Так, я там почистила немного, теперь конец не путается, всё нормально.
Но большие файлы (и вообще файлы) сворачивает ужасно просто. Там разница несколько процентов((

И фотку разжать в исходное состояние не вышло, не открывается( с текстовыми всё нормально при этом, хотя я в бинарном режиме открываю, не понимаю, в чем разница.

comment:3 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Я без понятия, вторая это посылка уже или нет.
Исправила структуру (убрала наследование), улучшила проверку аргументов, упростила исключения, чтобы было удобнее их в тестах проверять, исправила проблему с файлом из одного символа, убрала очередь из полей.

comment:4 Changed 3 years ago by Дмитрий Лапшин (lapshin)

Owner: changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya)
Type: ожидается проверкаожидаются исправления

Прости, проверка чего было, успеешь исправить.

cannot find file doctest.h :( А потом двойной мейн (в тестах). Очень плохо.

Рекомендую OBJECT библиотеку а не STATIC в CMake.

Корректность: когда в файле всего один вид символов становится грусть. А вообще-то работает, Войну и Мир сжало нормально, почти в 2 раза. Помни, что на маленьких файлах оверхед таблички и всего убивает что бы ты ни делала. Ещё есть грусть когда в файле есть 0x80, его как будто забывают. 10.

Тесты: заголовка лишь.

Стиль:

  1. А ну понятно почему один чарик теряется. Кстати, знаковость char по стандарту неизвестна. Лучше воспользуйся заведомо unsigned и притащи его границы из приличных мест.
  2. Про указатели уже поговорили.
  3. И про структуру классов тоже.
  4. this-> стараемся не писать.
  5. Ты бы сильно упростила себе жизнь если бы включила у файловых потоков исключения) Тем более ты опять сначала проверяешь fail, потом читаешь, ну ааа.
  6. std::bitset<8> buf; Обожаю магические числа!
  7. std::vector<std::pair<...: std::map/std::unordered_map? Или просто уже вектор размера 256?
  8. Хранить битстрочки в виде чаровых кажется избытком, ведь есть вектора булов, ноо предположим.
  9.      friend void tree_traversal_archiver(std::shared_ptr<HuffmanTree::HuffmanTreeNode>& node,
                                             std::map<char, std::string>& coding_table,
                                             const std::string& cur_code);
    
         friend void tree_traversal_unzip(std::shared_ptr<HuffmanTree::HuffmanTreeNode>& node,
                                          std::map<std::string, isNotDefaultCharAndChar>& coding_table,
                                          const std::string& cur_code);
    
    Ну и зачем нам два класса, когда всё умеют деревья?)

5.

comment:5 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Owner: changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin)
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

Вроде всё исправила, кроме тестов.
И ещё стринг на вектор булов не меняла. Мне кажется, абсолютная разница в памяти не такая большая, а выглядит красивей, на мой вкус.

comment:6 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Да, оставила отдельно от failure исключения с открытием файлов намеренно. Мне кажется, их нужно как-то отдельно выделять, так что пусть так будет.

comment:7 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Добавила тесты. Пришлось выделить проверку аргументов в отдельный файл, чтобы иметь возможность её затестить.

comment:8 Changed 3 years ago by Дмитрий Лапшин (lapshin)

Owner: changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya)
Type: ожидается проверкаожидаются исправления

Корректность: Разжатие почему-то медленно на больших тестах, но лишь слегка: в оптимизирующей сборке всё ок. 15.

Тесты: а что-то падают молча, очень грустно. Хотя вроде как бы доктест, всё такое, но просто будто exit 1. Я пробовал запустить из папки со сборкой, пробовал в корне проекта.

Стиль:

  1. Зачем у структуры публичные поля с подчёркивания? Очень странные дефолты в виде пробела.
  2. const size_t BYTE_SIZE = 8; давай привяжемся к стандартной константе.
  3. typedef std::pair<bool, char> isNotDefaultCharAndChar; здесь ок, но вообще такие мягкие кортежи в сложных случаях. На сложные случаи лучше структуры-аггрегаты. Менять не надо.
  4. strcmp: string_view + ==.
  5. Имена методов сложные: unzip_process_algo: почему unzip? Какой алгоритм? Можно было бы просто compress/decompress.
  6. А ну так понятно почему медленно: ты в памяти держишь fine_in_coding (что это за слово такое coding? кодинг?) как ПОЛНУЮ строчку. Лучше без этого. И когда дерево обходишь постоянно создаются новые строчки копиями, это не шустро.
  7. У HuffmanAlgo почти всё публичное зачем-то. И что он сам печатает в std::cout слегка смущает.
  8. Магическое число 6.
  9. Из мейна полезно бы вернуть код не 0 в случае ошибки.

7.

Плюс время на исправления.

comment:9 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Owner: changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin)
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

Всё, теперь тесты запускаются из корня проекта.

comment:10 Changed 3 years ago by Дмитрий Лапшин (lapshin)

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

Тесты: можно было бы конечно ещё статистику потестить или построение дерева, но и так хорошо. 15 / 4 / 10.

Note: See TracTickets for help on using tickets.