Mercurial > lcfOS
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()