[Checkins] SVN: Sandbox/adamg/ocql/trunk/src/ocql/ add more tests to improve code coverage
Charith Paranaliyanage
paranaliyanage at gmail.com
Thu Aug 21 10:58:00 EDT 2008
Log message for revision 90071:
add more tests to improve code coverage
Changed:
U Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.py
U Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.txt
U Sandbox/adamg/ocql/trunk/src/ocql/compiler/compiler.txt
U Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt
U Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py
U Sandbox/adamg/ocql/trunk/src/ocql/rewriter/algebra.py
U Sandbox/adamg/ocql/trunk/src/ocql/rewriter/interfaces.py
U Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py
U Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt
U Sandbox/adamg/ocql/trunk/src/ocql/tests/functions.txt
-=-
Modified: Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.py 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.py 2008-08-21 14:58:00 UTC (rev 90071)
@@ -37,7 +37,8 @@
#need to check If and Make objects present
if (isinstance(iter_obj.func, Lambda) and isinstance(iter_obj.coll, Make)):
if isinstance(iter_obj.func.expr, If):
- if isinstance(iter_obj.func.expr.cond , Binary):
+ if isinstance(iter_obj.func.expr.cond , Binary) \
+ and isinstance(iter_obj.func.expr.cond.left, Identifier):
return iter_obj
else:
iter_obj = bfsFind(iter_obj.func)
Modified: Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.txt 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/aoptimizer/aoptimizer.txt 2008-08-21 14:58:00 UTC (rev 90071)
@@ -94,12 +94,12 @@
>>> alg
Head(Iter(<type 'set'>,
- Lambda i: If(i.value==`5`, Single(<type 'set'>, i.name), Empty(<type 'set'>)),
+ Lambda i: If(i.value == `5`, Single(<type 'set'>, i.name), Empty(<type 'set'>)),
Make(<type 'set'>, <type 'set'>, IUnOptimizedClass)))
>>> algopt
Head(Iter(<type 'set'>,
- Lambda i: If(i.value==`5`, Single(<type 'set'>, i.name), Empty(<type 'set'>)),
+ Lambda i: If(i.value == `5`, Single(<type 'set'>, i.name), Empty(<type 'set'>)),
Make(<type 'set'>, <type 'set'>, IUnOptimizedClass)))
With index
@@ -115,7 +115,7 @@
>>> alg
Head(Iter(<type 'set'>,
- Lambda i: If(i.value==`5`, Single(<type 'set'>, i.name), Empty(<type 'set'>)),
+ Lambda i: If(i.value == `5`, Single(<type 'set'>, i.name), Empty(<type 'set'>)),
Make(<type 'set'>, <type 'set'>, IOptimizedClass)))
Here is the difference. The algebra gets a special object that uses the available
Modified: Sandbox/adamg/ocql/trunk/src/ocql/compiler/compiler.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/compiler/compiler.txt 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/compiler/compiler.txt 2008-08-21 14:58:00 UTC (rev 90071)
@@ -112,6 +112,6 @@
>>> aopt, run = make("len(list [ i in ICourse | i ])")
>>> aopt
- Head(Reduce(<type 'list'>, `0`, Lambda i: `1`, +, Iter(<type 'list'>, Lambda i: Single(<type 'list'>, i), Make(<type 'list'>, <type 'set'>, ICourse))))
+ Head(Reduce(<type 'set'>, `0`, Lambda i: `1`, +, Iter(<type 'list'>, Lambda i: Single(<type 'list'>, i), Make(<type 'list'>, <type 'set'>, ICourse))))
>>> run.code
'reduce(operator.add, map(lambda i: 1, reduce(operator.add, map(lambda i: [i], list(metadata.getAll("ICourse"))), [])), 0)'
Modified: Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt 2008-08-21 14:58:00 UTC (rev 90071)
@@ -68,6 +68,9 @@
>>> QueryParser("set [ c in ICourse; c.code==2 or c.code==3 | c ]")(None)
Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Or(Eq(Property(Identifier(c), Identifier(code)), Constant(2)), Eq(Property(Identifier(c), Identifier(code)), Constant(3))), Identifier(c))
+ >>> QueryParser("set [ c in ICourse; not (c.code==2 or c.code==3) | c ]")(None)
+ Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Not(Or(Eq(Property(Identifier(c), Identifier(code)), Constant(2)), Eq(Property(Identifier(c), Identifier(code)), Constant(3)))), Identifier(c))
+
>>> QueryParser("set [ c in ICourse; a as c.name; a=='C1' | c]")(None)
Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Alias(Identifier(a), Property(Identifier(c), Identifier(name))); Eq(Identifier(a), Constant('C1')), Identifier(c))
Modified: Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py 2008-08-21 14:58:00 UTC (rev 90071)
@@ -417,7 +417,7 @@
def p_filter_not(self, t):
r'''filter : NOT condition
'''
- t[0] = Not(self.metadata, self.symbols, t[1], t[3])
+ t[0] = Not(self.metadata, self.symbols, t[2])
if DEBUG: print 'reducing "NOT condition" to "filter"', t[0]
def p_filter_condition(self, t):
Modified: Sandbox/adamg/ocql/trunk/src/ocql/rewriter/algebra.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/rewriter/algebra.py 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/rewriter/algebra.py 2008-08-21 14:58:00 UTC (rev 90071)
@@ -90,6 +90,17 @@
def __repr__(self):
return 'Differ(%s, %s, %s)' % (self.klass, self.coll1, self.coll2)
+class Not(BaseAlgebra):
+ implements(INot)
+
+ def __init__(self, klass, coll):
+ BaseAlgebra.__init__(self)
+ self.setProp('klass', klass)
+ self.setProp('coll', coll)
+
+ def __repr__(self):
+ return "Not(%s, %s)"%(self.klass, self.coll)
+
class Iter(BaseAlgebra):
implements(IIter)
@@ -244,7 +255,7 @@
self.setProp('right', right)
def __repr__(self):
- return "%s%s%s" % (self.left, self.op, self.right)
+ return "%s %s %s" % (self.left, self.op, self.right)
class Operator(BaseAlgebra):
implements(IOperator)
Modified: Sandbox/adamg/ocql/trunk/src/ocql/rewriter/interfaces.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/rewriter/interfaces.py 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/rewriter/interfaces.py 2008-08-21 14:58:00 UTC (rev 90071)
@@ -37,6 +37,13 @@
coll1 = Attribute('first collection')
coll2 = Attribute('second collection')
+class INot(IAlgebraObject):
+ """Objects providing this interface represent the
+ Not Algebra object
+ """
+ klass = Attribute('collection type name')
+ coll = Attribute('collection')
+
class IIter(IAlgebraObject):
"""Objects providing this interface represent the
Iter Algebra object
Modified: Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py 2008-08-21 14:58:00 UTC (rev 90071)
@@ -192,7 +192,7 @@
adapts(INot)
def __call__(self):
- return Not(IRewriter(self.context.expression)())
+ return Not(set, IRewriter(self.context.expression)())
class CountRewriter(ChildRewriter):
implements(IRewriter)
@@ -200,7 +200,7 @@
def __call__(self):
return Reduce(
- self.context.expression.collection_type, # FIXME milyen bag
+ set, # FIXME milyen bag
Constant(0),
Lambda('i', Constant(1)),
Operator('+'),
Modified: Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt 2008-08-21 14:58:00 UTC (rev 90071)
@@ -79,31 +79,31 @@
>>> opt = QueryOptimizer(qo)()
>>> alg = Rewriter(opt)()
>>> print str(alg)
- Head(Reduce(<type 'list'>, `0`, Lambda i: `1`, +, Iter(<type 'list'>, Lambda i: Single(<type 'list'>, i), Make(<type 'list'>, <type 'set'>, ICourse))))
+ Head(Reduce(<type 'set'>, `0`, Lambda i: `1`, +, Iter(<type 'list'>, Lambda i: Single(<type 'list'>, i), Make(<type 'list'>, <type 'set'>, ICourse))))
- >>> qo = QueryParser("set [ c in ICourse; c.credits>3 | c.code ]")(TestMetadata())
+ >>> qo = QueryParser("set [ c in ICourse; c.credits > 3 | c.code ]")(TestMetadata())
>>> opt = QueryOptimizer(qo)()
>>> alg = Rewriter(opt)()
>>> print str(alg)
- Head(Iter(<type 'set'>, Lambda c: If(c.credits>`3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
+ Head(Iter(<type 'set'>, Lambda c: If(c.credits > `3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
- >>> qo = QueryParser("set [ c in ICourse; c.credits>=3 | c.code ]")(TestMetadata())
+ >>> qo = QueryParser("set [ c in ICourse; c.credits >= 3 | c.code ]")(TestMetadata())
>>> opt = QueryOptimizer(qo)()
>>> alg = Rewriter(opt)()
>>> print str(alg)
- Head(Iter(<type 'set'>, Lambda c: If(c.credits>=`3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
+ Head(Iter(<type 'set'>, Lambda c: If(c.credits >= `3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
- >>> qo = QueryParser("set [ c in ICourse; c.credits<3 | c.code ]")(TestMetadata())
+ >>> qo = QueryParser("set [ c in ICourse; c.credits < 3 | c.code ]")(TestMetadata())
>>> opt = QueryOptimizer(qo)()
>>> alg = Rewriter(opt)()
>>> print str(alg)
- Head(Iter(<type 'set'>, Lambda c: If(c.credits<`3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
+ Head(Iter(<type 'set'>, Lambda c: If(c.credits < `3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
- >>> qo = QueryParser("set [ c in ICourse; c.credits<=3 | c.code ]")(TestMetadata())
+ >>> qo = QueryParser("set [ c in ICourse; c.credits <= 3 | c.code ]")(TestMetadata())
>>> opt = QueryOptimizer(qo)()
>>> alg = Rewriter(opt)()
>>> print str(alg)
- Head(Iter(<type 'set'>, Lambda c: If(c.credits<=`3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
+ Head(Iter(<type 'set'>, Lambda c: If(c.credits <= `3`, Single(<type 'set'>, c.code), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
>>> qo = QueryParser("set [ c in ICourse; a as c.code | a ]")(TestMetadata())
>>> opt = QueryOptimizer(qo)()
@@ -111,6 +111,12 @@
>>> print str(alg)
Head(Iter(<type 'set'>, Lambda c: Iter(<type 'set'>, Lambda a: Single(<type 'set'>, a), Single(<type 'set'>, c.code)), Make(<type 'set'>, <type 'set'>, ICourse)))
+ >>> qo = QueryParser("set [ c in ICourse; not ( c.code == 2 or c.code == 3) | c ]")(TestMetadata())
+ >>> opt = QueryOptimizer(qo)()
+ >>> alg = Rewriter(opt)()
+ >>> print str(alg)
+ Head(Iter(<type 'set'>, Lambda c: If(Not(<type 'set'>, c.code == `2` or c.code == `3`), Single(<type 'set'>, c), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
+
# >>> qo = QueryParser("set [ s in IStudents; a as s.major.address.street; a=='Hillhead Street' or a=='Gibson Street' | s ]")(TestMetadata())
# >>> opt = QueryOptimizer(qo)()
# >>> alg = Rewriter(opt)()
Modified: Sandbox/adamg/ocql/trunk/src/ocql/tests/functions.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/tests/functions.txt 2008-08-21 14:39:44 UTC (rev 90070)
+++ Sandbox/adamg/ocql/trunk/src/ocql/tests/functions.txt 2008-08-21 14:58:00 UTC (rev 90071)
@@ -84,8 +84,8 @@
# >>> engine.compile("list [ | 1] differ set [|1]").execute()
Simple in expression (eg select):
- >>> engine.compile("set [ i in ICourse| i ]").execute()
- set([Course <C1>, Course <C2>, Course <C3>])
+ >>> sorted(engine.compile("set [ i in ICourse| i ]").execute())
+ [Course <C1>, Course <C2>, Course <C3>]
Simple condition (eg where):
>>> engine.compile("list [ d in IDepartments; d.name == \"Computing Science\" | d ]").execute()
@@ -107,18 +107,16 @@
# set([set([Department <Computing Science>, Department <Other department>]), set([]), set([Department <Computing Science>])])
Expression in the result:
- >>> engine.compile("list [ i in ICourse | i.runBy ]").execute()
- [set([Department <Computing Science>, Department <Other department>]), set([]), set([Department <Computing Science>])]
+ >>> sorted(engine.compile("list [ i in ICourse | i.runBy ]").execute())
+ [set([]), set([Department <Computing Science>]), set([Department <Other department>, Department <Computing Science>])]
-# FIXME: not working!
-# Size expression in the result:
-# >>> engine.compile("list [ c in ICourse ; size c.runBy == 1 | c ]").execute()
-# [Course <C3>]
+Size expression in the result:
+ >>> engine.compile("list [ c in ICourse ; len(c.runBy) == 1 | c ]").execute()
+ [Course <C3>]
-# FIXME: not working!
-# Size operator in the result:
-# >>> engine.compile("list [ c in ICourse | size c.runBy ]").execute()
-# [2, 0, 1]
+ Size operator in the result:
+ >>> engine.compile("list [ c in ICourse | len(c.runBy) ]").execute()
+ [2, 0, 1]
More test ideas:
engine.compile("""list [ d in IDepartments; c in ICourse; d == some c.runBy | list {d.name, c} ]""").execute()
More information about the Checkins
mailing list