summaryrefslogtreecommitdiff
path: root/src/test/java/com/seaofnodes/simple/Chapter04Test.java
blob: 9f1535b36cd82881237d190cd0c6748011281d3e (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package com.seaofnodes.simple;

import com.seaofnodes.simple.node.*;
import com.seaofnodes.simple.type.TypeInteger;
import org.junit.Test;

import static org.junit.Assert.*;

public class Chapter04Test {

    @Test
    public void testPeephole() {
        Parser parser = new Parser("return 1+arg+2; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return (arg+3);", ret.print());
    }

    @Test
    public void testPeephole2() {
        Parser parser = new Parser("return (1+arg)+2;");
        ReturnNode ret = parser.parse();
        assertEquals("return (arg+3);", ret.print());
    }

    @Test
    public void testAdd0() {
        Parser parser = new Parser("return 0+arg;");
        ReturnNode ret = parser.parse();
        assertEquals("return arg;", ret.print());
    }

    @Test
    public void testAddAddMul() {
        Parser parser = new Parser("return arg+0+arg;");
        ReturnNode ret = parser.parse();
        assertEquals("return (arg*2);", ret.print());
    }

    @Test
    public void testPeephole3() {
        Parser parser = new Parser("return 1+arg+2+arg+3; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return ((arg*2)+6);", ret.print());
    }

    @Test
    public void testMul1() {
        Parser parser = new Parser("return 1*arg;");
        ReturnNode ret = parser.parse();
        assertEquals("return arg;", ret.print());
    }

    @Test
    public void testVarArg() {
        Parser parser = new Parser("return arg; #showGraph;", TypeInteger.BOT);
        ReturnNode ret = parser.parse();
        assertTrue(ret.in(0) instanceof ProjNode);
        assertTrue(ret.in(1) instanceof ProjNode);
    }

    @Test
    public void testConstantArg() {
        Parser parser = new Parser("return arg; #showGraph;", TypeInteger.constant(2));
        ReturnNode ret = parser.parse();
        assertEquals("return 2;", ret.print());
    }

    @Test
    public void testCompEq() {
        Parser parser = new Parser("return 3==3; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return 1;", ret.print());
    }

    @Test
    public void testCompEq2() {
        Parser parser = new Parser("return 3==4; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return 0;", ret.print());
    }

    @Test
    public void testCompNEq() {
        Parser parser = new Parser("return 3!=3; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return 0;", ret.print());
    }

    @Test
    public void testCompNEq2() {
        Parser parser = new Parser("return 3!=4; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return 1;", ret.print());
    }

    @Test
    public void testBug1() {
        Parser parser = new Parser("int a=arg+1; int b=a; b=1; return a+2; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return (arg+3);", ret.print());
    }

    @Test
    public void testBug2() {
        Parser parser = new Parser("int a=arg+1; a=a; return a; #showGraph;");
        ReturnNode ret = parser.parse();
        assertEquals("return (arg+1);", ret.print());
    }

    @Test
    public void testBug3() {
        try {
            new Parser("inta=1; return a;").parse();
            fail();
        } catch( RuntimeException e ) {
            assertEquals("Undefined name 'inta'",e.getMessage());
        }
    }

    @Test
    public void testBug4() {
        Parser parser = new Parser("return -arg;");
        ReturnNode ret = parser.parse();
        assertEquals("return (-arg);", ret.print());
    }

}