blob: aab7baa132fb94a94521754f7bd5694d0ce7cb7f [file] [log] [blame]
@test
operation testFirst() {
assertEquals(1, Sequence{1,2,3}.first);
}
@test
operation testIncludesCollection() {
var seq = Sequence{Set{1,2}};
assertEquals(seq.includes(Set{1,2}), true);
}
@test
operation testSetsNotEqual() {
assertNotEquals(Set{Set{1}, 2, Set{3}}, Set{Set{1}, 2, Sequence{3}});
}
@test
operation testSetsEqual() {
assertEquals(Set{Set{1}, 2, Set{3}}, Set{Set{1}, 2, Set{3}});
}
@test
operation testSequencesNotEqual() {
assertNotEquals(Sequence{Set{1}, 2, Set{3}}, Sequence{Set{1}, 2, Sequence{3}});
}
@test
operation testSequencesEqual() {
assertEquals(Sequence{Set{1}, 2, Set{3}}, Sequence{Set{1}, 2, Set{3}});
}
@test
operation testIncludes() {
assertEquals(Set{Set{2}}.includes(Set{2}), true);
}
@test
operation testExcludes() {
assertEquals(Set{Set{2}}.excludes(Set{3}), true);
}
@test
operation testExcluding() {
assertEquals(Sequence{1,2,3}.excluding(2), Sequence{1,3});
}
@test
operation testExcludingAll() {
assertEquals(Sequence{1,2,3}.excludingAll(Sequence{1,2}), Sequence{3});
}
@test
operation testIncluding() {
assertEquals(Sequence{1,2,3}.including(4), Sequence{1,2,3,4});
}
@test
operation testIncludingAll() {
assertEquals(Sequence{1,2,3}.includingAll(Sequence{4,5}), Sequence{1,2,3,4,5});
}
@test
operation testLast() {
assertEquals(Sequence{1,2,3}.last(),3);
}
@test
operation testSequenceEquals() {
assertEquals(Sequence{1,2}, Sequence{1,2});
}
@test
operation testModifiedSetUniqueness() {
var s = Set{1,2,3};
s.add(1);
assertEquals(s.size(), 3);
}
@test
operation testRemoveDuplicates() {
var seq = Sequence{1,1,2,3};
assertEquals(seq.asSet().size(), 3);
}
@test
operation testEolSetFromUnmodifiableSet() {
var grp1 : Map;
grp1.put('a','aaa');
grp1.put('b','bbb');
grp1.keySet().println();
}
@test
operation testSortByOnOrderedSet() {
var a = 1; a.~x = 3;
var b = 2; b.~x = 2;
var c = 3; c.~x = 1;
assertEquals(OrderedSet{a,b,c}.sortBy(i|i.~x), Sequence{c, b, a});
}
@test
operation testSortWithDuplicates() {
assertEquals(Sequence{1,1,2,3}.sortBy(x|x), Sequence{1,1,2,3});
}
@test
operation testSortSquare() {
assertEquals(Sequence{2, 1, -1}.sortBy(x|x.pow(2)), Sequence{1, -1, 2});
}
@test
operation testDeclaredSetUniqueness() {
assertEquals(Set{1,1,2,3}.size(), 3);
}
@test
operation testSetIncludesObject() {
var eClass = EClass.all.random();
var set : Set;
set.add(eClass);
assertEquals(set.includes(eClass), true);
}
@test
operation testSequenceIncludesObject() {
var eClass = EClass.all.random();
var seq : Sequence;
seq.add(eClass);
assertEquals(seq.includes(eClass), true);
}
@test
operation testSetIncludesPrimitive() {
var prim = 1;
var set : Set;
set.add(prim);
assertEquals(set.includes(prim), true);
}
@test
operation testSequenceIncludesPrimitive() {
var prim = 1;
var seq : Sequence;
seq.add(prim);
assertEquals(seq.includes(prim), true);
}
@test
operation testConvertedSetUniqueness() {
assertEquals(Sequence{1,1,2,3}.asSet().size(), 3);
}
@test
operation testCount() {
assertEquals(Sequence{1,2,2,3}.count(2), 2);
}
@test
operation testRandom() {
assertEquals(Sequence{1,1,1}.random(), 1);
}
@test
operation testIncludingSize() {
assertEquals(Sequence{1,2,3}.including(4).size(), 4);
}
@test
operation testBagEquals() {
assertNotEquals(Bag{1,1,2}, Bag{1,2,2});
}
@test
operation testReorderedSetEquals() {
assertEquals(Set{1,2,3}, Set{2,1,3});
}
@test
operation testOrderedSetAt() {
assertEquals(OrderedSet{1,2,3}.at(1), 2);
}
@test
operation testSequenceAt() {
assertEquals(Sequence{1,2,3}.at(1), 2);
}
@test
operation testIncludesAll() {
assertEquals(Sequence{"a", "b"}.includesAll(Sequence{"c"}), false);
}
@test
operation testSequenceRange() {
assertEquals(Sequence{1..10}.size(), 10);
}
@test
operation testInvalidSequenceRanges() {
assertError(Sequence{0.1..10});
assertError(Sequence{"foo".."bar"});
}
@test
operation testReverseSequenceRange() {
assertEquals(Sequence{10..5}, Sequence {10,9,8,7,6,5});
}
@test
operation testInvert() {
assertEquals(Sequence{1,2,3}.invert(), Sequence{3,2,1});
}
@test
operation testSelectCorrectTypeSequence() {
assertEquals(Sequence{1,2,3}.select(x|true).isTypeOf(Sequence), true);
}
@test
operation testSelectCorrectTypeSet() {
assertEquals(Set{1,2,3}.select(x|true).isTypeOf(Set), true);
}
@test
operation testCollectCorrectTypeSet() {
assertEquals(Set{1,2,3}.collect(x|x).isTypeOf(Bag), true);
}
@test
operation testSelectCorrectTypeOrderedSet() {
assertEquals(OrderedSet{1,2,3}.select(x|true).isTypeOf(OrderedSet), true);
}
@test
operation testCollectCorrectTypeOrderedSet() {
assertEquals(OrderedSet{1,2,3}.collect(x|x).isTypeOf(Sequence), true);
}
@test
operation testSelectCorrectTypeBag() {
assertEquals(Bag{1,2,3}.select(x|true).isTypeOf(Bag), true);
}
@test
operation testRemoveByIndexInSequence() {
var s = Sequence{"a","b","c"};
s.removeAt(1);
assertEquals(s, Sequence{"a","c"});
}
@test
operation testRemoveByIndexInOrderedSet() {
var s = OrderedSet{1,2,3};
s.removeAt(1);
assertEquals(OrderedSet{1,3}, s);
}
@test
operation testRemove() {
var s = Sequence{1,2,3};
s.remove(1);
assertEquals(s, Sequence{2,3});
}
@test
operation testConcat() {
var s = Sequence{1,2,3};
assertEquals(s.concat(), '123');
}
@test
operation testConcatEmpty() {
var s = Sequence{};
assertEquals(s.concat(), '');
}
@test
operation testConcatWithGlue() {
var s = Sequence{1,2,3};
assertEquals(s.concat('-'), '1-2-3');
}
@test
operation testClosure() {
var s = Sequence {Sequence{1, 2}, 3, Sequence{4, 5}};
var expected = Sequence {
Sequence {1, 2},
Sequence {4, 5}
};
var flattened = expected.flatten;
// The result of the body of the closure is traversed as
// a collection, and its elements are added to the closure:
// if we want to preserve the original sequences
assertEquals(expected, s.closure(e : Sequence | Sequence {e}));
// If we do not do that, the elements in the subsequences
// will be collected into a "flattened" list
assertEquals(flattened, s.closure(e : Sequence | e));
}
@test
operation testAggregate() {
var s = Sequence {1,2,3};
// Doesn't work, as we need both the key and the value ASTs
assertError(s.aggregate(e | e * 2));
// Does work
var r = s.aggregate(e | e, e * 2);
assertEquals(3, r.size);
for (k in r.keySet) {
assertEquals(k*2, r.get(k));
}
}
@test
operation testEmptyMapLiteral() {
assertEquals(0, Map {}.size());
}
@test
operation testMapLiteralWithOneElement() {
// not using a variable
assertEquals(1, Map {"c" = "d"}.size());
assertEquals("d", Map {"c" = "d"}.get("c"));
// using a variable
var m = Map { "a" = "b" };
assertEquals(1, m.size());
assertEquals("b", m.get("a"));
}
@test
operation testMapLiteralWithTwoElements() {
var m = Map { "a" = 1, "b" = 3 };
assertEquals(2, m.size());
assertEquals(1, m.get("a"));
assertEquals(3, m.get("b"));
}
@test
operation testMapLiteralWithNestedEquals() {
// No ambiguity: keys cannot use logical or relational operators,
// unless between parenthesis
var m := Map { "x" = "x" = 3 };
assertEquals(1, m.size());
assertEquals(false, m.get("x"));
}
@test
operation testMapLiteralWithEqualsBetweenParens() {
var m := Map { ("x" = "x") = 3 };
assertEquals(1, m.size());
assertEquals(3, m.get(true));
}
@test
operation testMapLiteralWithCollectionKeys() {
assertEquals(1, Map { Sequence {1..5} = "test" }.size());
var s := Sequence {1..3};
var m := Map { s = "me!" };
assertEquals(1, m.size());
assertEquals("me!", m.get(s));
}
@test
operation testSequenceSize() {
assertEquals(0, Sequence {}.size);
}
@test
operation testBagSize() {
assertEquals(1, Bag {1}.size);
}
@test
operation testMapSize() {
assertEquals(2, Map {1 = 2, 2 = 3}.size);
}