kvs/тесты/сложение/сложение.py

86 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import subprocess
import sys
import os
# Пути относительно папки сложение/
PROJECT_ROOT = "../../" # корень kvs/
SOURCE_REL = "тесты/сложение/сложение.квс"
ELF_REL = "тесты/сложение/сложение.elf"
def clean():
"""Удалить временные файлы после теста"""
files = [
"сложение.elf",
"сложение.csv",
"сложение.аст",
"сложение.токены",
"сложение.константа",
"сложение_pass4.log"
]
for f in files:
if os.path.exists(f):
os.remove(f)
print(f"DEBUG: Удалён {f}", file=sys.stderr)
def main():
print("DEBUG: Начало теста сложение", file=sys.stderr)
# Сохраняем текущую директорию
original_dir = os.getcwd()
# Переходим в корень проекта для сборки
os.chdir(PROJECT_ROOT)
print(f"DEBUG: Рабочая папка = {os.getcwd()}", file=sys.stderr)
# 1. Сборка (запускаем из корня)
print("DEBUG: Сборка сложение.квс", file=sys.stderr)
build = subprocess.run(["python3", "квс_сборка.py", SOURCE_REL],
capture_output=True, text=True)
if build.returncode != 0:
print(f"❌ Ошибка сборки: {build.returncode}", file=sys.stderr)
print(f"STDERR: {build.stderr}", file=sys.stderr)
print(f"STDOUT: {build.stdout}", file=sys.stderr)
clean()
sys.exit(1)
print("DEBUG: Сборка успешна", file=sys.stderr)
# Переходим в папку сложение для запуска
os.chdir("тесты/сложение")
print(f"DEBUG: Запуск в папке {os.getcwd()}", file=sys.stderr)
# 2. Проверка, что ELF создан
if not os.path.exists("сложение.elf"):
print("❌ Файл сложение.elf не создан", file=sys.stderr)
clean()
sys.exit(1)
print("DEBUG: ELF файл существует", file=sys.stderr)
# 3. Запуск и проверка кода возврата
print("DEBUG: Запуск ELF", file=sys.stderr)
run = subprocess.run(["./сложение.elf"], capture_output=True, text=True)
print(f"DEBUG: Код возврата = {run.returncode}", file=sys.stderr)
print(f"DEBUG: stdout = {repr(run.stdout)}", file=sys.stderr)
print(f"DEBUG: stderr = {repr(run.stderr)}", file=sys.stderr)
# 4. Проверка результата (42)
expected_code = 42
if run.returncode != expected_code:
print(f"❌ Код возврата не совпадает", file=sys.stderr)
print(f" Ожидалось: {expected_code}", file=sys.stderr)
print(f" Получено: {run.returncode}", file=sys.stderr)
clean()
sys.exit(1)
# Успех
print(f"✅ Тест пройден: {run.returncode} (40+2=42)", file=sys.stderr)
clean()
sys.exit(0)
if __name__ == "__main__":
main()