Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

readme.md

Умножение чисел

Эта задача предназначена для знакомства с тестирующей системой. Вам предстоит реализовать функцию Multiply, которая перемножает 2 числа, в файле multiplication.cpp. Перед тем, как приступить к решению, настройте окружение согласно общей инструкции.

Структура задачи

В каждой задаче обычно есть как минимум 3-4 файла:

  • CMakeLists.txt --- cmake-файл для сборки задачи.
  • test.cpp --- сами тесты для задачи.
  • *.h --- некоторый .h файл, который содержит объявления функций/классов, которые необходимо реализовать.
  • *.cpp --- файлы, в которых вы должны реализовать то, что требуется в условии задачи (в данном случае multiplication.cpp).
  • .tester.json --- файл с метаданными, которыми пользуется тестирующая система. Поле allow_change показывает, какие файлы можно менять.

Вам разрешено изменять только файлы, содержащие решение задачи, --- в противном случае система не примет вашу посылку. Когда вы делаете посылку, система запускает test.cpp, и в случае успешного завершения задача вам засчитывается.

Сборка

Вы можете использовать любую удобную вам среду разработки или текстовый редактор. Обращайтесь к Yandex о том, как настроить CMake проект в вашей IDE. С самим CMake мы ещё познакомимся. Ниже будет инструкция по настройке окружения через командную строку.

Линтеры

В работе с кодом в индустрии очень хорошо иметь линтер, который по заданным правилам приводит ваш код к единому стилю. Мы будем использовать C++ Google Code Style с некоторыми различиями.

  • Исключения будут разрешены
  • Отступы в 4 пробела
  • Максимальная длина строки в 100 символов
  • Будем миксовать С++17 и C++20

Если ваш код не будет соответствовать кодстайлу, проверка будет падать с ошибкой. Чтобы привести его к стилю, используйте clang-format -i file.cpp, конфигурацию clang-format можно прочитать здесь.

Сборка проекта из командной строки

Создадим директорию со сборкой:

# В директории cpp-advanced-hse.
mkdir build
cd build

Убедитесь, что у вас уже установлен cmake нужной версии, командой cmake --version. Версия должна быть не ниже 3.13. Если cmake еще не установлен, то нужно сделать это:

  • на Ubuntu запустите sudo apt-get update, а затем sudo apt-get install cmake
  • на OS X запустите brew install cmake

Теперь запустим cmake:

cmake ..

Если на этом шаге вы получаете странные ошибки, проверьте, что вы создали директорию build в корне репозитория, а не в директории с задачей.

При этом будет выведена некоторая служебная информация, в частности, используемый компилятор. Для корректной сборки необходим g++ версии не ниже 10.3 или clang++ версии не ниже 11.0.0. Установить их можно также из apt и brew соответственно.

Некоторые задачи могут компилироваться и с меньшими версиями, ответственность лежит на вас. Сервер собирает всё с clang-14.

Наконец, соберем нашу задачу test.cpp:

make test_multiplication

Названия таргетов (в этой задаче test_multiplication) можно брать из файла .tester.json из поля "tests".

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

Теперь в директории build есть исполняемый файл test_multiplication, который и нужно запустить: ./test_multiplication.

Обратите внимание, что помимо этого на сервере также осуществляется тестирование с включенными санитайзерами, которые проверяют наличие неопределенного поведения и некорректной работы с памятью в программе.

Осуществить такую сборку просто, но нужно делать это в отдельной сборочной директории:

# В директории cpp-advanced-hse.
mkdir asan_build
cd asan_build
cmake -DCMAKE_BUILD_TYPE=ASAN ..
make test_multiplication

Если вы реализуете решение в этой задаче просто как a * b, то тесты в asan-сборке должны упасть. Изучите ошибку, поймите, почему тест упал, и исправьте решение.

Настройка навигации по коду в Visual Studio Code

Мы рекомендуем установить расширение clangd и отключить стандартный плагин C/C++. Чтобы clangd заработал, запускайте cmake с аргументом -DCMAKE_EXPORT_COMPILE_COMMANDS=ON. Эта опция включает генерацию файла compile_commands.json, нужного для навигации.

Чтобы clangd видел этот файл, сделайте симлинк на него в корне репозитория. Находясь в cpp-advanced-hse, выполните ln -s build/compile_commands.json compile_commands.json, где build - имя директории, в которой вы запускали cmake.