6.8 KiB
Инструкция по запуску тестов
Помимо тестов на корректные выходные данные система автотестирования будет проверять твою программу и ее исходный код по следующим пунктам:
-
Стилевые тесты. Чтобы проверить, насколько красота твоего кода соответствует стандартам, ты можешь протестировать свой код с помощью утилиты clang-format. В папке
materials/лежит файл.clang-format, который содержит необходимые настройки для стилевого теста. Данный конфигурационный файл распространяет свое действие на все файлы, которые лежат с ним в директории или в директориях ниже. Поэтому, чтобы данные настройки применились к твоим файлам с исходным кодом, скопируй.clang-formatв папкуsrc.
Чтобы запустить проверку на стиль, выполни следующую команду:
clang-format -n src/sourcefile_name.c
Чтобы скачать clang-format, введи в терминал одну из следующих команд:
brew install clang-format
или, если у тебя есть root-права (для Ubuntu / Linux Mint / Debian)
sudo apt install clang-formatНеобходимая версия clang-format:
Mac 18.1.8
Linux 18.1.8Google Style: https://google.github.io/styleguide/cppguide.html
-
Статический анализ кода. Иногда (или не совсем иногда) встречается такое, что корректно компилирующаяся C-программа работает совершенно неправильно или завершается с ошибкой попытки доступа не к своей области памяти. Чтобы предотвратить подобные ошибки на этапе написания программы, используют специальные утилиты, которые анализируют ваш исходный код на предмет потенциальных ошибок. Наша система автотестов использует для этого
cppcheck.Вы можете протестировать ваш исходный код:
cppcheck --enable=all --std=c11 --check-level=exhaustive --disable=information --suppress=missingIncludeSystem --suppress=missingInclude --suppress=checkersReport src/soursefile_name.c
Также можно проверить сразу все файлы с исходным кодом в директории:
cppcheck --enable=all --std=c11 --check-level=exhaustive --disable=information --suppress=missingIncludeSystem --suppress=missingInclude --suppress=checkersReport srcНеобходимая версия cppcheck:
Mac 2.13
Linux 2.13 -
Тест на корректную работу с памятью. При написании C-программ очень важно следить за утечками памяти. Для этого в Unix-подобных операционных системах довольно часто используют утилиту valgrind. Однако на OS X имеются проблемы с поддержкой valgrind, поэтому вместо нее можно использовать утилиту leaks. Вдаваться в механизм работы этих утилит мы сейчас не будем — если интересно, можешь почитать в гугле.
Чтобы запустить свой исполняемый файл с помощью этой утилиты, набери в терминале:
leaks -atExit -- ./main.out | grep LEAK:Обрати внимание на команду
| grep LEAK:. Мы используем ее для короткого вывода, чтобы видеть только линии с утечками, если они есть. Если ты хочешь увидеть весь вывод, просто удали эту команду.При запуске исполняемого файла с помощью leaks может появиться сообщение об ошибке:
dyld: could not load inserted library ‘/usr/local/lib/libLeaksAtExit.dylib’ because image not found
Ошибка возникает из-за того, что leaks не может найти библиотеку libLeaksAtExit.dylib.
В этом случае тебе необходимо ввести следующие команды:cd /usr/local/lib sudo ln -s /Applications/Xcode.app/Contents/Developer/usr/lib/libLeaksAtExit.dylibДополнительно:
Используй флаг-excludeутилиты leaks для того, чтобы отфильтровать утечки в функциях, где известно об утечках памяти. Этот флаг позволяет уменьшить количество посторонней информации, сообщаемой leaks.VALGRIND
Чтобы установить valgrind на компьютер, введи одну из следующих команд:
brew install valgrind
или, если у тебя есть root-права (для Ubuntu / Linux Mint / Debian)
sudo apt install valgrind
Чтобы запустить свой исполняемый файл с помощью этой утилиты, набери в терминале:
valgrind --tool=memcheck --leak-check=yes ./main.outНе рекомендуется использовать valgrind на OS X, вместо нее лучше использовать leaks.
-
Тест сборки. Программу можно проверить на корректность сборки на тестовой системе. Для этого потребуется установленный Docker. Если на системе есть докер, то можно зайти в директорию
materials/buildи запустить оттуда скрипт run.sh. Скрипт обернет твое решение в докер и запустит его вместе с типовым сценарием сборки.