diff python/testc3.py @ 215:c1ccb1cb4cef

Major changes in c3 frontend
author Windel Bouwman
date Fri, 05 Jul 2013 13:00:03 +0200
parents 003c8a976fff
children 8b2e5f3cd579
line wrap: on
line diff
--- a/python/testc3.py	Fri Jul 05 11:18:58 2013 +0200
+++ b/python/testc3.py	Fri Jul 05 13:00:03 2013 +0200
@@ -4,7 +4,10 @@
 
 testsrc = """package test;
 
-var u32 c, d;
+/*
+ demo of the source that is correct :)
+*/ 
+var int c, d;
 var double e;
 var int f;
 
@@ -12,9 +15,9 @@
 
 function void test1() 
 {
-    var u32 bdd;
+    var int bdd;
     var int a = 10;
-    bd = 20;
+    bdd = 20;
     var int buf;
     var int i;
     i = 2;
@@ -31,21 +34,23 @@
     t2(2, 3);
 }
 
-function int t2(u32 a, u32 b)
+function int t2(int a, int b)
 {
    if (a > 0)
    {
-      a = 2 + t2(a - 1, 1.0);
+      a = 2 + t2(a - 1, 10);
    }
 
    return a + b;
 }
 
+var int a, b;
+
 function int t3(int aap, int blah)
 {
-   if (a > blah and blah < 45 + 33 or 33 > aap or 6 and true)
+   if (a > blah and blah < 45 + 33 or 33 > aap or 6 > 2 and true)
    {
-      a = 2 + t2(a - 1);
+      a = 2 + t2(a - 1, 0);
    }
 
    return a + b;
@@ -82,12 +87,30 @@
         self.assertSequenceEqual([tok.typ for tok in c3.lexer.tokenize(snippet)], toks)
 
 class testBuilder(unittest.TestCase):
-   def setUp(self):
-      self.diag = ppci.DiagnosticsManager()
-      self.builder = c3.Builder(self.diag)
-   def testSrc(self):
-      self.builder.build(testsrc)
-   def testFunctArgs(self):
+    def setUp(self):
+        self.diag = ppci.DiagnosticsManager()
+        self.builder = c3.Builder(self.diag)
+        self.diag.clear()
+
+    def testSrc(self):
+        self.expectOK(testsrc)
+
+    def expectErrors(self, snippet, rows):
+        """ Helper to test for expected errors on rows """
+        ircode = self.builder.build(snippet)
+        actualErrors = [err.row for err in self.diag.diags]
+        if rows != actualErrors:
+            self.diag.printErrors(snippet)
+        self.assertSequenceEqual(rows, actualErrors)
+        self.assertFalse(ircode)
+
+    def expectOK(self, snippet):
+        ircode = self.builder.build(snippet)
+        if not ircode:
+            self.diag.printErrors(snippet)
+        self.assertTrue(ircode)
+
+    def testFunctArgs(self):
       snippet = """
          package testargs;
          function void t2(int a, double b)
@@ -97,13 +120,9 @@
             t2(1, 1.2);
          }
       """
-      self.diag.clear()
-      ir = self.builder.build(snippet)
-      assert len(self.diag.diags) == 2
-      self.assertEqual(5, self.diag.diags[0].loc.row)
-      self.assertEqual(6, self.diag.diags[1].loc.row)
+      self.expectErrors(snippet, [5, 6])
 
-   def testExpressions(self):
+    def testExpressions(self):
       snippet = """
          package test;
          function void t(int a, double b)
@@ -116,41 +135,28 @@
             c = b > 1;
          }
       """
-      self.diag.clear()
-      ircode = self.builder.build(snippet)
-      self.assertEqual(len(self.diag.diags), 3)
-      self.assertEqual(self.diag.diags[0].loc.row, 8)
-      self.assertEqual(self.diag.diags[1].loc.row, 9)
-      self.assertEqual(self.diag.diags[2].loc.row, 10)
-      self.assertFalse(ircode)
+      self.expectErrors(snippet, [8, 9, 10])
 
-   def testEmpty(self):
+    def testEmpty(self):
       snippet = """
       package A
       """
-      ircode = self.builder.build(snippet)
-      self.assertFalse(ircode)
+      self.expectErrors(snippet, [3])
 
-   def testEmpty2(self):
+    def testEmpty2(self):
       snippet = ""
-      self.diag.clear()
-      ircode = self.builder.build(snippet)
-      self.assertFalse(ircode)
+      self.expectErrors(snippet, [1])
 
-   def testRedefine(self):
+    def testRedefine(self):
       snippet = """
       package test;
       var int a;
       var int b;
       var int a;
       """
-      self.diag.clear()
-      ircode = self.builder.build(snippet)
-      self.assertFalse(ircode)
-      self.assertEqual(len(self.diag.diags), 1)
-      self.assertEqual(self.diag.diags[0].loc.row, 5)
+      self.expectErrors(snippet, [5])
 
-   def testWhile(self):
+    def testWhile(self):
       snippet = """
       package tstwhile;
       var int a;
@@ -172,12 +178,10 @@
          }
       }
       """
-      ircode = self.builder.build(snippet)
-      if not ircode:
-        self.diag.printErrors(snippet)
-      self.assertTrue(ircode)
-   def testIf(self):
-      snippet = """
+      self.expectOK(snippet)
+
+    def testIf(self):
+        snippet = """
       package tstIFF;
       function void t(int b)
       {
@@ -197,14 +201,11 @@
 
          return b;
       }
-      """
-      ircode = self.builder.build(snippet)
-      if not ircode:
-        self.diag.printErrors(snippet)
-      self.assertTrue(ircode)
+        """
+        self.expectOK(snippet)
    
-   @unittest.skip 
-   def testPointerType(self):
+    @unittest.skip 
+    def testPointerType(self):
         snippet = """
          package testpointer;
          var int* pa;
@@ -213,14 +214,10 @@
             *pa = 22;
          }
         """
-        self.diag.clear()
-        ircode = self.builder.build(snippet)
-        if not ircode:
-            self.diag.printErrors(snippet)
-        self.assertTrue(ircode)
+        self.expectOK(snippet)
 
-   @unittest.skip 
-   def testComplexType(self):
+    @unittest.skip 
+    def testComplexType(self):
         snippet = """
          package testpointer;
          type int my_int;
@@ -248,15 +245,11 @@
             mxp->P1.x = a * x->P1.y;
          }
         """
-        self.diag.clear()
-        ircode = self.builder.build(snippet)
-        if not ircode:
-            self.diag.printErrors(snippet)
-        self.assertTrue(ircode)
+        self.expectOK(snippet)
 
-   def test2(self):
+    def test2(self):
         # testsrc2 is valid code:
-        testsrc2 = """
+        snippet = """
         package test2;
 
         function void tst()
@@ -278,9 +271,7 @@
         }
 
         """
-        self.diag.clear()
-        ir = self.builder.build(testsrc2)
-        self.assertTrue(ir)
+        self.expectOK(snippet)
 
 if __name__ == '__main__':
    unittest.main()