67 lines
2.8 KiB
Python
67 lines
2.8 KiB
Python
# Проверки altera_logic: фиксируют ожидаемое поведение на воспроизводимых входных данных.
|
|
# Сценарии для навигации по файлу:
|
|
# test_rtl_info_and_first_configuration_vector
|
|
# test_error_response_is_short_even_for_info
|
|
# test_partial_response_times_out_without_retry
|
|
# test_demo_export_uses_capture_rate_not_current_ui_settings
|
|
# Тестовые значения и подмены окружения относятся к проверке контракта; они не являются
|
|
# настройками рабочего устройства.
|
|
|
|
"""Golden RTL vectors through the Python FFI (no Python production codec)."""
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from altera_logic import NativeAnalyzer
|
|
|
|
|
|
class AnalyzerTests(unittest.TestCase):
|
|
def test_rtl_info_and_first_configuration_vector(self):
|
|
core = NativeAnalyzer()
|
|
self.assertEqual(core.next_request(), bytes.fromhex("A5 01 00 00 00 A4"))
|
|
self.assertEqual(core.next_request(), b"")
|
|
for byte in bytes.fromhex("5A 81 00 10 00 10 32 01 E8"):
|
|
core.feed(bytes([byte]))
|
|
self.assertEqual(core.state, core.READY)
|
|
with self.assertRaises(ValueError):
|
|
core.start(49, 1, 0, 1, 1)
|
|
core.start(49, 0, 0, 1, 1)
|
|
self.assertEqual(core.next_request(), bytes.fromhex("A5 02 31 00 00 96"))
|
|
core.feed(bytes.fromhex("5A 82 00 D8"))
|
|
self.assertEqual(core.next_request(), bytes.fromhex("A5 03 00 00 00 A6"))
|
|
|
|
def test_error_response_is_short_even_for_info(self):
|
|
core = NativeAnalyzer()
|
|
core.next_request()
|
|
core.feed(bytes.fromhex("5A 81 01 DA"))
|
|
self.assertEqual(core.state, core.ERROR)
|
|
self.assertEqual(core.get(1), 3)
|
|
|
|
def test_partial_response_times_out_without_retry(self):
|
|
core = NativeAnalyzer()
|
|
core.next_request()
|
|
core.feed(bytes.fromhex("5A 81 00"))
|
|
core.tick(1000)
|
|
self.assertEqual(core.get(1), 4)
|
|
self.assertEqual(core.next_request(), b"")
|
|
|
|
def test_demo_export_uses_capture_rate_not_current_ui_settings(self):
|
|
core = NativeAnalyzer()
|
|
core.reset(demo=True)
|
|
core.start(49)
|
|
capture = core.capture()
|
|
self.assertEqual(len(capture.samples), 4096)
|
|
self.assertEqual(capture.sample_rate, 1000000)
|
|
self.assertEqual(capture.trigger_index, 2048)
|
|
self.assertTrue(capture.demo)
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
path = Path(directory)/"capture.csv"
|
|
capture.save_csv(path)
|
|
rows = path.read_text().splitlines()
|
|
self.assertEqual(len(rows), 4097)
|
|
self.assertIn("time_s", rows[0])
|
|
self.assertEqual(rows[2049].split(",")[1], "0.0")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|