package jetbrains.mps.internalCollections.test.closures; /*Generated by MPS */ import jetbrains.mps.internal.collections.runtime.ISequence; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ISelector; import java.util.Arrays; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import java.util.Comparator; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import junit.framework.Assert; public class Sort_Test extends Util_Test { public void test_sortMethod() throws Exception { ISequence<String> input = Sequence.fromArray("ZZZ", "Y", "XXXX", "WW"); ISequence<String> test = input.sort(new ISelector<String, Integer>() { public Integer select(String it) { return it.length(); } }, false); this.assertIterableEquals(Sequence.fromArray("XXXX", "ZZZ", "WW", "Y"), test); } public void test_toComparableVar() throws Exception { ISequence<String> input = Sequence.fromArray("ZZZ", "Y", "XXXX", "WW"); ISelector<String, ? extends Comparable<?>> length = new ISelector<String, Comparable<?>>() { public Comparable<?> select(String it) { return it.length(); } }; ISequence<String> test = input.sort(length, false); ISelector<String, ? extends Comparable<?>> itself = new ISelector<String, Comparable<?>>() { public Comparable<?> select(String it) { return it; } }; ISequence<String> test2 = input.sort(itself, true); this.assertIterableEquals(Sequence.fromArray("XXXX", "ZZZ", "WW", "Y"), test); this.assertIterableEquals(Sequence.fromArray("Y", "WW", "ZZZ", "XXXX"), test.sort(length, true)); this.assertIterableEquals(Sequence.fromArray("WW", "XXXX", "Y", "ZZZ"), test2); } public void test_sortOperationInternal() throws Exception { Iterable<String> input = Arrays.asList("Z", "YY", "XXX", "WWWW"); Iterable<String> test = Sequence.fromIterable(input).sort(new ISelector<String, Integer>() { public Integer select(String it) { return it.length(); } }, false); this.assertIterableEquals(Arrays.asList("WWWW", "XXX", "YY", "Z"), test); this.assertIterableEquals(input, Sequence.fromIterable(test).sort(new ISelector<String, Integer>() { public Integer select(String it) { return it.length(); } }, true)); _FunctionTypes._return_P1_E0<? extends Integer, ? super String> cl = new _FunctionTypes._return_P1_E0<Integer, String>() { public Integer invoke(String it) { return it.length(); } }; this.assertIterableEquals(input, Sequence.fromIterable(test).sort(cl, true)); this.assertIterableEquals(Arrays.asList("WWWW", "XXX", "YY", "Z"), Sequence.fromIterable(input).sort(new Comparator<String>() { public int compare(String a, String b) { return a.length() - b.length(); } }, false)); } public void test_caseSensitive() throws Exception { List<String> test = ListSequence.fromListAndArray(new ArrayList<String>(), "abc", "ABC", "aBC", "Abc", "abcd", "ABCD", "abcD"); this.assertIterableEquals(Arrays.asList("ABC", "ABCD", "Abc", "aBC", "abc", "abcD", "abcd"), ListSequence.fromList(test).sort(new ISelector<String, String>() { public String select(String it) { return it; } }, true)); } public void test_caseInsensitive() throws Exception { List<String> test = ListSequence.fromListAndArray(new ArrayList<String>(), "abc", "ABC", "aBC", "Abc", "abcd", "ABCD", "abcD"); this.assertIterableEquals(test, ListSequence.fromList(test).sort(new Comparator<String>() { public int compare(String a, String b) { return String.CASE_INSENSITIVE_ORDER.compare(a, b); } }, true)); } public void test_legacySort() throws Exception { Iterable<String> input = Arrays.asList("Z", "YY", "XXX", "WWWW"); Iterable<String> test = Sequence.fromIterable(input).sort(new ISelector<String, Integer>() { public Integer select(String it) { return it.length(); } }, false); this.assertIterableEquals(Arrays.asList("WWWW", "XXX", "YY", "Z"), test); } public void test_alsoSort() throws Exception { List<String> test = ListSequence.fromListAndArray(new ArrayList<String>(), "a", "b", "cd", "xy", "ABC", "abcd", "X", "Y", "XYZ"); Iterable<String> l1 = ListSequence.fromList(test).sort(new ISelector<String, String>() { public String select(String it) { return it; } }, true); Iterable<String> l2 = ListSequence.fromList(test).sort(new ISelector<String, Integer>() { public Integer select(String it) { return it.length(); } }, false).alsoSort(new ISelector<String, String>() { public String select(String it) { return it; } }, true); this.assertIterableEquals(Arrays.asList("ABC", "X", "XYZ", "Y", "a", "abcd", "b", "cd", "xy"), l1); this.assertIterableEquals(Arrays.asList("abcd", "ABC", "XYZ", "cd", "xy", "X", "Y", "a", "b"), l2); } public void test_mps18105() throws Exception { Iterable<Object> seq = ListSequence.fromListAndArray(new ArrayList<Object>(), "b", "c", "a"); Comparable last = Sequence.fromIterable(seq).select(new ISelector<Object, Comparable<?>>() { public Comparable<?> select(Object it) { return (Comparable<?>) it; } }).sort(new ISelector<Comparable<?>, Comparable<?>>() { public Comparable<?> select(Comparable<?> a) { return a; } }, true).last(); Assert.assertEquals("c", last); } }