Files
RustNotMC/tests/test_float_log_parity.py
T
SashegDev 874b6f20c2 Клиент: начальный импорт кодовой базы
Основа — Horizon (MIT). История апстрима не переносится: этот репозиторий ведёт свою.
2026-10-29 22:04:28 +03:00

38 lines
1.9 KiB
Python

from pathlib import Path
import tempfile
import unittest
from unittest import mock
from tools import test_float_log_parity as parity
class FloatLogRunnerTests(unittest.TestCase):
def test_binary_comparison_rejects_difference_and_truncated_equal_outputs(self):
with tempfile.TemporaryDirectory() as temp:
reference, candidate = Path(temp)/"java.bin", Path(temp)/"rust.bin"
reference.write_bytes(bytes.fromhex("000000003f800000"))
candidate.write_bytes(bytes.fromhex("000000003f800001"))
with self.assertRaisesRegex(ValueError, "float bits 3f800001"):
parity.compare(reference, candidate, 0x3f800000, 2)
candidate.write_bytes(reference.read_bytes())
self.assertEqual(parity.compare(reference, candidate, 0x3f800000, 2), 2)
with self.assertRaisesRegex(ValueError, "does not cover 3 floats"):
parity.compare(reference, candidate, 0x3f800000, 3)
def test_exhaustive_range_covers_all_float_bits(self):
self.assertEqual(parity.ranges(True), [(0, 1 << 32)])
for start, count in parity.ranges(False):
self.assertGreaterEqual(start, 0)
self.assertLessEqual(start + count, 1 << 32)
def test_failed_verification_removes_old_report(self):
with tempfile.TemporaryDirectory() as temp:
report = Path(temp)/"rust-float-log-parity/report.json"
report.parent.mkdir()
report.write_text('{"old_success":true}')
with mock.patch.object(parity.lab, "LOCAL", Path(temp)), mock.patch("sys.argv", ["parity"]), \
mock.patch.object(parity.test_rust_parity, "verify_artifacts", side_effect=ValueError("corrupt artifact")):
with self.assertRaisesRegex(ValueError, "corrupt artifact"):
parity.main()
self.assertFalse(report.exists())