"""Integer-credit admission model. No provider calls, prices or elapsed time."""
import json
from pathlib import Path

def run(release_unknown):
    cap=100;holds={};settled={};admitted=[];events=[]
    def reserve(key):
        if sum(holds.values())+sum(settled.values())+40>cap:
            events.append(dict(event='denied',request=key));return False
        holds[key]=40;admitted.append(key);events.append(dict(event='reserved',request=key));return True
    def settle(key,cost):
        if key in settled:
            assert settled[key]==cost
            return
        holds.pop(key,None);settled[key]=cost
    assert reserve('a')
    events.append(dict(event='client-timeout-usage-unknown',request='a'))
    if release_unknown:holds.pop('a')
    assert reserve('b')
    reserve('c')
    # All admitted operations eventually report 40 credits, including a.
    for key in admitted:settle(key,40)
    before=sum(settled.values());settle('a',40);assert sum(settled.values())==before
    return dict(policy='release-unknown' if release_unknown else 'retain-unknown',
                admitted=len(admitted),actual_credits=before,cap=cap,
                overshoot=max(0,before-cap),duplicate_settlement='ignored',events=events)

rows=[run(True),run(False)]
assert [x['actual_credits'] for x in rows]==[120,80]
assert [x['admitted'] for x in rows]==[3,2]
report=dict(cases=rows,assertions='passed',
            assumptions=['40-credit bound is exact in this model','admission serialized','usage eventually known'],
            not_tested=['provider cancellation','distributed database isolation','real token estimates'])
Path(__file__).with_name('results.json').write_text(json.dumps(report,indent=2)+'\n')
print(json.dumps(report,indent=2))
