61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
import time
|
|
import os
|
|
import sys
|
|
BASE = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
|
if BASE not in sys.path:
|
|
sys.path.insert(0, BASE)
|
|
from crossvenue_arbx.core import LocalArbProblem, SharedSignals, PlanDelta, AuditLog, PrivacyBudget
|
|
from crossvenue_arbx.governance import GraphOfContracts
|
|
|
|
|
|
def test_local_arb_problem_serialization():
|
|
p = LocalArbProblem(
|
|
id="v1-p1",
|
|
venue="VenueA",
|
|
assets=["AAPL", "MSFT"],
|
|
target_misprice=0.001,
|
|
max_exposure=1000.0,
|
|
latency_budget=0.1,
|
|
)
|
|
d = p.to_dict()
|
|
assert d["id"] == "v1-p1"
|
|
assert d["venue"] == "VenueA"
|
|
assert d["assets"] == ["AAPL", "MSFT"]
|
|
|
|
|
|
def test_shared_signals_merge_basic():
|
|
s1 = SharedSignals(version=1, price_delta_by_asset={"AAPL": 0.001, "MSFT": -0.0003})
|
|
s2 = SharedSignals(version=2, price_delta_by_asset={"AAPL": 0.0008, "MSFT": -0.0005})
|
|
merged = s1.merge(s2)
|
|
assert merged.version >= 2
|
|
assert "AAPL" in merged.price_delta_by_asset
|
|
assert "MSFT" in merged.price_delta_by_asset
|
|
|
|
|
|
def test_plan_delta_signature_is_stable():
|
|
plan = PlanDelta(
|
|
delta_actions=[{"from_venue": "VenueA", "to_venue": "VenueB", "asset": "AAPL", "size": 1.0, "time": 1.0}],
|
|
timestamp=1.0,
|
|
contract_id="contract-x",
|
|
)
|
|
assert plan.signature
|
|
assert plan.signature == plan.fingerprint()
|
|
|
|
|
|
def test_audit_log_hash_chain_and_privacy_budget():
|
|
log = AuditLog()
|
|
log.log("first")
|
|
log.log("second")
|
|
assert log.root_hash()
|
|
budget = PrivacyBudget(leakage_budget=1.0)
|
|
assert budget.can_consume(0.25)
|
|
budget.consume(0.25)
|
|
assert budget.remaining() == 0.75
|
|
|
|
|
|
def test_governance_registry_tracks_metadata():
|
|
registry = GraphOfContracts()
|
|
registry.register("contract-x", "1.2.3", "schema-abc")
|
|
assert registry.get_version("contract-x") == "1.2.3"
|
|
assert registry.get_record("contract-x")["schema_hash"] == "schema-abc"
|