diff --git a/pyecoreocl/compiler.py b/pyecoreocl/compiler.py index 6e0bd0d..641f09a 100644 --- a/pyecoreocl/compiler.py +++ b/pyecoreocl/compiler.py @@ -545,6 +545,20 @@ def rule_including(emitter, ctx): emitter.inline(",))") +@call_rule +def rule_append(emitter, ctx): + rule_including(emitter, ctx) + + +@call_rule +def rule_prepend(emitter, ctx): + emitter.inline("itertools.chain((") + emitter.visit(ctx.argExp()) + emitter.inline(",), ") + emitter.visit(ctx.expression) + emitter.inline(")") + + @call_rule def rule_excluding(emitter, ctx): emitter.inline("_e for _e in ") diff --git a/tests/test_collection_lib.py b/tests/test_collection_lib.py index f5af9b1..b76e43c 100644 --- a/tests/test_collection_lib.py +++ b/tests/test_collection_lib.py @@ -157,4 +157,20 @@ class B(X): l = [A(), A(), B(), B()] assert !l->selectByType(A)->asSequence()! == l[:2] assert !l->selectByType(B)->asSequence()! == l[2:] - assert !l->selectByType(X)->asSequence()! == [] \ No newline at end of file + assert !l->selectByType(X)->asSequence()! == [] + + +def test__append(): + assert !Set{1, 2}->append(1)->asSet()! == {1, 2} + assert !Set{1, 2}->append(3)->asSet()! == {1, 2, 3} + + assert !Set{1, 2}->append(1)->asSequence()! == [1, 2, 1] + assert !Set{1, 2}->append(3)->asSequence()! == [1, 2, 3] + + +def test__prepend(): + assert !Set{1, 2}->prepend(1)->asSet()! == {1, 2} + assert !Set{1, 2}->prepend(3)->asSet()! == {1, 2, 3} + + assert !Set{1, 2}->prepend(1)->asSequence()! == [1, 1, 2] + assert !Set{1, 2}->prepend(3)->asSequence()! == [3, 1, 2] \ No newline at end of file