aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/cython/Cython/Compiler/Tests/TestTreeFragment.py
blob: 5256ed93d758432a9d59450cd65bc39a5f7ccd63 (plain) (blame)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from Cython.TestUtils import CythonTest 
from Cython.Compiler.TreeFragment import * 
from Cython.Compiler.Nodes import * 
from Cython.Compiler.UtilNodes import * 
import Cython.Compiler.Naming as Naming 
 
class TestTreeFragments(CythonTest): 
 
    def test_basic(self): 
        F = self.fragment(u"x = 4") 
        T = F.copy() 
        self.assertCode(u"x = 4", T) 
 
    def test_copy_is_taken(self): 
        F = self.fragment(u"if True: x = 4") 
        T1 = F.root 
        T2 = F.copy() 
        self.assertEqual("x", T2.stats[0].if_clauses[0].body.lhs.name) 
        T2.stats[0].if_clauses[0].body.lhs.name = "other" 
        self.assertEqual("x", T1.stats[0].if_clauses[0].body.lhs.name) 
 
    def test_substitutions_are_copied(self): 
        T = self.fragment(u"y + y").substitute({"y": NameNode(pos=None, name="x")}) 
        self.assertEqual("x", T.stats[0].expr.operand1.name) 
        self.assertEqual("x", T.stats[0].expr.operand2.name) 
        self.assertTrue(T.stats[0].expr.operand1 is not T.stats[0].expr.operand2)
 
    def test_substitution(self): 
        F = self.fragment(u"x = 4") 
        y = NameNode(pos=None, name=u"y") 
        T = F.substitute({"x" : y}) 
        self.assertCode(u"y = 4", T) 
 
    def test_exprstat(self): 
        F = self.fragment(u"PASS") 
        pass_stat = PassStatNode(pos=None) 
        T = F.substitute({"PASS" : pass_stat}) 
        self.assertTrue(isinstance(T.stats[0], PassStatNode), T)
 
    def test_pos_is_transferred(self): 
        F = self.fragment(u""" 
        x = y 
        x = u * v ** w 
        """) 
        T = F.substitute({"v" : NameNode(pos=None, name="a")}) 
        v = F.root.stats[1].rhs.operand2.operand1 
        a = T.stats[1].rhs.operand2.operand1 
        self.assertEqual(v.pos, a.pos)
 
    def test_temps(self): 
        TemplateTransform.temp_name_counter = 0 
        F = self.fragment(u""" 
            TMP 
            x = TMP 
        """) 
        T = F.substitute(temps=[u"TMP"]) 
        s = T.body.stats 
        self.assertTrue(isinstance(s[0].expr, TempRefNode))
        self.assertTrue(isinstance(s[1].rhs, TempRefNode))
        self.assertTrue(s[0].expr.handle is s[1].rhs.handle)
 
if __name__ == "__main__": 
    import unittest 
    unittest.main()