swayfx-mosaic/tooling/probes/step20c-saved-input-gpu-batch/test_ledger.py

25 lines
1.4 KiB
Python

"""Pure accounting tests; no laboratory token is consumed."""
import copy,unittest
from ledger import validate
from plans import RUNS,SCOPE,CAPS
class AccountingTests(unittest.TestCase):
def state(self):return dict(scope=SCOPE,runs={},events=[])
def add(self,s,rid,kind,count):
s['runs'][rid]=dict(planned=RUNS[rid]['limits'],reserved=dict.fromkeys(RUNS[rid]['limits'],0))
s['runs'][rid]['reserved'][kind]=count
for i in range(count):s['events'].append(dict(id=rid,kind=kind,ns=1,sequence=len(s['events'])))
def test_fixed_eight(self):self.assertEqual(len(RUNS),8);self.assertEqual(sum(CAPS.values()),96);validate(self.state())
def test_all_caps(self):
s=self.state()
for rid in RUNS:self.add(s,rid,'capture',RUNS[rid]['limits']['capture'])
validate(s);self.assertEqual(len(s['events']),90)
def test_local_exceeded(self):
s=self.state();self.add(s,'saved-A','capture',11)
with self.assertRaises(ValueError):validate(s)
def test_old_ticket(self):
s=self.state();s['scope']='STEP20C_TARGETED_FINAL_BYTES_V1'
with self.assertRaises(ValueError):validate(s)
def test_reconcile(self):
s=self.state();self.add(s,'saved-A','capture',1);s['runs']['saved-A']['reserved']['capture']=0
with self.assertRaises(ValueError):validate(s)
if __name__=='__main__':unittest.main()