"""Fixture-free checks of the solid-box actual-x86 oracle's test contracts.""" import json from pathlib import Path import re import struct import pytest pytest.importorskip("unicorn") from tools.audit import render_debug_box_runtime as oracle from tools.audit import render_debug_three_runtime as original def modeled(name): case = next(case for case in oracle.cases() if case["name"] == name) raw, blocks, locations = oracle.input_image(case) before = oracle.b.initial_cache(case) return case, raw, blocks, locations, before, oracle.expected(case, before, blocks) def test_private_loader_configuration_does_not_mutate_original_oracle(): assert oracle.b is not original assert original.BOX == "_render_debug_box_outline" assert original.FUNCTIONS == (original.POINT, original.LINE, original.BOX, original.POLYGON, original.CACHE_ENTRY, original.CACHE_STRING) assert "_rasterizer_debug_triangle" not in original.STUBS assert oracle.QUAD not in original.FUNCTION_ADDRESSES assert oracle.QUAD in oracle.b.FUNCTION_ADDRESSES assert oracle.TRIANGLE in oracle.b.FUNCTION_ADDRESSES assert oracle.b.CACHE_ENTRY not in oracle.b.STUBS assert oracle.b.CACHE_STRING not in oracle.b.STUBS def test_case_matrix_contains_both_modes_and_six_diagnostic_exits(): cases = oracle.cases() assert len(cases) == len({case["name"] for case in cases}) == 23 assert all(case["function"] == oracle.BOX for case in cases) assert {(case["null"], case["immediate"]) for case in cases if case.get("null")} == { (name, immediate) for name in ("bounds", "color", "both") for immediate in (False, True)} assert oracle.b.FPCW_MODES == (0x027f, 0x037f) def test_all_embedded_binary_pins_are_complete_sha256_values(): pins = [oracle.TARGET_PIN, oracle.BASE_PIN] + [item[2] for item in oracle.TARGET_FUNCTIONS.values()] assert all(re.fullmatch("[0-9a-f]{64}", pin) for pin in pins) def test_ordinary_corner_and_triangle_order_is_fixed(): _, _, blocks, _, before, (after, events, trace, index) = modeled("immediate_ordinary") points = [struct.unpack("<3f", point) for point in oracle.box_points(blocks["bounds"])] assert points == [(-3., -5., -7.), (4., -5., -7.), (-3., -5., 8.), (4., -5., 8.), (-3., 6., 8.), (4., 6., 8.), (-3., 6., -7.), (4., 6., -7.)] expected_indices = ((0, 2, 4), (0, 4, 6), (1, 3, 5), (1, 5, 7), (0, 1, 3), (0, 3, 2), (4, 5, 7), (4, 7, 6), (0, 1, 7), (0, 7, 6), (2, 3, 5), (2, 5, 4)) assert [tuple(points.index(struct.unpack("<3f", bytes.fromhex(point))) for point in event["points"]) for event in events] == list(expected_indices) assert all(event["color"] == blocks["color"].hex() for event in events) assert trace == [oracle.BOX] + [oracle.QUAD, oracle.TRIANGLE, oracle.TRIANGLE] * 6 assert after == before and index is None @pytest.mark.parametrize("name", ("inverted", "plane", "line", "point", "signed_zero")) def test_degenerate_inverted_and_signed_zero_geometry_is_not_repaired(name): _, _, blocks, _, before, (after, events, trace, index) = modeled("immediate_" + name) assert len(events) == 12 and len(trace) == 19 assert after == before and index is None if name == "signed_zero": assert oracle.box_points(blocks["bounds"])[0] == struct.pack("