"""E72 resource scheduling, real missions, memory and self-improvement tests."""
from __future__ import annotations
import json, subprocess, sys
from pathlib import Path
from cain_workforce.resource import ResourceController
A=Path("artifacts/e72")

def test_resource_controller_caps_and_leases():
    r=ResourceController(max_concurrent=4)
    t={"operation":"hash_compute","params":{"iterations":2000000},"timeout_s":120}
    assert r.admit(t,in_flight=0) is True
    assert r.admit(t,in_flight=4) is False
    assert r.lease_for(t,in_flight=2)>=r.estimate_seconds(t,in_flight=2)
    assert r.snapshot()["grants_authority"] is False

def test_e70_reconciliation_preserves_both():
    d=json.loads((A/"baseline-reconciliation.json").read_text())
    assert d["preserved_both"] is True
    assert d["e70_original"]["worker_hours"]!=d["e71_recomputed"]["worker_hours"]
    assert d["difference_hours"]>0

def test_five_real_missions_accepted():
    d=json.loads((A/"real-missions.json").read_text())
    assert d["completed"]==5 and d["accepted"]==5
    repo=d["missions"]["repo_software"]
    assert repo["test_failed_before"] and repo["test_passed_after"] and repo["patch_contains_fix"]

def test_memory_improves_updated_fact_recall():
    d=json.loads((A/"memory-eval.json").read_text())
    assert d["typed_recall_accuracy"]>d["stale_baseline_accuracy"]

def test_self_improvement_is_measured_and_approved():
    d=json.loads((A/"self-improvement.json").read_text())
    assert d["measured"]["delta"]>0 and d["history"]["ok"] is True
    assert d["promoted"]["approved_by"]

def test_e72_offline_verifier_passes():
    r=subprocess.run([sys.executable,"scripts/evolution72/verify_e72_offline.py"],capture_output=True,text=True)
    assert r.returncode==0, r.stdout+r.stderr
