[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