package jetbrains.mps.baseLanguage.collections.unittest.simple_operations;
/*Generated by MPS */
import junit.framework.TestCase;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ISequenceClosure;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator;
import junit.framework.Assert;
import java.util.HashSet;
import java.util.HashMap;
public class NaiveSetOperations_Test extends TestCase {
private static Iterable<String> aabbcc = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("a");
return true;
case 3:
this.__CP__ = 4;
this.yield("a");
return true;
case 4:
this.__CP__ = 5;
this.yield("b");
return true;
case 5:
this.__CP__ = 6;
this.yield("b");
return true;
case 6:
this.__CP__ = 7;
this.yield("c");
return true;
case 7:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> aabbc = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("a");
return true;
case 3:
this.__CP__ = 4;
this.yield("a");
return true;
case 4:
this.__CP__ = 5;
this.yield("b");
return true;
case 5:
this.__CP__ = 6;
this.yield("b");
return true;
case 6:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> aabbcccdde = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("a");
return true;
case 3:
this.__CP__ = 4;
this.yield("a");
return true;
case 4:
this.__CP__ = 5;
this.yield("b");
return true;
case 5:
this.__CP__ = 6;
this.yield("b");
return true;
case 6:
this.__CP__ = 7;
this.yield("c");
return true;
case 7:
this.__CP__ = 8;
this.yield("c");
return true;
case 8:
this.__CP__ = 9;
this.yield("c");
return true;
case 9:
this.__CP__ = 10;
this.yield("d");
return true;
case 10:
this.__CP__ = 11;
this.yield("d");
return true;
case 11:
this.__CP__ = 1;
this.yield("e");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> ccaabbcc = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("c");
return true;
case 3:
this.__CP__ = 4;
this.yield("c");
return true;
case 4:
this.__CP__ = 5;
this.yield("a");
return true;
case 5:
this.__CP__ = 6;
this.yield("a");
return true;
case 6:
this.__CP__ = 7;
this.yield("b");
return true;
case 7:
this.__CP__ = 8;
this.yield("b");
return true;
case 8:
this.__CP__ = 9;
this.yield("c");
return true;
case 9:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> abc = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("a");
return true;
case 3:
this.__CP__ = 4;
this.yield("b");
return true;
case 4:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> cccdde = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("c");
return true;
case 3:
this.__CP__ = 4;
this.yield("c");
return true;
case 4:
this.__CP__ = 5;
this.yield("c");
return true;
case 5:
this.__CP__ = 6;
this.yield("d");
return true;
case 6:
this.__CP__ = 7;
this.yield("d");
return true;
case 7:
this.__CP__ = 1;
this.yield("e");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> abcde = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("a");
return true;
case 3:
this.__CP__ = 4;
this.yield("b");
return true;
case 4:
this.__CP__ = 5;
this.yield("c");
return true;
case 5:
this.__CP__ = 6;
this.yield("d");
return true;
case 6:
this.__CP__ = 1;
this.yield("e");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> aabb = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("a");
return true;
case 3:
this.__CP__ = 4;
this.yield("a");
return true;
case 4:
this.__CP__ = 5;
this.yield("b");
return true;
case 5:
this.__CP__ = 1;
this.yield("b");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> c = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> cc = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("c");
return true;
case 3:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
private static Iterable<String> ccc = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
return new Iterable<String>() {
public Iterator<String> iterator() {
return new YieldingIterator<String>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
this.__CP__ = 3;
this.yield("c");
return true;
case 3:
this.__CP__ = 4;
this.yield("c");
return true;
case 4:
this.__CP__ = 1;
this.yield("c");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
public void test_union() throws Exception {
this.assertIterableEqualsIgnoreOrder(aabbcccdde, Sequence.fromIterable(aabbcc).union(Sequence.fromIterable(cccdde)));
this.assertIterableEqualsIgnoreOrder(aabbcccdde, Sequence.fromIterable(cccdde).union(Sequence.fromIterable(aabbcc)));
}
public void test_exclude() throws Exception {
this.assertIterableEqualsIgnoreOrder(cc, Sequence.fromIterable(aabbcc).subtract(Sequence.fromIterable(aabb)));
this.assertIterableEqualsIgnoreOrder(aabb, Sequence.fromIterable(aabbcc).subtract(Sequence.fromIterable(ccc)));
this.assertIterableEqualsIgnoreOrder(aabbc, Sequence.fromIterable(aabbcc).subtract(Sequence.fromIterable(c)));
this.assertIterableEqualsIgnoreOrder(abc, Sequence.fromIterable(aabbcc).subtract(Sequence.fromIterable(abc)));
}
public void test_intersect() throws Exception {
this.assertIterableEqualsIgnoreOrder(cc, Sequence.fromIterable(aabbcc).intersect(Sequence.fromIterable(cccdde)));
this.assertIterableEqualsIgnoreOrder(cc, Sequence.fromIterable(cccdde).intersect(Sequence.fromIterable(aabbcc)));
this.assertIterableEqualsIgnoreOrder(cc, Sequence.fromIterable(ccc).intersect(Sequence.fromIterable(cc)));
this.assertIterableEqualsIgnoreOrder(cc, Sequence.fromIterable(cc).intersect(Sequence.fromIterable(ccc)));
this.assertIterableEqualsIgnoreOrder(cc, Sequence.fromIterable(cc).intersect(Sequence.fromIterable(ccaabbcc)));
}
public NaiveSetOperations_Test() {
}
public void assertSameContents(Iterable<String> seq1, Iterable<String> seq2) {
Assert.assertSame(Sequence.fromIterable(seq1).count(), Sequence.fromIterable(seq2).count());
for (String x : seq1) {
Assert.assertTrue(Sequence.fromIterable(seq2).contains(x));
}
for (String y : seq2) {
Assert.assertTrue(Sequence.fromIterable(seq1).contains(y));
}
}
public <T> void assertIterableEquals(Iterable<T> exp, Iterable<T> test) {
Iterator<T> expIt = exp.iterator();
Iterator<T> testIt = test.iterator();
while (expIt.hasNext() && testIt.hasNext()) {
Assert.assertEquals(expIt.next(), testIt.next());
}
Assert.assertFalse(expIt.hasNext());
Assert.assertFalse(testIt.hasNext());
}
public <T> void assertIterableEqualsAsSet(Iterable<T> exp, Iterable<T> test) {
HashSet<T> expSet = new HashSet<T>();
for (T e : exp) {
Assert.assertTrue(expSet.add(e));
}
Iterator<T> testIt = test.iterator();
while (testIt.hasNext()) {
Assert.assertTrue(expSet.remove(testIt.next()));
}
Assert.assertTrue(expSet.isEmpty());
Assert.assertFalse(testIt.hasNext());
}
public <T> void assertIterableEqualsIgnoreOrder(Iterable<T> exp, Iterable<T> test) {
HashMap<T, Integer> cardMap = new HashMap<T, Integer>();
for (T e : exp) {
Integer card = cardMap.get(e);
cardMap.put(e, (card != null ? card + 1 : 1));
}
Iterator<T> testIt = test.iterator();
while (testIt.hasNext()) {
T next = testIt.next();
Integer card = cardMap.remove(next);
Assert.assertFalse(card == null);
if (card > 1) {
cardMap.put(next, card - 1);
}
}
Assert.assertTrue(cardMap.isEmpty());
Assert.assertFalse(testIt.hasNext());
}
}