18 lines
3.3 KiB
Python
18 lines
3.3 KiB
Python
"""Нативная проверка напряжений, фазы и сохранения экстремумов эмулятора Zynq.""" # Тест использует производственный заголовок без отдельной реализации генератора.
|
|
import os # Путь к DLL компилятора задаётся только дочернему проверочному процессу.
|
|
from pathlib import Path # Пути вычисляются относительно переносимого рецепта DSView.
|
|
import shutil # Системный компилятор обнаруживается без установки новых зависимостей.
|
|
import subprocess # Настоящая C++-модель компилируется и исполняется в отдельном процессе.
|
|
import tempfile # Исполняемые артефакты не попадают в исходники рецепта.
|
|
import unittest # Проверка включается в существующий набор тестов templates.
|
|
class ScopeDemoTests(unittest.TestCase): # Один нативный сценарий проверяет все четыре канала и крайние случаи времени.
|
|
def test_native_signal_and_envelope(self): # Числовые утверждения выполняются компилятором того же семейства, что сборка DSView.
|
|
compiler = shutil.which('g++') or ('C:/msys64/ucrt64/bin/g++.exe' if Path('C:/msys64/ucrt64/bin/g++.exe').is_file() else None) # Используем уже установленный C++ SDK, не меняя настройки компьютера.
|
|
if not compiler: self.skipTest('Для нативной проверки нужен компилятор g++') # Отсутствие необязательного SDK явно видно в результате тестирования.
|
|
here = Path(__file__).resolve().parent # Исходник проверки и производственный заголовок принадлежат одному checkout.
|
|
environment = dict(os.environ, PATH=str(Path(compiler).parent) + os.pathsep + os.environ.get('PATH', '')) # Windows находит DLL UCRT64 без копирования в системные каталоги.
|
|
with tempfile.TemporaryDirectory(prefix='scope-demo-') as temporary: # Каждый запуск получает собственный исполняемый файл.
|
|
executable = Path(temporary) / ('scope-test.exe' if os.name == 'nt' else 'scope-test') # Расширение соответствует платформе проверочного процесса.
|
|
subprocess.run([compiler, '-std=c++11', '-O2', '-I', str(here.parent / 'native'), str(here / 'scope_demo_test.cpp'), '-o', str(executable)], env=environment, check=True, capture_output=True) # Проверяем компиляцию модели без Qt и аппаратных библиотек.
|
|
subprocess.run([str(executable)], env=environment, check=True, capture_output=True) # Ненулевой код любого числового утверждения становится провалом теста.
|