// Все способы сматчить stdout/stderr: exact, contains, regex, anyOrder, // numeric-eps. Плюс случай, когда сравнение вывода вообще не нужно // (достаточно exitCode). toolchains { gcc { platforms = "linux" } } build "release" { language = "c" standard = "c11" sources = "solution.c" output = "solution" profile = release } group("matchers") { weight = 1.0 // Точное совпадение (по умолчанию). Пробелы, переводы строк и // регистр важны. Нормализация CRLF / trim_ws настраивается на // уровне файла. test("exact") { stdin = "42\n" stdout = "42\n" } // Подстрока в любом месте вывода. test("contains") { stdin = "log me\n" stdout contains "log me" } // Регулярное выражение (Go regexp syntax). test("regex") { stdin = "7\n" stdout matches "^result:\\s+[0-9]+\\s*$" } // Лайны могут прийти в любом порядке — полезно для stress-тестов // с параллельным выводом. test("any-order") { stdin = "start\n" stdout anyOrder { "alpha" "beta" "gamma" } } // Числовое сравнение с epsilon — для задач с плавающей точкой. // Синтаксис: ~ of "<ожидаемое значение как строка>" test("numeric") { stdin = "3.14159\n" stdout ~ 0.0001 of "3.14159\n" } // Проверяем только stderr; stdout не трогаем вообще (NoMatcher). test("stderr-only") { args = "--version" stderr contains "version 1." } // Никакого матчинга вывода — нас интересует только exit code. test("exit-code-only") { args = "--help" exitCode = 0 } }