К содержимому
ИС30

Поиск по сайту

Конспекты, лабы, квизы, ЧаВо и страницы

Войти
Основы программирования
ПрогаЛаба 0

BabySteps

Нулевая лаба, необязательная. Четыре маленькие задачи на C++, чтобы освоить CMake, тесты, Pull Request и чтение отчётов CI.

Моисеенко Артём Ярославовичдо 10 баллов
Дедлайн
пятница, 1 января
до 23:59
Через 84 дняДедлайн мягкий: сдать можно и позже, но лучше не тянуть
Войти, чтобы записаться на сдачу
Войдите

Задание

Набор из четырёх маленьких задач на C++, чтобы освоить сборку через CMake, запуск тестов и работу с Pull Request и CI. Лаба необязательная, но дальше весь курс устроен так же, поэтому пройти её стоит.

Репозиторий
У каждого свой: организация is-itmo-c-26, репозиторий babysteps-<ваш GitHub-логин>. Условия задач лежат в нём в <задача>/README.md.

Задачи (по возрастанию сложности)

  1. Hello World (hello_world/). Функция PrintHelloWorld печатает в std::cout строку Hello world и перевод строки. Набор тестов HelloWorldSuite.
  2. Parse CLA (parse_cla/). Функция ParseCLA(int argc, char** argv) разбирает три аргумента: режим add или subtract и два целых числа. При успехе печатает <режим> <число> <число> уже разобранными (007 становится 7, -0 становится 0), при любой ошибке печатает Invalid arguments. Набор тестов ParseCLASuite.
  3. Sum (sum/). Код уже написан, но часть тестов SumSuite падает. Нужно по отчёту CI и логам найти упавший тест, понять, что он проверяет, и починить sum/bin/main.cpp. Сумма двух int32_t с насыщением: при переполнении вверх результат 2147483647, вниз -2147483648.
  4. Calculator (calculator/). Функция Calculate(const char* lhs, const char* op, const char* rhs) вычисляет выражение из трёх аргументов. Операторы + - * /, деление целочисленное с округлением к нулю (-7 / 2 даёт -3). Ошибки: Invalid operator, Invalid number, Division by zero, проверяются строго в этом порядке. Набор тестов CalculatorSuite.

Сборка и запуск

В корне репозитория:

cmake -B build
cmake --build build
./build/hello_world
./build/parse_cla add 1 2
./build/sum 2 3
./build/calculator 2 + 3

Все тесты:

ctest -V --test-dir build

Только один набор, например SumSuite:

ctest -R SumSuite -V --test-dir build
Совет
Пока решены не все задачи, часть тестов в CI и локально будет падать. Это нормально, смотрите на набор той задачи, над которой работаете.

Требования

  • Код каждой задачи только в <задача>/bin/main.cpp. Тесты в tests/ менять нельзя.
  • Формат вывода является частью условия: ровно одна строка, без лишних пробелов, символов и сообщений.
  • Parse CLA: числа разбирать самостоятельно. Запрещены std::stoi, std::atoi, std::strtol, std::from_chars и подобные, а также заголовки <string> и <vector>.
  • Calculator: готовые функции разбора разрешены, но сначала прочитайте, как они ведут себя на некорректном вводе. Нужно отличать 0 от «это не число».
  • Сборка без предупреждений в CI: он собирает проект и гоняет все тесты.

Как сдавать

  1. Создайте ветку deadline_0 от main в своём репозитории.
  2. Решайте задачи в этой ветке, коммитьте небольшими логичными порциями.
  3. Откройте Pull Request из deadline_0 в main.
  4. Дождитесь отчёта CI в комментарии к PR (📊 Report Card): в таблице Test matrix видно, сколько тестов каждого набора прошло.
  5. Если что-то упало, откройте логи джоба во вкладке Actions или по ссылке Details у проверки, найдите имя упавшего теста и ожидаемое значение.

Материалы

Комментарии0

Пока никто ничего не написал.

Войдите, чтобы оставить комментарий