# -*- coding: utf-8 -*- """Автотесты лабораторной 1 (последовательное вычисление).""" import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from conftest import close, load_solution # noqa: E402 from common.tasks import TASKS, run_sequential, smoke_params # noqa: E402 def test_variant_number_set(): mod = load_solution("lab01_sequential") assert 1 <= getattr(mod, "VARIANT_NUMBER", 0) <= 20, ( "Укажите свой VARIANT_NUMBER (1..20) в solution.py") def test_cpu_sequential_correct(): mod = load_solution("lab01_sequential") # имя задачи берём из варианта студента from common.tasks import get_variant name = get_variant(mod.VARIANT_NUMBER)["task_name"] sp = smoke_params(name) # эталон: последовательный запуск из common expected, _ = run_sequential(name, sp, parts=1) # последовательный запуск из 3 кусков тоже обязан совпасть expected3, _ = run_sequential(name, sp, parts=3) got1 = mod.run_cpu_sequential(name, sp, parts=1) got3 = mod.run_cpu_sequential(name, sp, parts=3) assert close(got1, expected), f"checksum(parts=1)={got1}, ожидалось {expected}" assert close(got3, expected3), ( f"checksum зависит от разбиения: parts=3 -> {got3}, parts=1 -> {expected}") def test_cpu_sequential_returns_time(): mod = load_solution("lab01_sequential") from common.tasks import get_variant name = get_variant(mod.VARIANT_NUMBER)["task_name"] res = mod.run_cpu_sequential(name, smoke_params(name), parts=2) assert isinstance(res, tuple) and len(res) == 2, ( "run_cpu_sequential должна возвращать (checksum, секунды)") checksum, seconds = res assert isinstance(seconds, (int, float)) and seconds >= 0 def test_io_sequential_correct(): mod = load_solution("lab01_sequential") results, seconds = mod.run_io_sequential(6, 0.0) assert results == [(i, i * i) for i in range(6)] assert seconds >= 0