@@ -37,10 +37,6 @@ .return 1
37
37
Assert . IsNotNull ( simple ) ;
38
38
Assert . AreEqual ( 0 , simple . Args . Count ) ;
39
39
40
- var callExpr = tree . block ( ) . stat ( ) [ 1 ] . labelStat ( ) . assignExpr ( ) ;
41
- var blockResult = Visitor . Visit ( callExpr ) ;
42
- Assert . IsNotNull ( blockResult ) ;
43
-
44
40
_ = Visitor . Visit ( tree ) ;
45
41
Assert . IsFalse ( Services . Log . HasErrors ) ;
46
42
var myvar = Services . Symbols . GlobalScope . Resolve ( "myvar" ) as Variable ;
@@ -214,7 +210,7 @@ .namespace mynamespace
214
210
.return mynamespace.myvar *3
215
211
.endfunction
216
212
result := myfunc()" , true ) ;
217
- var tree = parse . source ( ) ;
213
+ _ = parse . source ( ) ;
218
214
Assert . IsTrue ( Services . Log . HasErrors ) ;
219
215
220
216
parse = ParseSource (
@@ -225,7 +221,7 @@ myblock .block
225
221
.return myblock.myvar *3
226
222
.endfunction
227
223
result := myfunc()" , true ) ;
228
- tree = parse . source ( ) ;
224
+ var tree = parse . source ( ) ;
229
225
Assert . IsFalse ( Services . Log . HasErrors ) ;
230
226
_ = Visitor . Visit ( tree ) ;
231
227
Assert . IsFalse ( Services . Log . HasErrors ) ;
@@ -259,5 +255,210 @@ myfunc .function
259
255
Assert . IsTrue ( myvar . Value . IsIntegral ) ;
260
256
Assert . AreEqual ( 6 , myvar . Value . ToInt ( ) ) ;
261
257
}
258
+
259
+ [ TestMethod ]
260
+ public void ArrowSimple ( )
261
+ {
262
+ var parse = ParseSource ( "(el) => 3" , true ) ;
263
+ _ = parse . arrowFunc ( ) ;
264
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
265
+
266
+ parse = ParseSource ( "(el) => 3" , true ) ;
267
+ _ = parse . expr ( ) ;
268
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
269
+ }
270
+
271
+ [ TestMethod ]
272
+ public void ArrowBlock ( )
273
+ {
274
+ var arrowBlockSrc =
275
+ @"(el) => {
276
+ .let doubleEl = el * 2
277
+ .return doubleEl
278
+ }" ;
279
+ var parse = ParseSource ( arrowBlockSrc , true ) ;
280
+ _ = parse . arrowFunc ( ) ;
281
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
282
+
283
+ parse = ParseSource ( arrowBlockSrc , true ) ;
284
+ _ = parse . expr ( ) ;
285
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
286
+
287
+ parse = ParseSource (
288
+ @"pots = map(arr, (num) => {
289
+ .let somebs = 3
290
+ .return num == 3 ? 3 * 3 : 2 ^^ num
291
+ })" , true ) ;
292
+ _ = parse . expr ( ) ;
293
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
294
+ }
295
+
296
+ [ TestMethod ]
297
+ public void Filter ( )
298
+ {
299
+ var parse = ParseSource (
300
+ @" .let arr = [1,2,3,4,5,6]
301
+ .let evens = filter(arr, (el) => el % 2 == 0)" , true ) ;
302
+ var tree = parse . source ( ) ;
303
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
304
+ _ = Visitor . Visit ( tree ) ;
305
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
306
+
307
+ var evens = Services . Symbols . GlobalScope . Resolve ( "evens" ) as Variable ;
308
+ Assert . IsNotNull ( evens ) ;
309
+ Assert . IsNotNull ( evens . Value ) ;
310
+ Assert . IsTrue ( evens . Value . IsDefined ) ;
311
+ Assert . IsInstanceOfType ( evens . Value , typeof ( ArrayValue ) ) ;
312
+
313
+ var evensArray = evens . Value as ArrayValue ;
314
+ Assert . AreEqual ( 3 , evensArray . Count ) ;
315
+ Assert . IsTrue ( evensArray . ElementsNumeric ) ;
316
+ Assert . AreEqual ( 2 , evensArray [ 0 ] . ToInt ( ) ) ;
317
+ Assert . AreEqual ( 4 , evensArray [ 1 ] . ToInt ( ) ) ;
318
+ Assert . AreEqual ( 6 , evensArray [ 2 ] . ToInt ( ) ) ;
319
+
320
+ parse = ParseSource (
321
+ @" .let hello=""HELLO""
322
+ .let no_ls = filter(hello, (chr) => chr != 'L')" , true ) ;
323
+ tree = parse . source ( ) ;
324
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
325
+ _ = Visitor . Visit ( tree ) ;
326
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
327
+
328
+ var no_ls = Services . Symbols . GlobalScope . Resolve ( "no_ls" ) as Variable ;
329
+ Assert . IsNotNull ( no_ls ) ;
330
+ Assert . IsNotNull ( no_ls . Value ) ;
331
+ Assert . IsTrue ( no_ls . Value . IsDefined ) ;
332
+ Assert . IsTrue ( no_ls . Value . IsString ) ;
333
+ Assert . AreEqual ( "HEO" , no_ls . Value . ToString ( true ) ) ;
334
+ }
335
+
336
+ [ TestMethod ]
337
+ public void Concat ( )
338
+ {
339
+ var parse = ParseSource (
340
+ @" .let odds = [1,3,5]
341
+ .let evens = [2,4,6]
342
+ .let all = concat(odds, evens)" , true ) ;
343
+ var tree = parse . source ( ) ;
344
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
345
+ _ = Visitor . Visit ( tree ) ;
346
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
347
+
348
+ var all = Services . Symbols . GlobalScope . Resolve ( "all" ) as Variable ;
349
+ Assert . IsNotNull ( all ) ;
350
+ Assert . IsNotNull ( all . Value ) ;
351
+ Assert . IsTrue ( all . Value . IsDefined ) ;
352
+ Assert . IsInstanceOfType ( all . Value , typeof ( ArrayValue ) ) ;
353
+
354
+ var allArr = all . Value as ArrayValue ;
355
+ Assert . AreEqual ( 6 , allArr . Count ) ;
356
+ Assert . IsTrue ( allArr . ElementsNumeric ) ;
357
+ Assert . AreEqual ( 1 , allArr [ 0 ] . ToInt ( ) ) ;
358
+ Assert . AreEqual ( 2 , allArr [ 3 ] . ToInt ( ) ) ;
359
+ }
360
+
361
+ [ TestMethod ]
362
+ public void Map ( )
363
+ {
364
+ var parse = ParseSource (
365
+ @" .let arr = [1,2,3]
366
+ .let doubled = map(arr, (el) => el * 2)" , true ) ;
367
+ var tree = parse . source ( ) ;
368
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
369
+ _ = Visitor . Visit ( tree ) ;
370
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
371
+
372
+ var doubled = Services . Symbols . GlobalScope . Resolve ( "doubled" ) as Variable ;
373
+ Assert . IsNotNull ( doubled ) ;
374
+ Assert . IsNotNull ( doubled . Value ) ;
375
+ Assert . IsTrue ( doubled . Value . IsDefined ) ;
376
+ Assert . IsInstanceOfType ( doubled . Value , typeof ( ArrayValue ) ) ;
377
+
378
+ var doubledArray = doubled . Value as ArrayValue ;
379
+ Assert . AreEqual ( 3 , doubledArray . Count ) ;
380
+ Assert . IsTrue ( doubledArray . ElementsNumeric ) ;
381
+ Assert . AreEqual ( 2 , doubledArray [ 0 ] . ToInt ( ) ) ;
382
+ Assert . AreEqual ( 4 , doubledArray [ 1 ] . ToInt ( ) ) ;
383
+ Assert . AreEqual ( 6 , doubledArray [ 2 ] . ToInt ( ) ) ;
384
+
385
+ parse = ParseSource (
386
+ @" .let arr = [1,2,3,4]
387
+ .let pots = map(arr, (num) => {
388
+ .if num == 3
389
+ .return 3 * 3
390
+ .endif
391
+ .return 2 ^^ num
392
+ })
393
+ " , true ) ;
394
+ tree = parse . source ( ) ;
395
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
396
+ _ = Visitor . Visit ( tree ) ;
397
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
398
+
399
+ var pots = Services . Symbols . GlobalScope . Resolve ( "pots" ) as Variable ;
400
+ Assert . IsNotNull ( pots ) ;
401
+ Assert . IsNotNull ( pots . Value ) ;
402
+ Assert . IsTrue ( pots . Value . IsDefined ) ;
403
+ Assert . IsInstanceOfType ( pots . Value , typeof ( ArrayValue ) ) ;
404
+
405
+ var potsArray = pots . Value as ArrayValue ;
406
+ Assert . AreEqual ( 4 , potsArray . Count ) ;
407
+ Assert . IsTrue ( potsArray . ElementsNumeric ) ;
408
+ Assert . AreEqual ( 2 , potsArray [ 0 ] . ToInt ( ) ) ;
409
+ Assert . AreEqual ( 4 , potsArray [ 1 ] . ToInt ( ) ) ;
410
+ Assert . AreEqual ( 9 , potsArray [ 2 ] . ToInt ( ) ) ;
411
+ Assert . AreEqual ( 16 , potsArray [ 3 ] . ToInt ( ) ) ;
412
+ }
413
+
414
+ [ TestMethod ]
415
+ public void Reduce ( )
416
+ {
417
+ var parse = ParseSource (
418
+ @" .let arr = [1,2,3,4]
419
+ .let sum = reduce(arr, (num1, num2) => num1 + num2)" , true ) ;
420
+ var tree = parse . source ( ) ;
421
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
422
+
423
+ _ = Visitor . Visit ( tree ) ;
424
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
425
+
426
+ var sum = Services . Symbols . GlobalScope . Resolve ( "sum" ) as Variable ;
427
+ Assert . IsNotNull ( sum ) ;
428
+ Assert . IsNotNull ( sum . Value ) ;
429
+ Assert . IsTrue ( sum . Value . IsDefined ) ;
430
+ Assert . IsTrue ( sum . Value . IsNumeric ) ;
431
+ Assert . AreEqual ( 1 + 2 + 3 + 4 , sum . Value . ToInt ( ) ) ;
432
+
433
+ }
434
+
435
+
436
+ [ TestMethod ]
437
+ public void Sort ( )
438
+ {
439
+ var parse = ParseSource (
440
+ @" .let arr = [8,1,7,4]
441
+ .let sorted = sort(arr)" , true ) ;
442
+ var tree = parse . source ( ) ;
443
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
444
+
445
+ _ = Visitor . Visit ( tree ) ;
446
+ Assert . IsFalse ( Services . Log . HasErrors ) ;
447
+
448
+ var sorted = Services . Symbols . GlobalScope . Resolve ( "sorted" ) as Variable ;
449
+ Assert . IsNotNull ( sorted ) ;
450
+ Assert . IsNotNull ( sorted . Value ) ;
451
+ Assert . IsTrue ( sorted . Value . IsDefined ) ;
452
+ Assert . IsInstanceOfType ( sorted . Value , typeof ( ArrayValue ) ) ;
453
+
454
+ var sortedArray = sorted . Value as ArrayValue ;
455
+ Assert . AreEqual ( 4 , sortedArray . Count ) ;
456
+ Assert . IsTrue ( sortedArray . ElementsNumeric ) ;
457
+ Assert . AreEqual ( 1 , sortedArray [ 0 ] . ToInt ( ) ) ;
458
+ Assert . AreEqual ( 4 , sortedArray [ 1 ] . ToInt ( ) ) ;
459
+ Assert . AreEqual ( 7 , sortedArray [ 2 ] . ToInt ( ) ) ;
460
+ Assert . AreEqual ( 8 , sortedArray [ 3 ] . ToInt ( ) ) ;
461
+
462
+ }
262
463
}
263
464
}
0 commit comments