68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
import actions
|
|
import kb
|
|
import unittest
|
|
|
|
INITIAL_FACTS = [
|
|
('is', 'N29EO', 'Plane'),
|
|
('at', 'N29EO', 'dia'),
|
|
('is', 'N10IV', 'Plane'),
|
|
('at', 'N10IV', 'oak'),
|
|
('is', 'N33FR', 'Plane'),
|
|
('at', 'N33FR', 'lga'),
|
|
('is', '1Z12345E0205271688', 'Package'),
|
|
('at', '1Z12345E0205271688', 'dia'),
|
|
('is', '1Z12345E6605272234', 'Package'),
|
|
('at', '1Z12345E6605272234', 'dia'),
|
|
('is', '1Z12345E0305271640', 'Package'),
|
|
('at', '1Z12345E0305271640', 'oak'),
|
|
('is', '1Z12345E1305277940', 'Package'),
|
|
('at', '1Z12345E1305277940', 'lga'),
|
|
('is', '1Z12345E6205277936', 'Package'),
|
|
('at', '1Z12345E6205277936', 'lga'),
|
|
('is', 'dia', 'Airport'),
|
|
('is', 'lga', 'Airport'),
|
|
('is', 'oak', 'Airport'),
|
|
]
|
|
|
|
FLY_POS_PRECONDS = [
|
|
('is', '?subject', 'Plane'),
|
|
('is', '?object', 'Airport'),
|
|
]
|
|
|
|
FLY_NEG_PRECONDS = [
|
|
('at', '?subject', '?object'),
|
|
]
|
|
|
|
FLY_RETRACTIONS = [
|
|
('at', '?subject', '?current'),
|
|
]
|
|
|
|
FLY_UPDATES = [
|
|
('at', '?subject', '?object'),
|
|
]
|
|
|
|
fly = actions.Action(FLY_POS_PRECONDS, FLY_NEG_PRECONDS,
|
|
FLY_RETRACTIONS, FLY_UPDATES)
|
|
|
|
class ActionTestSuite(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.kb = kb.from_facts(INITIAL_FACTS)
|
|
|
|
def test_a_flight(self):
|
|
self.assertTrue(self.kb.ask(('at', 'N10IV', 'oak')))
|
|
self.assertFalse(self.kb.ask(('at', 'N10IV', 'lga')))
|
|
|
|
shadow = fly.perform(self.kb, 'N10IV', 'lga')
|
|
self.assertTrue(shadow)
|
|
|
|
# Shadow should reflect the updates and retractions.
|
|
self.assertTrue(shadow.ask(('at', 'N10IV', 'lga')))
|
|
self.assertFalse(shadow.ask(('at', 'N10IV', 'oak')))
|
|
|
|
# The original shouldn't be touched.
|
|
self.assertTrue(self.kb.ask(('at', 'N10IV', 'oak')))
|
|
self.assertFalse(self.kb.ask(('at', 'N10IV', 'lga')))
|
|
|
|
|