import unittest
from strategy_systems import *
class StrategyTests(unittest.TestCase):
 def test_options(self):self.assertEqual((operating_result(100,1000,600,20000),operating_result(80,1200,700,25000)),(20000,15000))
 def test_marketplace(self):self.assertEqual(marketplace(100,500,'.1',20,2000),(50000,5000,1000))
 def test_ai(self):
  x=ai_review(3,2,1,4,4,10,50);self.assertEqual((x['precision'],x['recall'],x['accuracy'],x['loss']),(F(3,5),F(3,4),F(7,10),70));self.assertTrue(x['capacityExceeded'])
 def test_zero_metrics(self):self.assertIsNone(ai_review(0,0,0,0,0,10,50)['precision'])
 def test_electricity(self):self.assertEqual(electricity(900,120,'.5'),(F(15,2),450));self.assertEqual(electricity(1500,200,'.5'),(F(15,2),750))
 def test_matching(self):
  sellers=[dict(id='S',categories=['p'],capacity=1)];req=[dict(id='A',category='p'),dict(id='B',category='p')];self.assertEqual(match(req,sellers),[('A','S'),('B',None)]);self.assertEqual(sellers[0]['capacity'],1)
 def test_duplicate(self):
  with self.assertRaises(ValueError):match([dict(id='A',category='p')]*2,[])
 def test_invalid_capacity(self):
  with self.assertRaises(ValueError):match([],[dict(id='S',categories=[],capacity=-1)])
 def test_invalid_arithmetic(self):
  for f,args in [(operating_result,(-1,1,1,1)),(marketplace,(1,1,2,1,1)),(ai_review,(1,-1,1,1,1,1,1)),(electricity,(1,0,1))]:
   with self.assertRaises(ValueError):f(*args)
