@@ -185,4 +185,113 @@ def test_data_processing(self, interpreter, parser, capture_output):
185
185
interpreter .execute (ast )
186
186
187
187
assert 4 == interpreter .state ['result' ][0 ]
188
- assert 5 == interpreter .state ['result' ][1 ]
188
+ assert 5 == interpreter .state ['result' ][1 ]
189
+
190
+ class TestExpressionEvaluation :
191
+ def test_nested_unary_operations (self , interpreter , parser , capture_output ):
192
+ """Test handling of nested unary minus operations."""
193
+ code = '''
194
+ objective "Test nested unary operations"
195
+ task "UnaryOps":
196
+ step "Calculate":
197
+ double_neg = - -42
198
+ triple_neg = - - -17
199
+ mixed = - -3.14
200
+ print(double_neg)
201
+ print(triple_neg)
202
+ print(mixed)
203
+ run "UnaryOps"'''
204
+
205
+ ast = parser .parse (code )
206
+ interpreter .execute (ast )
207
+
208
+ assert interpreter .state ['double_neg' ] == 42
209
+ assert interpreter .state ['triple_neg' ] == - 17
210
+ assert pytest .approx (interpreter .state ['mixed' ]) == 3.14
211
+
212
+ def test_complex_nested_expressions (self , interpreter , parser , capture_output ):
213
+ """Test evaluation of complex nested expressions."""
214
+ code = '''
215
+ objective "Test complex expressions"
216
+ task "ComplexExpr":
217
+ step "Calculate":
218
+ a = 5
219
+ b = 3
220
+ c = 8
221
+ d = 2
222
+ nested1 = (a + b) * (c - d)
223
+ nested2 = ((a * b) + c) / (d + 1)
224
+ print(nested1)
225
+ print(nested2)
226
+ run "ComplexExpr"'''
227
+
228
+ ast = parser .parse (code )
229
+ interpreter .execute (ast )
230
+
231
+ # (5 + 3) * (8 - 2) = 8 * 6 = 48
232
+ assert interpreter .state ['nested1' ] == 48
233
+ # ((5 * 3) + 8) / (2 + 1) = (15 + 8) / 3 = 23/3
234
+ assert pytest .approx (interpreter .state ['nested2' ]) == 7.666666666666667
235
+
236
+ def test_parenthesized_expressions (self , interpreter , parser , capture_output ):
237
+ """Test evaluation of expressions with explicit parentheses."""
238
+ code = '''
239
+ objective "Test parenthesized expressions"
240
+ task "ParenExpr":
241
+ step "Calculate":
242
+ simple = 2 * (3 + 4)
243
+ complex = (1 + 2) * (3 - 4) / (5 + 6)
244
+ nested = (((1 + 2) * 3) - 4)
245
+ print(simple)
246
+ print(complex)
247
+ print(nested)
248
+ run "ParenExpr"'''
249
+
250
+ ast = parser .parse (code )
251
+ interpreter .execute (ast )
252
+
253
+ # 2 * (3 + 4) = 2 * 7 = 14
254
+ assert interpreter .state ['simple' ] == 14
255
+ # (1 + 2) * (3 - 4) / (5 + 6) = 3 * (-1) / 11 ≈ -0.2727
256
+ assert pytest .approx (interpreter .state ['complex' ]) == - 0.2727272727272727
257
+ # (((1 + 2) * 3) - 4) = ((3 * 3) - 4) = (9 - 4) = 5
258
+ assert interpreter .state ['nested' ] == 5
259
+
260
+ def test_operator_precedence (self , interpreter , parser , capture_output ):
261
+ """Test proper handling of operator precedence."""
262
+ code = '''
263
+ objective "Test operator precedence"
264
+ task "Precedence":
265
+ step "Calculate":
266
+ mul_add = 2 + 3 * 4
267
+ div_add = 10 + 15 / 3
268
+ mixed = 2 * 3 + 4 * 5 / 2 - 1
269
+ print(mul_add)
270
+ print(div_add)
271
+ print(mixed)
272
+ run "Precedence"'''
273
+
274
+ ast = parser .parse (code )
275
+ interpreter .execute (ast )
276
+
277
+ # 2 + 3 * 4 = 2 + 12 = 14 (not 20)
278
+ assert interpreter .state ['mul_add' ] == 14
279
+ # 10 + 15 / 3 = 10 + 5 = 15 (not 8.33...)
280
+ assert interpreter .state ['div_add' ] == 15
281
+ # 2 * 3 + 4 * 5 / 2 - 1 = 6 + 20/2 - 1 = 6 + 10 - 1 = 15
282
+ assert interpreter .state ['mixed' ] == 15
283
+
284
+ def test_basic_parentheses (self , interpreter , parser , capture_output ):
285
+ """Test basic parenthesized expression."""
286
+ code = '''
287
+ objective "Test basic parentheses"
288
+ task "ParenExpr":
289
+ step "Calculate":
290
+ result = 2 * (3 + 4)
291
+ print(result)
292
+ run "ParenExpr"'''
293
+
294
+ ast = parser .parse (code )
295
+ interpreter .execute (ast )
296
+
297
+ assert interpreter .state ['result' ] == 14
0 commit comments