Skip to content

wwwwwert/AlgorithmTesting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Algorithm Course Testing System

Project description

Данный проект был сделан для того, чтобы упростить прохождение курса Алгоритмы в Школе Анализа Данных Яндекс.

В данном проекте представлен скрипт для тестирования решений. Это позволяет удобно перетестировать решение. Вам не придётся запускать тесты вручную после какого-либо изменения программы. Есть поддержка кастомных тестировщиков для задач с нефиксированным ответом.

Тесты проходят под санитайерами и дополнительными проверками как и в Контесте (отключаются флагом -s).

g++ main.cpp \
    -fsanitize=address,undefined \
    -fno-sanitize-recover=all \
    -std=c++20 \
    -O2 \
    -Wall -Werror -Wsign-compare -Wself-assign \
    -o main

В Jupyter ноутбуке представлен пример скрипта для генерации тестов. Подразумевается, что с C++ кодом и ноутбуком, будут работать в VS Code.

Project structure

  • algo_tests.py - скрипт тестирующей системы
  • Task - директория с примером решения и генерации тестов
    • main.cpp - пример с имплементацией BinPow
    • test.ipynb - ноутбук для генериции тестов

Run testing

Для примера тестирования в проекте есть директория Task с реализацией алгоритма BinPow.

Ваше решение должно иметь такую же структуру. Решение дожно быть в файле main.cpp. Тесты должны лежать рядом в папке tests, в директориях вида test_n. В каждой тестовой директории должны быть два файла: input.txt, output.txt.

Запуск тестирования

Установить tqdm: pip install tqdm

Если вы работаете на Ubuntu, то могут быть проблемы с санитайзером, выполните: sudo sysctl vm.mmap_rnd_bits=28

  1. Напишите решение в main.cpp
  2. Сгенерируйте нужное число тестов с помощью test.ipynb. После этого появится директория tests с тест-кейсами. Настоятельно рекомендую генерировать тесты начиная с 20-го номера. Первые зарезервировать под самописные тесты, крайние случаи и т. п.
  3. Запустите тестирование: python3 algo_tests.py Task/ -v

Изучите доступные опции запуска тестирования: python3 algo_tests.py --help

  • -v Печатать аутпут программы
  • -s Компилировать программу без необходимых проверок и санитайзеров
  • -d Пропустить проверку вывода. Тестирование не будет остановлено, если возникнет WA
  • --time-limit Задать TL на работу программы

Кастомная функция проверки

Дополнительно может потребоваться написать кастомную функцию проверки (например, когда требуется ответ с некой точностью, или ответ не зафиксирован, но должен удовлетворять какому-то предикату).

Для этого реализуйте функцию checker в файле checker.py в той же директории, что и main.cpp. Эта функция должна сверять строки с ожидаемыми и выдавать True, всё ОК. Сигнатура функции представлена в примере:

from typing import List

def checker(out_lines: List[str], true_out_lines: List[str]):
    # На вход приходят все непустые строки, с обрезанными пустыми символами по краям .strip()

    if len(out_lines) != len(true_out_lines):
        return False
    
    out_val = float(out_lines[0])
    true_val = float(true_out_lines[0])

    return abs(out_val - true_val) < (2e-4)

About

Testing system for Algorithms YDS (SHAD) course

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published