blob: 91753934c650807bbbf79ef2b9c20524f059fb26 [file] [log] [blame]
@test
operation testInit() {
Sequence{};
Set{};
OrderedSet{};
Bag{};
Map{};
Tuple{};
ConcurrentMap{};
ConcurrentSet{};
ConcurrentBag{};
}
@test
operation testCorrectTypes() {
var c;
c = new Sequence;
assertTrue(c.getClass().getName().endsWith("Sequence"));
c = new Set;
assertTrue(c.getClass().getName().endsWith("Set"));
c = new OrderedSet;
assertTrue(c.getClass().getName().endsWith("OrderedSet"));
c = new Bag;
assertTrue(c.getClass().getName().endsWith("Bag"));
c = new Map;
assertTrue(c.getClass().getName().endsWith("Map"));
c = new Tuple;
assertTrue(c.getClass().getName().endsWith("Tuple"));
c = new ConcurrentMap;
assertTrue(c.getClass().getName().endsWith("ConcurrentMap"));
c = new ConcurrentSet;
assertTrue(c.getClass().getName().endsWith("ConcurrentSet"));
c = new ConcurrentBag;
assertTrue(c.getClass().getName().endsWith("ConcurrentBag"));
}
@test
operation testSelectByKindType() {
var c = Bag{0, null, 1, "a str", "2", 2, true, Sequence{}, Sequence{5}, Map{}, Set{3, 3}, false, 0.4, 8l, 9d, ConcurrentBag{}, ConcurrentSet{}};
var result = c.selectByKind(Collection);
assertEquals(5, result.size());
assertTrue(result.forAll(e|e.isKindOf(Collection)));
result = c.selectByType(List);
assertEquals(2, result.size());
assertTrue(result.forAll(e|e.isTypeOf(Sequence)));
result = c.selectByType(Any);
assertEquals(0, result.size());
result = c.selectByKind(Any);
assertEquals(c, result);
result = c.selectByKind(Integer);
assertEquals(c.select(e|e.isKindOf(Integer)), result);
result = c.selectByType(Integer);
assertEquals(c.select(e|e.isTypeOf(Integer)), result);
}
@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});
assertEquals(Bag{null}, Bag{null});
assertEquals(Bag{}, Bag{});
assertNotEquals(Bag{null}, Bag{});
assertEquals(Bag{0, null}, Bag{null, 0});
assertEquals(Bag{0, null}, Bag{0, null});
assertEquals(Bag{0, 1}, Bag{1, 0});
assertNotEquals(Bag{0, 1}, Bag{0, 1, null});
}
@test
operation testBagEqualsDifferentOrder() {
assertTrue(Bag{1, 2} == Bag{2, 1});
}
@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 testTupleProperty() {
var t = new Tuple;
t.prop1 = "a value";
t.p2 = null;
t.CustomProperty = 2.2;
assertEquals("a value", t.prop1);
assertEquals(2.2, t.CustomProperty);
assertEquals(null, t.p2);
}
@test
operation testTupleConstructor() {
var t = new Tuple(prop1 = 1, fieldX = "Y", sp = "a str", components = Sequence{0..9});
assertEquals(1, t.prop1);
assertEquals("Y", t.fieldX);
assertEquals(10, t.components.size());
}
@test
operation testTupleLiteral() {
var t = Tuple{bag = Bag{null, 0, "a str", true, 0.1}, map = Map{"a" = 1, "b" = 2}};
assertEquals(5, t.bag.size());
assertEquals(2, t.map.get("b"));
}
@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);
}
@test
operation testParseConcurrentSet() {
var cs = new ConcurrentSet;
assertTrue(cs.getClass().getSimpleName().equals("EolConcurrentSet"));
cs.add(1);
cs.add(2);
cs.add(1);
assertEquals(2, cs.size());
assertEquals(4, ConcurrentSet{1, 1, 2, 3, 5}.size());
cs = ConcurrentSet{"str", 7, "str"};
assertTrue(cs.contains("str"));
assertTrue(cs.contains(7));
assertEquals(Set{"str", 7, "str"}.size(), cs.size());
}
@test
operation testParseConcurrentBag() {
var cb = new ConcurrentBag;
assertTrue(cb.getClass().getSimpleName().equals("EolConcurrentBag"));
cb.add(1);
cb.add(2);
cb.add(1);
assertEquals(3, cb.size());
assertEquals(5, ConcurrentBag{1, 1, 2, 3, 5}.size());
assertEquals(Bag{-16..25}.asSequence(), ConcurrentBag{-16..25}.asSequence());
}
@test
operation testParseConcurrentMap() {
var cm = new ConcurrentMap;
assertTrue(cm.getClass().getSimpleName().equals("EolConcurrentMap"));
cm.put(1, "a");
cm.put(2, "b");
cm.put(3, "c");
assertEquals(Map{1 = "a", 2 = "b", 3 = "c"}.entrySet().toString(), cm.entrySet().toString());
cm = ConcurrentMap{"a" = 1, "b" = 2, "c" = 3};
cm.put("a", 0);
assertEquals(3, cm.size());
cm.putIfAbsent("d", 4);
assertEquals(4, cm.size());
cm.putIfAbsent("d", 5);
assertEquals(4, cm.size());
assertEquals(4, cm.get("d"));
}