Opened 3 years ago

Closed 3 years ago

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

HW #3 (Huffman) Kozyrev Andrei

Reported by: Andrei Kozyrev Owned by: Антон Филатов
Component: HW #3 (Huffman) Version: 2.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 3 years ago by Антон Филатов

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

ошибка при сборке

make
if [ ! -d "obj" ]; then mkdir "obj"; fi
g++ -c -std=c++17 -Wall -Werror -Wextra src/TreeNode.cpp -o obj/TreeNode.o
g++ -c -std=c++17 -Wall -Werror -Wextra src/HuffTree.cpp -o obj/HuffTree.o
g++ -c -std=c++17 -Wall -Werror -Wextra src/huffman.cpp -o obj/huffman.o
g++ -c -std=c++17 -Wall -Werror -Wextra src/main.cpp -o obj/main.o
src/main.cpp: In function ‘std::tuple<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > checkParams(int, char**)’:
src/main.cpp:11:21: error: ‘strcmp’ is not a member of ‘std’
             if(std::strcmp(argv[i], "-c") == 0)
                     ^~~~~~
src/main.cpp:13:21: error: ‘strcmp’ is not a member of ‘std’
             if(std::strcmp(argv[i], "-u") == 0)
                     ^~~~~~
src/main.cpp:15:21: error: ‘strcmp’ is not a member of ‘std’
             if(std::strcmp(argv[i], "-f") == 0 || std::strcmp(argv[i], "--file") == 0)
                     ^~~~~~
src/main.cpp:15:56: error: ‘strcmp’ is not a member of ‘std’
             if(std::strcmp(argv[i], "-f") == 0 || std::strcmp(argv[i], "--file") == 0)
                                                        ^~~~~~
src/main.cpp:17:21: error: ‘strcmp’ is not a member of ‘std’
             if(std::strcmp(argv[i], "-o") == 0 || std::strcmp(argv[i], "--output") == 0)
                     ^~~~~~
src/main.cpp:17:56: error: ‘strcmp’ is not a member of ‘std’
             if(std::strcmp(argv[i], "-o") == 0 || std::strcmp(argv[i], "--output") == 0)
                                                        ^~~~~~
Makefile:13: recipe for target 'obj/main.o' failed
make: *** [obj/main.o] Error 1

Но это фиксится быстро.

На большинстве тестов выпадаете с сегфотом на этапе декодирования.
Например, на файле

aaaaaaaaaaaaaaaa

На некоторых не выпадаете, например на таком:

aaaaaaaabaaaaaaa

Но при этом при разжатии выводите информацию не в том порядке, в каком требуется по заданию.

Стиль:

  • не хватает нэймспейсов
  • не хотите ли умные указатели использовать вместо сырых
  • волшебные константы

Тесты: покрытие нужно больше. Разбейте тест кейсы по классам и не забудьте протестировать каждый разработанный класс.

Пока
Корректность: 3/15
Стиль: 7/10
Тесты: 3/5

comment:2 Changed 3 years ago by Andrei Kozyrev

Дьявол
Я обрабатывал отдельно случаи, когда встречается только один символ, но в декодере случайно return стер и поэтому не работало

comment:3 Changed 3 years ago by Andrei Kozyrev

А можете инсайд дать, тесты падали только те, в которых один и тот же символ, или где то еще проблемы есть?

comment:4 Changed 3 years ago by Andrei Kozyrev

Неймспейсы добавил, волшебных констант поубирал, косяки корректности починил, тестов немного добавил

comment:5 Changed 3 years ago by Andrei Kozyrev

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

comment:6 Changed 3 years ago by Антон Филатов

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

ошибка при сборке осталась

make
g++ -c -std=c++17 -Wall -Werror -Wextra src/HuffTree.cpp -o obj/HuffTree.o
g++ -c -std=c++17 -Wall -Werror -Wextra src/huffman.cpp -o obj/huffman.o
g++ -c -std=c++17 -Wall -Werror -Wextra src/main.cpp -o obj/main.o
src/main.cpp: In function ‘std::tuple<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > checkParams(int, char**)’:
src/main.cpp:11:16: error: ‘strcmp’ was not declared in this scope
   11 |             if(strcmp(argv[i], "-c") == 0)
      |                ^~~~~~
src/main.cpp:2:1: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
    1 | #include "huffman.h"
  +++ |+#include <cstring>
    2 |
src/main.cpp:13:16: error: ‘strcmp’ was not declared in this scope
   13 |             if(strcmp(argv[i], "-u") == 0)
      |                ^~~~~~
src/main.cpp:13:16: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
src/main.cpp:15:16: error: ‘strcmp’ was not declared in this scope
   15 |             if(strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--file") == 0)
      |                ^~~~~~
src/main.cpp:15:16: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
src/main.cpp:17:16: error: ‘strcmp’ was not declared in this scope
   17 |             if(strcmp(argv[i], "-o") == 0 || strcmp(argv[i], "--output") == 0)
      |                ^~~~~~
src/main.cpp:17:16: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
Makefile:13: recipe for target 'obj/main.o' failed
make: *** [obj/main.o] Error 1

Тесты все проходят.

Стиль:

  • когда я говорил про нэймспейсы, я ожидал, что вы введёте отдельные нэймспейсы на классы, которые можно отдавать пользователю, и отдельные - на внутреннюю реализацию

Тесты:

  • у вас очень много смоуг тестов. Это, конечно, хорошо, но задача юнит тестов немного в другом. Их цель - понять, не сломалась ли каждая отдельная функция, когда вы обновили функциональность класса. Например, у вас есть класс фигура и методы перемещения, вращения, проверка на принадлежность внутренностям и пр. И вы добавляете логику, например, на масштабирование фигуры. При этом, например, меняете некоторые приватные поля. Меняете так, что перестаёт работать функция проверки на принадлежность внутренностям. Если тесты написаны, как у вас, то всё, что вы увидите - что вот на таких входных данных что-то упало. И надо будет с этими входными данными идти дебагам по всему тестовому кейсу и проверять, что сломалось. А если бы у вас были тесты на каждую отдельную функцию, то запустив такие юнит тесты, вы бы увидели, что юнит тесты по всем функциям работают, как раньше, а именно функция проверки на принадлежность внутренностям теперь не работает. Всё равно надо идти с дебагом, чтобы смотреть, что именно не работает, зато проблема очень быстро локализована.

Корректность: 15/15
Стиль: 8/10
Тесты: 4/5

Note: See TracTickets for help on using tickets.