Генерація тестів

Eolymp дозволяє генерувати тестові дані за допомогою програми, замість того, щоб завантажувати тестові дані. Такий підхід допомагає зменшити кількість помилок та спростити підтримку задач. Також ви можете поєднувати вручну завантажені тести з генерованими, наприклад, завантаживши вхідні дані та використовуючи генератор для обчислення правильних відповідей.

Генератори тестів – це програми, які виводять вхідні або вихідні дані до свого стандартного потоку виводу ("на екран"). Крім того, генератори відповідей отримують вхідні дані через стандартний ввід, тому ви можете використовувати авторські розв'язоки як генератор відповідей. Ви можете налаштувати поведінку генератора, вказавши додаткові аргументи під час налаштування тестів.

Процес генерації виконується асинхронно. Кожного разу, коли ви змінюєте код генератора або параметри тесту, окремий процес генерує тестові дані та завантажує їх в задачу. Ці дані генеруються один раз та використовуються під час оцінювання. Проте, у рідких випадках, якщо користувач надсилає розв'язок одразу після внесення змін до тестів, але до того, як було згенеровано тестові дані, система згенерує ці дані під час процесу оцінювання. Пам'ятайте про це, коли вносите зміни в задачі під час активного змагання.

Налаштування генераторів тестів

Щоб використовувати генератори тестів, спершу потрібно створити програму генератора в розділі «Скрипти», а потім налаштувати його у самому тесті.

  1. Відкрийте консоль, виберіть простір та задачу, яку хочете налаштувати.

  2. Перейдіть до розділу «Скрипти», створіть новий та вкажіть компілятор і вихідний код для генератора.

  3. Перейдіть до розділу «Тестування» та виберіть набір тестів.

  4. Відкрийте тест і оберіть «Згенерувати вхідні дані за допомогою скрипта» та/або «Згенерувати відповідь за допомогою скрипта».

  5. Введіть команду для генерації, використовуючи синтаксис: script-name arg1 arg2 arg3.... Команда складається з аргументів, розділених пробілами, починаючи з імені скрипта (генератора). Решта аргументів передаються програмі під час виконання і залежать від реалізації генератора.

Після збереження цих змін система поставить завдання на генерацію тестів у чергу. Ви можете відстежувати прогрес у вкладці «Активність» задачі.

Рис. 1. Розділ «Активність» у задачі

Після завершення генерації, дані стануть доступним у блоці «Попередній перегляд відповіді» в тесті.

Приклади

Генерація відповідей

Найпростіший спосіб використання генераторів – це застосування розв'язку автора для генерації відповідей. Просто завантажте вхідні дані, і система автоматично обчислить правильні відповіді.

  • Підготуйте файли вхідних даних та розв'язок автора для задачі.

  • У розділі «Скрипти» задачі додайте новий з ім'ям solution, виберіть мову програмування та вставте вихідний код розв'язку автора.

    Рис. 2. Діалог створення скрипта

  • Перейдіть до розділу «Тестування», виберіть або додайте набір тестів.

  • Додайте новий тест, завантажте вхідні дані та оберіть «Згенерувати відповідні дані за допомогою скрипта». Вкажіть solution у полі «Команда для відповіді».

    Test generators.png

    Рис. 3. Інтерфейс редагування тесту

    Зауважте, що розділ «Попередній перегляд відповіді» з'явиться лише після збереження змін та генерації тестових даних. Це може зайняти до однієї хвилини.

Генерація вхідних даних для простої задачі

Цей приклад демонструє, як написати генератор вхідних даних для Простої задачі. Генератор приймає два аргументи: нижню та верхню межі та генерує випадкове ціле число в цьому діапазоні. Ці аргументи дозволяють вам контролювати параметри тесту.

Ось приклад скрипта генератора:

import random
import sys

if len(sys.argv) != 3:
    print("Usage: python gen.py <lower_bound> <higher_bound>")
    sys.exit(1)

lower = int(sys.argv[1])
higher = int(sys.argv[2])

print(random.randint(lower, higher))

Створіть скрипт з назвою gen для генерації вхідних даних.

Рис. 4. Діалог створення скрипта для gen

Для генерації відповідей можна використати розв'язок для простої задачі, написаний на Python:

n = int(input())
print(int(n / 10), n % 10)

Створіть скрипт з назвою solution для генерації відповідей.

Рис. 5. Діалог створення скрипта для solution

Тепер створіть тести:

Рис. 6. Діалог для створення нового тесту з використанням згенерованих даних

Тут використовуйте скрипт gen для генерації випадкового числа в діапазоні від 10 до 20 та скрипт solution для обчислення відповіді. Скрипт solution отримає вихідні дані від скрипта gen, що дозволить йому згенерувати правильну відповідь.

Після збереження система займе деякий час для генерації тестових даних. Коли все буде готово, ви зможете переглянути згенеровані дані у вікні попереднього перегляду.

Рис. 7. Попередній перегляд згенерованих даних

Ви можете продовжити додавати більше тестів, використовуючи різні значення для генератора вхідних даних, змінюючи параметри тестів за потреби.