| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | data/unit-testing/field_access.fate | 10 | ||||
| -rw-r--r-- | data/unit-testing/filter.fate | 292 | ||||
| -rw-r--r-- | data/unit-testing/fold.fate | 64 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/lang/instruction/IndexedFilter.java | 1 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 36 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java | 10 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java | 9 | 
7 files changed, 403 insertions, 19 deletions
| diff --git a/data/unit-testing/field_access.fate b/data/unit-testing/field_access.fate index eba657a..4f977f8 100644 --- a/data/unit-testing/field_access.fate +++ b/data/unit-testing/field_access.fate @@ -85,6 +85,16 @@     ts0_1.i = (var ts0_1.i)  ) +(assert +   (= +      (field ts0_1 i) +      (get_field (set_fields ts1_0 (i 420)) i) +      (get_field (field (field ts2_0 ts1) ts0) i) +      420 +   ) +   [FAILED] (var test_name) Test 2. +) +  [COMPLETED] (var test_name)  (end) diff --git a/data/unit-testing/filter.fate b/data/unit-testing/filter.fate new file mode 100644 index 0000000..d71b057 --- /dev/null +++ b/data/unit-testing/filter.fate @@ -0,0 +1,292 @@ +(fate_version 1) + +(global string test_name) + +(set test_name ( FILTER )) + +(global (list int) 0to10) +(global (list int) 0to10odd) +(global (list int) 0to10even) + +(set 0to10 (range 0 10 1)) + +(set 0to10odd +   (filter +      (lambda ((int i) (int two) (int one)) (= (mod i two) (var one))) +      0to10 +      2 +      1 +   ) +) + +(local (lambda bool (int)) filter_fun) + +(set filter_fun (lambda ((int i)) (= (mod i 2) 0))) +(set 0to10even +   (filter filter_fun 0to10) +) + +(assert +   (= 0 (var 0to10even.0)) +   [FAILED] (var test_name) Failed 0to10even.0: (var 0to10even.0). +) + +(assert +   (= 1 (var 0to10odd.0)) +   [FAILED] (var test_name) Failed 0to10odd.0: (var 0to10odd.0). +) + +(assert +   (= 2 (var 0to10even.1)) +   [FAILED] (var test_name) Failed 0to10even.1: (var 0to10even.1). +) + +(assert +   (= 3 (var 0to10odd.1)) +   [FAILED] (var test_name) Failed 0to10odd.1: (var 0to10odd.1). +) + +(assert +   (= 4 (var 0to10even.2)) +   [FAILED] (var test_name) Failed 0to10even.2: (var 0to10even.2). +) + +(assert +   (= 5 (var 0to10odd.2)) +   [FAILED] (var test_name) Failed 0to10odd.2: (var 0to10odd.2). +) + +(assert +   (= 6 (var 0to10even.3)) +   [FAILED] (var test_name) Failed 0to10even.3: (var 0to10even.3). +) + +(assert +   (= 7 (var 0to10odd.3)) +   [FAILED] (var test_name) Failed 0to10odd.3: (var 0to10odd.3). +) + +(assert +   (= 8 (var 0to10even.4)) +   [FAILED] (var test_name) Failed 0to10even.4: (var 0to10even.4). +) + +(assert +   (= 9 (var 0to10odd.4)) +   [FAILED] (var test_name) Failed 0to10odd.4: (var 0to10odd.4). +) + +(assert +   (= 10 (var 0to10even.5)) +   [FAILED] (var test_name) Failed 0to10even.5: (var 0to10even.5). +) + +(global (list int) 0to10odd2) +(global (list int) 0to10even2) + +(set 0to10odd2 (var 0to10)) +(set 0to10even2 (var 0to10)) + +(filter! +   (lambda ((int i) (int two) (int one)) (= (mod i two) (var one))) +   0to10odd2 +   2 +   1 +) + +(filter! filter_fun 0to10even2) + +(assert +   (= 0 (var 0to10even2.0)) +   [FAILED] (var test_name) Failed 0to10even2.0: (var 0to10even2.0). +) + +(assert +   (= 1 (var 0to10odd2.0)) +   [FAILED] (var test_name) Failed 0to10odd2.0: (var 0to10odd2.0). +) + +(assert +   (= 2 (var 0to10even2.1)) +   [FAILED] (var test_name) Failed 0to10even2.1: (var 0to10even2.1). +) + +(assert +   (= 3 (var 0to10odd2.1)) +   [FAILED] (var test_name) Failed 0to10odd2.1: (var 0to10odd2.1). +) + +(assert +   (= 4 (var 0to10even2.2)) +   [FAILED] (var test_name) Failed 0to10even2.2: (var 0to10even2.2). +) + +(assert +   (= 5 (var 0to10odd2.2)) +   [FAILED] (var test_name) Failed 0to10odd2.2: (var 0to10odd2.2). +) + +(assert +   (= 6 (var 0to10even2.3)) +   [FAILED] (var test_name) Failed 0to10even2.3: (var 0to10even2.3). +) + +(assert +   (= 7 (var 0to10odd2.3)) +   [FAILED] (var test_name) Failed 0to10odd2.3: (var 0to10odd2.3). +) + +(assert +   (= 8 (var 0to10even2.4)) +   [FAILED] (var test_name) Failed 0to10even2.4: (var 0to10even2.4). +) + +(assert +   (= 9 (var 0to10odd2.4)) +   [FAILED] (var test_name) Failed 0to10odd2.4: (var 0to10odd2.4). +) + +(assert +   (= 10 (var 0to10even2.5)) +   [FAILED] (var test_name) Failed 0to10even2.5: (var 0to10even2.5). +) + +(set 0to10odd +   (indexed_filter +      (lambda ((int ix) (int i) (int two) (int one)) (= (mod i two) (var one))) +      0to10 +      2 +      1 +   ) +) + +(local (lambda bool (int int)) indexed_filter_fun) + +(set indexed_filter_fun (lambda ((int ix) (int i)) (= (mod i 2) 0))) +(set 0to10even (indexed_filter indexed_filter_fun 0to10)) + +(assert +   (= 0 (var 0to10even.0)) +   [FAILED] (var test_name) Failed indexed 0to10even.0: (var 0to10even.0). +) + +(assert +   (= 1 (var 0to10odd.0)) +   [FAILED] (var test_name) Failed indexed 0to10odd.0: (var 0to10odd.0). +) + +(assert +   (= 2 (var 0to10even.1)) +   [FAILED] (var test_name) Failed indexed 0to10even.1: (var 0to10even.1). +) + +(assert +   (= 3 (var 0to10odd.1)) +   [FAILED] (var test_name) Failed indexed 0to10odd.1: (var 0to10odd.1). +) + +(assert +   (= 4 (var 0to10even.2)) +   [FAILED] (var test_name) Failed indexed 0to10even.2: (var 0to10even.2). +) + +(assert +   (= 5 (var 0to10odd.2)) +   [FAILED] (var test_name) Failed indexed 0to10odd.2: (var 0to10odd.2). +) + +(assert +   (= 6 (var 0to10even.3)) +   [FAILED] (var test_name) Failed indexed 0to10even.3: (var 0to10even.3). +) + +(assert +   (= 7 (var 0to10odd.3)) +   [FAILED] (var test_name) Failed indexed 0to10odd.3: (var 0to10odd.3). +) + +(assert +   (= 8 (var 0to10even.4)) +   [FAILED] (var test_name) Failed indexed 0to10even.4: (var 0to10even.4). +) + +(assert +   (= 9 (var 0to10odd.4)) +   [FAILED] (var test_name) Failed indexed 0to10odd.4: (var 0to10odd.4). +) + +(assert +   (= 10 (var 0to10even.5)) +   [FAILED] (var test_name) Failed indexed 0to10even.5: (var 0to10even.5). +) + +(set 0to10odd2 (var 0to10)) +(set 0to10even2 (var 0to10)) + +(indexed_filter! +   (lambda ((int ix) (int i) (int two) (int one)) (= (mod i two) (var one))) +   0to10odd2 +   2 +   1 +) + +(indexed_filter! indexed_filter_fun 0to10even2) + +(assert +   (= 0 (var 0to10even2.0)) +   [FAILED] (var test_name) Failed indexed 0to10even2.0: (var 0to10even2.0). +) + +(assert +   (= 1 (var 0to10odd2.0)) +   [FAILED] (var test_name) Failed indexed 0to10odd2.0: (var 0to10odd2.0). +) + +(assert +   (= 2 (var 0to10even2.1)) +   [FAILED] (var test_name) Failed indexed 0to10even2.1: (var 0to10even2.1). +) + +(assert +   (= 3 (var 0to10odd2.1)) +   [FAILED] (var test_name) Failed indexed 0to10odd2.1: (var 0to10odd2.1). +) + +(assert +   (= 4 (var 0to10even2.2)) +   [FAILED] (var test_name) Failed indexed 0to10even2.2: (var 0to10even2.2). +) + +(assert +   (= 5 (var 0to10odd2.2)) +   [FAILED] (var test_name) Failed indexed 0to10odd2.2: (var 0to10odd2.2). +) + +(assert +   (= 6 (var 0to10even2.3)) +   [FAILED] (var test_name) Failed indexed 0to10even2.3: (var 0to10even2.3). +) + +(assert +   (= 7 (var 0to10odd2.3)) +   [FAILED] (var test_name) Failed indexed 0to10odd2.3: (var 0to10odd2.3). +) + +(assert +   (= 8 (var 0to10even2.4)) +   [FAILED] (var test_name) Failed indexed 0to10even2.4: (var 0to10even2.4). +) + +(assert +   (= 9 (var 0to10odd2.4)) +   [FAILED] (var test_name) Failed indexed 0to10odd2.4: (var 0to10odd2.4). +) + +(assert +   (= 10 (var 0to10even2.5)) +   [FAILED] (var test_name) Failed indexed 0to10even2.5: (var 0to10even2.5). +) + +[COMPLETED] (var test_name) + +(end) diff --git a/data/unit-testing/fold.fate b/data/unit-testing/fold.fate new file mode 100644 index 0000000..526cbe4 --- /dev/null +++ b/data/unit-testing/fold.fate @@ -0,0 +1,64 @@ +(fate_version 1) + +(global string test_name) + +(set test_name ( FILTER )) + +(global (list int) 0to10) + +(set 0to10 (range 0 10 1)) + +(assert +   (= 55 +      (foldl +         (lambda ((int res) (int e)) (+ res e)) +         0 +         0to10 +      ) +      (foldr +         (lambda ((int res) (int e)) (+ res e)) +         0 +         0to10 +      ) +   ) +   [FAILED] (var test_name) Failed sum. +   (newline) +   foldl yielded: +   (foldl +      (lambda ((int res) (int e)) (+ res e)) +      0 +      0to10 +   ) +   (newline) +   foldr yielded: +   (foldr +      (lambda ((int res) (int e)) (+ res e)) +      0 +      0to10 +   ) +) + +(global (list string) ls) + +(local int i) +(for (set i 0) (=< i 10) (set i (+ i 1)) +   (add! (cast string (var i)) ls) +) + +foldl: +(foldl +   (lambda ((text res) (string e)) (text (var res) (var e))) +   (default text) +   ls +) +(newline) +foldr: +(foldr +   (lambda ((text res) (string e)) (text (var res) (var e))) +   (default text) +   ls +) + +[COMPLETED] (var test_name) + +(end) diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/IndexedFilter.java b/src/core/src/tonkadur/fate/v1/lang/instruction/IndexedFilter.java index e05b162..6e3da57 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/IndexedFilter.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/IndexedFilter.java @@ -74,6 +74,7 @@ public class IndexedFilter extends Instruction        {           target_signature.add(c.get_type());        } +        RecurrentChecks.assert_lambda_matches_types        (           lambda_function, diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 88601f5..62f5e4b 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -4648,6 +4648,42 @@ returns [Computation result]           );     } +   | INDEXED_FILTER_KW fun=non_text_value WS+ coll=non_text_value WS* R_PAREN +   { +      $result = +         IndexedFilterComputation.build +         ( +            CONTEXT.get_origin_at +            ( +               ($INDEXED_FILTER_KW.getLine()), +               ($INDEXED_FILTER_KW.getCharPositionInLine()) +            ), +            ($fun.result), +            ($coll.result), +            new ArrayList() +         ); +   } + +   | INDEXED_FILTER_KW +         fun=non_text_value WS+ +         coll=non_text_value WS+ +         value_list WS* +      R_PAREN +   { +      $result = +         IndexedFilterComputation.build +         ( +            CONTEXT.get_origin_at +            ( +               ($INDEXED_FILTER_KW.getLine()), +               ($INDEXED_FILTER_KW.getCharPositionInLine()) +            ), +            ($fun.result), +            ($coll.result), +            ($value_list.result) +         ); +   } +     | PARTITION_KW fun=non_text_value WS+ coll=non_text_value WS* R_PAREN     {        $result = diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java index 83c947f..6617688 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java @@ -29,7 +29,6 @@ public class FilterLambda     /* Utility Class */     private FilterLambda () {} -   /* Uses Durstenfeld's shuffling algorithm */     public static Instruction generate     (        final RegisterManager registers, @@ -128,15 +127,6 @@ public class FilterLambda           )        ); -      while_body.add -      ( -         new SetValue -         ( -            iterator.get_address(), -            Operation.plus(iterator.get_value(), Constant.ONE) -         ) -      ); -        result.add        (           While.generate diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java index 29f08d4..68166a8 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java @@ -130,15 +130,6 @@ public class IndexedFilterLambda           )        ); -      while_body.add -      ( -         new SetValue -         ( -            iterator.get_address(), -            Operation.plus(iterator.get_value(), Constant.ONE) -         ) -      ); -        result.add        (           While.generate | 


