1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import unittest
import util.BehaviorQuerySystem as bqs
from behaviors.ColorChangerBehavior import *
import util.Geo as geo
class TestBQS(unittest.TestCase):
def setUp(self):
bqs.initBQS()
b = ColorChangerBehavior({'Id': 'color','ColorList':[(255,0,0)]})
c = ColorChangerBehavior({'Id': 'color2', 'ColorList':[(0,0,255)]})
bqs.addBehavior(b)
bqs.addBehavior(c)
b.addInput({'Location':(3,4)})
c.addInput({'Location':(5,12)})
b.timeStep()
c.timeStep()
def tearDown(self):
bqs.initBQS()
def test_simple_query(self):
validQuery = lambda args:args['Color']==(255,0,0)
invalidQuery = lambda args:args['Color']==(254,0,0)
assert bqs.query(validQuery) == [{'Color':(255,0,0), 'Location':(3,4)}]
assert bqs.query(invalidQuery) == []
def test_dist_query(self):
validDist = lambda args:geo.dist(args['Location'], (0,0)) <= 5
invalidDist = lambda args:geo.dist(args['Location'], (0,0)) <= 2
doubleDist = lambda args:geo.dist(args['Location'], (0,0)) <= 20
assert bqs.query(validDist) == [{'Color':(255,0,0), 'Location':(3,4)}]
assert bqs.query(invalidDist) == []
assert bqs.query(doubleDist) == [{'Color':(255,0,0), 'Location':(3,4)}, {'Color':(0,0,255),\
'Location':(5,12)}]
def test_complex_queries(self):
validQuery = lambda args:args['Color']==(255,0,0)
doubleDist = lambda args:geo.dist(args['Location'], (0,0)) <= 20
twoPartPredicate = lambda args:doubleDist(args) and validQuery(args)
assert bqs.query(twoPartPredicate) == [{'Color':(255,0,0), 'Location':(3,4)}]
assert bqs.query([validQuery, doubleDist]) == [{'Color':(255,0,0), 'Location':(3,4)}]
|