"""Verify saved exposure records with independent exact rational arithmetic"""

import json
import sys
from fractions import Fraction
from pathlib import Path

root = Path(sys.argv[1]) if len(sys.argv) > 1 else Path(__file__).parent
checks = []
for name, rate in [("default", Fraction(24)), ("rational", Fraction(30000, 1001))]:
    record = json.loads((root / f"shutter-{name}.json").read_text())
    expected = Fraction(180, 360) / rate
    assert abs(record["exposureSeconds"] - float(expected)) < 1e-12
    assert abs(record["reciprocalDenominator"] - float(1 / expected)) < 1e-10
    import csv

    for row in csv.DictReader((root / f"shutter-{name}.csv").read_text().splitlines()):
        angle = Fraction(row["angle_degrees"])
        seconds = angle / (360 * rate)
        assert abs(float(row["exposure_ms"]) - float(seconds * 1000)) < 1e-10
        assert abs(float(row["reciprocal_denominator"]) - float(1 / seconds)) < 1e-10
        assert abs(float(row["uniform_motion_trail_pixels"]) - float(30 * angle / 360)) < 1e-10
        checks.append({"rate": str(rate), "angle": str(angle)})
print(json.dumps({"scope": "Independent saved timing records and CSV arithmetic", "cases": checks}))
