import asyncio
import unittest
from engine import DOCUMENTS, CASES, evaluate, validate

class EvaluationTests(unittest.IsolatedAsyncioTestCase):
    async def test_exact_claim_and_citation_checks(self):
        self.assertTrue(validate(CASES['supported']['answer'], DOCUMENTS)[0])
        for name in ['unsupported','conflicting','injection','malformed']:
            self.assertFalse(validate(CASES[name]['answer'], DOCUMENTS)[0], name)
    async def test_regression_labels(self):
        safe=await evaluate('evidence','safe'); broken=await evaluate('evidence','broken')
        self.assertIn(['Expected decisions','5 / 5'],safe['metrics'])
        self.assertIn(['Expected decisions','1 / 5'],broken['metrics'])
        self.assertIn(['Active at finish',0],safe['metrics'])
    async def test_deadline_includes_queue_wait(self):
        r=await evaluate('slow','safe');m=dict(r['metrics'])
        self.assertLessEqual(m['Peak active tasks'],2);self.assertEqual(m['Deadline exits'],5);self.assertEqual(m['Active at finish'],0)
    async def test_public_options(self):
        with self.assertRaises(ValueError):await evaluate('arbitrary','safe')

if __name__=='__main__':unittest.main()
