-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathECUnitTester.java
More file actions
169 lines (155 loc) · 10.1 KB
/
Copy pathECUnitTester.java
File metadata and controls
169 lines (155 loc) · 10.1 KB
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package cmsc141.mp1.ec;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class ECUnitTester {
@Test
public void test() {
boolean isTest = true;
ECSyntaxChecker ecParser = new ECSyntaxChecker(isTest);
// strings should match (syntactically correct) -- true
// Assignments
assertTrue(ecParser.hasMatch("main do @var = 1 end"));
assertTrue(ecParser.hasMatch("main do @var = '1' end"));
assertTrue(ecParser.hasMatch("main do @var = 'a' end"));
assertTrue(ecParser.hasMatch("main do @var = '123' end"));
assertTrue(ecParser.hasMatch("main do @var = 'abc' end"));
assertTrue(ecParser.hasMatch("main do @var = 'a1b2c3' end"));
// Assignments with Operations
assertTrue(ecParser.hasMatch("main do 1 + 1 end"));
assertTrue(ecParser.hasMatch("main do 1 - 1 end"));
assertTrue(ecParser.hasMatch("main do 1 * 1 end"));
assertTrue(ecParser.hasMatch("main do 1 / 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 1 + 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 1 - 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 1 * 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 1 / 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 2 @res = @var + 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 2 @res = @var - 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 2 @res = @var * 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 2 @res = @var / 1 end"));
// Selection statements
assertTrue(ecParser.hasMatch("main do if 1 == 1 do end end"));
assertTrue(ecParser.hasMatch("main do if 1 != 1 do @var = 1 end end"));
assertTrue(ecParser.hasMatch("main do if 1 <= 1 do @var = '1' end end"));
assertTrue(ecParser.hasMatch("main do if 1 < 1 do @var = 'a' end end"));
assertTrue(ecParser.hasMatch("main do if 1 >= 1 do @var = 'abc' end end"));
assertTrue(ecParser.hasMatch("main do if 1 > 1 do @var = 'abc123' end end"));
assertTrue(ecParser.hasMatch("main do if 1 == 1 do end end"));
assertTrue(ecParser.hasMatch("main do @var = 'a' if @var == 'a' do end end"));
assertTrue(ecParser.hasMatch("main do @var = 'a' if @var == 'a' do else do end end"));
assertTrue(ecParser.hasMatch("main do @var = 'a' if @var == 'a' do "
+ "else if @var <= 'b' do end end"));
assertTrue(ecParser.hasMatch("main do @var = 'a' if @var == 'a' do "
+ "else if @var <= 'b' do else do end end"));
assertTrue(ecParser.hasMatch("main do @var = 'a' if @var == 'a' do "
+ "else if @var <= 'b' do @var = 'c' end end"));
// IO
assertTrue(ecParser.hasMatch("main do scan @var end"));
assertTrue(ecParser.hasMatch("main do scan @var print @var end"));
assertTrue(ecParser.hasMatch("main do @var = 1 print @var end"));
assertTrue(ecParser.hasMatch("main do @var = 1 print @var + 'hello' end"));
assertTrue(ecParser.hasMatch("main do @var = 1 @var2 = 'a' "
+ "print @var + @var2 + 'b' end"));
assertTrue(ecParser.hasMatch("main do @var = 1 @var2 = 'a' "
+ "print @var + @var2 + '2' end"));
assertTrue(ecParser.hasMatch("main do scan @var print 'Hello' + @var end"));
assertTrue(ecParser.hasMatch("main do puts 'Hello' end"));
assertTrue(ecParser.hasMatch("main do scan @var puts @var end"));
assertTrue(ecParser.hasMatch("main do @var = 1 puts @var end"));
assertTrue(ecParser.hasMatch("main do @var = 1 puts @var + 'hello' end"));
assertTrue(ecParser.hasMatch("main do @var = 1 @var2 = 'a' "
+ "puts @var + @var2 + 'b' end"));
assertTrue(ecParser.hasMatch("main do @var = 1 @var2 = 'a' "
+ "puts @var + @var2 + '2' end"));
assertTrue(ecParser.hasMatch("main do scan @var puts 'Hello' + @var end"));
// Comment
assertTrue(ecParser.hasMatch("main do /* This is a comment */ end"));
assertTrue(ecParser.hasMatch("main do /* This is a comment */ print 'Hello' end"));
assertTrue(ecParser.hasMatch("main do for @var = 1 ; @var < 3 ; @var = @var + 1 do "
+ "/* This is a comment */ print 'Hello' end end"));
assertTrue(ecParser.hasMatch("main do @var = 1 while @var < 3 do "
+ "/* This is a comment */ print 'Hello' end end"));
assertTrue(ecParser.hasMatch("main do @var = 1 do /* This is a comment */ "
+ "print 'Hello' while @var < 3 end end"));
assertTrue(ecParser.hasMatch("main do @var = 1 if @var == 1 do /* This is a comment */ print 'Hello' end end"));
assertTrue(ecParser.hasMatch("main do @var = 1 if @var == 1 do /* This is a comment */ "
+ "print 'Hello' else /* This is a comment too */ end /* Comment again... */ end"));
assertTrue(ecParser.hasMatch("main do @var = 1 if @var == 1 do /* This is a comment */ "
+ "print 'Hello' else if @var <= 1 do /* Am a comment */ print 'Hi' "
+ "else /* This is a comment too */ end /* Comment again... */ end"));
// Iterative statements
assertTrue(ecParser.hasMatch("main do for @var = 1 ; @var < 3 ; @var = @var + 1 do "
+ "print 'Hello' end end"));
assertTrue(ecParser.hasMatch("main do for @var = 1 ; @var < 3 ; @var = @var + 1 do "
+ "print 'Hello' @var = @var + 2 end end"));
assertTrue(ecParser.hasMatch("main do @var = 1 while @var < 3 do print 'Hello' "
+ "@var = @var + 1 end end"));
assertTrue(ecParser.hasMatch("main do @var = 0 do print 'Hello' @var = @var + 1 "
+ "while @var < 3 end end"));
// Combinations of all syntax features
assertTrue(ecParser.hasMatch("main do @var = 2 end"));
assertTrue(ecParser.hasMatch("main do @var = 2 + 1 end"));
assertTrue(ecParser.hasMatch("main do @var = 2 + 12 end"));
assertTrue(ecParser.hasMatch("main do @var = @vAr23a end"));
assertTrue(ecParser.hasMatch("main do @var = @ve2 - @vA end"));
assertTrue(ecParser.hasMatch("main do @var = @vAr / @ht end"));
assertTrue(ecParser.hasMatch("main do @var = @vA * @gf \n@br = 1 + @vd end"));
assertTrue(ecParser.hasMatch("main do @var = @vA * @gf 1 + @vd end"));
assertTrue(ecParser.hasMatch("main do if @a and @b do @var = @vA * @gf 1 + @vd end end"));
assertTrue(ecParser.hasMatch("main do /* 482aha7343 /n jsdhf */ end"));
assertTrue(ecParser.hasMatch("main do print 'HELL' end"));
assertTrue(ecParser.hasMatch("main do print @var end"));
assertTrue(ecParser.hasMatch("main do print @var + 'is yeah.' + @var1 end"));
assertTrue(ecParser.hasMatch("main do puts 'HELL' end"));
assertTrue(ecParser.hasMatch("main do puts @var end"));
assertTrue(ecParser.hasMatch("main do puts @var + 'is yeah.' + @var1 end"));
assertTrue(ecParser.hasMatch("main do scan @var end"));
assertTrue(ecParser.hasMatch("main do for @var = 1 ; @var < 1 ; @var + 1 do end end"));
assertTrue(ecParser.hasMatch("main do while @var == 1 do @var + 1 end end"));
assertTrue(ecParser.hasMatch("main do while @var == 1 do @var / 1 @var + 1 end end"));
assertTrue(ecParser.hasMatch("main do do @var * 1 @var + 1 while @var == 1 end end"));
assertTrue(ecParser.hasMatch("main do if @a <= @b do end end"));
assertTrue(ecParser.hasMatch("main do if '@a' <= '@b' do end end"));
assertTrue(ecParser.hasMatch("main do if -12.3 <= 40.1 do end end"));
assertTrue(ecParser.hasMatch("main do if not -12.3 <= 40.1 do end @d * 23 end"));
assertTrue(ecParser.hasMatch("main do if not @d != '40.1' do end end"));
assertTrue(ecParser.hasMatch("main do if not '12.3' and 40.1 do @a + 1 end end"));
assertTrue(ecParser.hasMatch("main do if not @ds and 40.1 do @we = '12' end 1 + 2 end"));
assertTrue(ecParser.hasMatch("main do if not '2' >= 40.1 do @g = 1 + @b @ge = 23 end @s2 + @f end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b @ge = 23 end @a = 2 end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 @a = 2 end @a = 2 end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 end @a = 2 end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 else do 12 + 3 end @a = 2 end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 else do 12 + 3 @d = 12 + 2 end @a = 2 end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 else do 12 + 3 @d = 12 + 2 end @a = 2 23 / 2 end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 else do 12 + 3 @d = 12 + 2 end @a = 2 23 / 2 "
+ "/* this is a comment */ end"));
assertTrue(ecParser.hasMatch("main do if not 12 < @fd do /* awre2r;|@e */ @g = 1 + @b else if @d != @b do @ge = 23 else do /* d2bgs */ 12 + 3 @d = 12 + 2 end @a = 2 23 / 2 "
+ "/* this is a comment */ end"));
assertTrue(ecParser.hasMatch("main do do @var * 1 @var + 1 /* Hi po */ while @var == 1 end end"));
assertTrue(ecParser.hasMatch("main do do @var * 1 @var + 1 /* Hi po */ while @var == 1 end end"));
// assertTrue(ecParser.hasMatch("main do do @var * 1 @var + 1 /* Hi po */ "
// + "if @a < @b do 1 + 1 end while @var == 1 end end"));
// assertTrue(ecParser.hasMatch("main do if @a >= @b do for @c = 0; @c < 10; do "
// + "1 + 1 end end end"));
assertTrue(ecParser.hasMatch("main do if @a < @b do print 'Hello po!' end end"));
assertTrue(ecParser.hasMatch("main do"
+ " puts 'Addition program'"
+ " print 'Enter num1 = '"
+ " scan @num1"
+ " print 'Enter num2 = '"
+ " scan @num2"
+ " @sum = @num1 + @num2"
+ " puts 'Sum is ' + @sum "
+ "end"));
// strings should not match (syntactically incorrect) -- false
assertFalse(ecParser.hasMatch("main d o @var = 2 end")); // must be do
assertFalse(ecParser.hasMatch("main do @var = 1 + 'as' end")); // strings are not allowed for arithmetic operations
assertFalse(ecParser.hasMatch("main /* as */ do if not 12 < @fd do @g = 1 + @b else if @d != @b do @ge = 23 else do 12 + 3 @d = 12 + 2 end @a = 2 23 / 2 "
+ "/* this is a comment */end")); // there should be atleast 1 space before end after comment /* */
assertFalse(ecParser.hasMatch("main do /* sd * / end")); // closing commenet tag should be */
assertFalse(ecParser.hasMatch(" main do /* sd * / end")); // no spaces before main
assertFalse(ecParser.hasMatch("main do /* sd * / end ")); // no spaces after end of program code or token end of main
}
}