11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableSet.Builder; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.TreeSet; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit tests for {@link ImmutableSortedSet}. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableSortedSetTest extends AbstractImmutableSetTest { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enum singleton pattern 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private enum StringLengthComparator implements Comparator<String> { 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert INSTANCE; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compare(String a, String b) { 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return a.length() - b.length(); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Comparator<String> STRING_LENGTH 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = StringLengthComparator.INSTANCE; 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of(String e) { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(e); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of(String e1, String e2) { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(e1, e2); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of(String e1, String e2, String e3) { 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(e1, e2, e3); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of( 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String e1, String e2, String e3, String e4) { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(e1, e2, e3, e4); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of( 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String e1, String e2, String e3, String e4, String e5) { 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(e1, e2, e3, e4, e5); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> of(String e1, String e2, String e3, 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String e4, String e5, String e6, String... rest) { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.of(e1, e2, e3, e4, e5, e6, rest); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> copyOf(String[] elements) { 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.copyOf(elements); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> copyOf(Collection<String> elements) { 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.copyOf(elements); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> copyOf(Iterable<String> elements) { 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.copyOf(elements); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedSet<String> copyOf(Iterator<String> elements) { 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.copyOf(elements); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointers() throws Exception { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.setDefault(Comparable[].class, new Comparable[] { 0 }); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(ImmutableSortedSet.class); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_comparator() { 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_headSet() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(set, set.headSet("c")); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_tailSet() { 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(set, set.tailSet("f")); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_subSet() { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(set, set.subSet("c", "f")); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_first() { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.first(); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_last() { 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.last(); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty_serialization() { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of(); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = SerializableTester.reserialize(set); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(set, copy); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_comparator() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_headSet() { 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.headSet("g") instanceof ImmutableSortedSet); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.headSet("g")).hasContentsInOrder("e"); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.headSet("c")); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.headSet("e")); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_tailSet() { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.tailSet("c") instanceof ImmutableSortedSet); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet("c")).hasContentsInOrder("e"); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet("e")).hasContentsInOrder("e"); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.tailSet("g")); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_subSet() { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("c", "g") instanceof ImmutableSortedSet); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet("c", "g")).hasContentsInOrder("e"); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet("e", "g")).hasContentsInOrder("e"); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.subSet("f", "g")); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.subSet("c", "e")); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.subSet("c", "d")); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_first() { 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("e", set.first()); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_last() { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("e", set.last()); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingle_serialization() { 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e"); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(set.comparator(), copy.comparator()); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_ordering() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "a", "f", "b", "d", "c"); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests that we workaround GWT bug #3621 (or that it is already fixed). 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A call to of() with a parameter that is not a plain Object[] (here, 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Interface[]) creates a RegularImmutableSortedSet backed by an array of that 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * type. Later, RegularImmutableSortedSet.toArray() calls System.arraycopy() 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * to copy from that array to the destination array. This would be fine, but 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * GWT has a bug: It refuses to copy from an E[] to an Object[] when E is an 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * interface type. 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: test other collections for this problem 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_gwtArraycopyBug() { 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * The test requires: 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 1) An interface I extending Comparable<I> so that the created array is of 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * an interface type. 2) An instance of a class implementing that interface 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * so that we can pass non-null instances of the interface. 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * (Currently it's safe to pass instances for which compareTo() always 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * returns 0, but if we had a SingletonImmutableSortedSet, this might no 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * longer be the case.) 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * javax.naming.Name and java.util.concurrent.Delayed might work, but 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * they're fairly obscure, we've invented our own interface and class. 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Interface a = new Impl(); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Interface b = new Impl(); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<Interface> set = ImmutableSortedSet.of(a, b); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.toArray(); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.toArray(new Object[2]); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert interface Interface extends Comparable<Interface> { 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static class Impl implements Interface { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static int nextId; 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer id = nextId++; 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public int compareTo(Interface other) { 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return id.compareTo(((Impl) other).id); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_ordering_dupes() { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "a", "e", "f", "b", "b", "d", "a", "c"); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_comparator() { 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "a", "f", "b", "d", "c"); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_headSet() { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.headSet("e") instanceof ImmutableSortedSet); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.headSet("e")).hasContentsInOrder("b", "c", "d"); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.headSet("g")).hasContentsInOrder("b", "c", "d", "e", "f"); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.headSet("a")); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.headSet("b")); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_tailSet() { 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.tailSet("e") instanceof ImmutableSortedSet); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet("e")).hasContentsInOrder("e", "f"); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet("a")).hasContentsInOrder("b", "c", "d", "e", "f"); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.tailSet("g")); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_subSet() { 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("c", "e") instanceof ImmutableSortedSet); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet("c", "e")).hasContentsInOrder("c", "d"); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet("a", "g")).hasContentsInOrder("b", "c", "d", "e", "f"); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.subSet("a", "b")); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.subSet("g", "h")); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(of(), set.subSet("c", "c")); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.subSet("e", "c"); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_subSetSerialization() { 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(set.subSet("c", "e")); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_first() { 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", set.first()); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_last() { 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("f", set.last()); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf_serialization() { 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "f", "b", "d", "c"); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(set, copy)); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(set.comparator(), copy.comparator()); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* "Explicit" indicates an explicit comparator. */ 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_ordering() { 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_ordering_dupes() { 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "brown", "fox", "jumped", 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "over", "a", "lazy", "dog").build(); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_contains() { 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("quick")); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.contains("google")); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.contains("")); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.contains("california")); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.contains(null)); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_containsMismatchedTypes() { 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.contains(3.7)); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_comparator() { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(STRING_LENGTH, set.comparator()); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_headSet() { 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.headSet("a") instanceof ImmutableSortedSet); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.headSet("fish") instanceof ImmutableSortedSet); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.headSet("fish")).hasContentsInOrder("a", "in", "the"); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that( 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.headSet("california")).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.headSet("a").isEmpty()); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.headSet("").isEmpty()); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_tailSet() { 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.tailSet("california") instanceof ImmutableSortedSet); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.tailSet("fish") instanceof ImmutableSortedSet); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet("fish")).hasContentsInOrder("over", "quick", "jumped"); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that( 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.tailSet("a")).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.tailSet("california").isEmpty()); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_subSet() { 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("the", "quick") instanceof ImmutableSortedSet); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("", "b") instanceof ImmutableSortedSet); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet("the", "quick")).hasContentsInOrder("the", "over"); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet("a", "california")) 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("", "b").isEmpty()); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("vermont", "california").isEmpty()); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.subSet("aaa", "zzz").isEmpty()); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.subSet("quick", "the"); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_first() { 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", set.first()); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_last() { 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("jumped", set.last()); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicitEmpty_serialization() { 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).build(); 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.isEmpty()); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.isEmpty()); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(set.comparator(), copy.comparator()); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicit_serialization() { 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(set, copy)); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(set.comparator(), copy.comparator()); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_ordering() { 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(asList("e", "a", "f", "b", "d", "c")); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_ordering_dupes() { 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(asList("e", "a", "e", "f", "b", "b", "d", "a", "c")); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_subSet() { 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "a", "f", "b", "d", "c"); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> subset = set.subSet("c", "e"); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = copyOf(subset); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(subset, copy); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_headSet() { 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "a", "f", "b", "d", "c"); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> headset = set.headSet("d"); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = copyOf(headset); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(headset, copy); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_tailSet() { 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("e", "a", "f", "b", "d", "c"); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> tailset = set.tailSet("d"); 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = copyOf(tailset); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(tailset, copy); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_comparator() { 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = copyOf(asList("e", "a", "f", "b", "d", "c")); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_ordering() { 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = copyOf(asIterator("e", "a", "f", "b", "d", "c")); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_ordering_dupes() { 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(asIterator("e", "a", "e", "f", "b", "b", "d", "a", "c")); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_comparator() { 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = copyOf(asIterator("e", "a", "f", "b", "d", "c")); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_sortedSet_ordering() { 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyOf(Sets.newTreeSet(asList("e", "a", "f", "b", "d", "c"))); 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_sortedSet_comparator() { 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = copyOf(Sets.<String>newTreeSet()); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicit_ordering() { 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.copyOf(STRING_LENGTH, asList( 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a")); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicit_ordering_dupes() { 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.copyOf(STRING_LENGTH, asList( 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "brown", "fox", "jumped", "over", "a", 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "lazy", "dog")); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicit_comparator() { 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.copyOf(STRING_LENGTH, asList( 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a")); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(STRING_LENGTH, set.comparator()); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicit_iterator_ordering() { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator( 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a")); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicit_iterator_ordering_dupes() { 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator( 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "brown", "fox", "jumped", "over", "a", 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "lazy", "dog")); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicit_iterator_comparator() { 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator( 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a")); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(STRING_LENGTH, set.comparator()); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_sortedSetIterable() { 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> input = Sets.newTreeSet(STRING_LENGTH); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.addAll(input, "in", "the", "quick", "jumped", "over", "a"); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = copyOf(input); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "jumped", "over", "quick", "the"); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSorted_natural_ordering() { 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> input = Sets.newTreeSet( 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList("in", "the", "quick", "jumped", "over", "a")); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "jumped", "over", "quick", "the"); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSorted_natural_comparator() { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> input = 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Sets.newTreeSet(asList("in", "the", "quick", "jumped", "over", "a")); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input); 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), set.comparator()); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSorted_explicit_ordering() { 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> input = Sets.newTreeSet(STRING_LENGTH); 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.addAll(input, "in", "the", "quick", "jumped", "over", "a"); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped"); 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(STRING_LENGTH, set.comparator()); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals_bothDefaultOrdering() { 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("a", "b", "c"); 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(set, Sets.newTreeSet(asList("a", "b", "c"))); 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newTreeSet(asList("a", "b", "c")), set); 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.equals(Sets.newTreeSet(asList("a", "b", "d")))); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Sets.newTreeSet(asList("a", "b", "d")).equals(set)); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.equals(Sets.newHashSet(4, 5, 6))); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Sets.newHashSet(4, 5, 6).equals(set)); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals_bothExplicitOrdering() { 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("in", "the", "a"); 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newTreeSet(asList("in", "the", "a")), set); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.equals(Sets.newTreeSet(asList("in", "the", "house")))); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Sets.newTreeSet(asList("in", "the", "house")).equals(set)); 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.equals(Sets.newHashSet(4, 5, 6))); 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Sets.newHashSet(4, 5, 6).equals(set)); 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> complex = Sets.newTreeSet(STRING_LENGTH); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.addAll(complex, "in", "the", "a"); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(set, complex); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals_bothDefaultOrdering_StringVsInt() { 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("a", "b", "c"); 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.equals(Sets.newTreeSet(asList(4, 5, 6)))); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotEqualLenient(Sets.newTreeSet(asList(4, 5, 6)), set); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals_bothExplicitOrdering_StringVsInt() { 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("in", "the", "a"); 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.equals(Sets.newTreeSet(asList(4, 5, 6)))); 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotEqualLenient(Sets.newTreeSet(asList(4, 5, 6)), set); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAll_notSortedSet() { 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("a", "b", "f"); 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Collections.emptyList())); 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(asList("b"))); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(asList("b", "b"))); 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(asList("b", "f"))); 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(asList("b", "f", "a"))); 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(asList("d"))); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(asList("z"))); 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(asList("b", "d"))); 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(asList("f", "d", "a"))); 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAll_sameComparator() { 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("a", "b", "f"); 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet())); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet(asList("b")))); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "f")))); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "b", "f")))); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("d")))); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("z")))); 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("b", "d")))); 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a")))); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAll_sameComparator_StringVsInt() { 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = of("a", "b", "f"); 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<Integer> unexpected = Sets.newTreeSet(Ordering.natural()); 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert unexpected.addAll(asList(1, 2, 3)); 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(unexpected)); 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAll_differentComparator() { 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<Comparable<?>> comparator = Collections.reverseOrder(); 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = new ImmutableSortedSet.Builder<String>(comparator) 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a", "b", "f").build(); 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet())); 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet(asList("b")))); 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "f")))); 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "b", "f")))); 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("d")))); 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("z")))); 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("b", "d")))); 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a")))); 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDifferentComparator_serialization() { 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<Comparable<?>> comparator = Collections.reverseOrder(); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = new ImmutableSortedSet.Builder<String>(comparator) 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a", "b", "c").build(); 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> copy = SerializableTester.reserializeAndAssert(set); 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(set, copy)); 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(set.comparator(), copy.comparator()); 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReverseOrder() { 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> set = ImmutableSortedSet.<String>reverseOrder() 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a", "b", "c").build(); 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder("c", "b", "a"); 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural().reverse(), set.comparator()); 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Comparator<Object> TO_STRING 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Comparator<Object>() { 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compare(Object o1, Object o2) { 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return o1.toString().compareTo(o2.toString()); 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSupertypeComparator() { 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<Integer> set = new ImmutableSortedSet.Builder<Integer>(TO_STRING) 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add(3, 12, 101, 44).build(); 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder(101, 12, 3, 44); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSupertypeComparatorSubtypeElements() { 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<Number> set = new ImmutableSortedSet.Builder<Number>(TO_STRING) 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add(3, 12, 101, 44).build(); 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set).hasContentsInOrder(101, 12, 3, 44); 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override <E extends Comparable<E>> Builder<E> builder() { 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedSet.naturalOrder(); 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override int getComplexBuilderSetLastElement() { 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 0x00FFFFFF; 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLegacyComparable_of() { 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set0 = ImmutableSortedSet.of(); 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // using a legacy comparable 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set1 = ImmutableSortedSet.of( 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LegacyComparable.Z); 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // using a legacy comparable 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set2 = ImmutableSortedSet.of( 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LegacyComparable.Z, LegacyComparable.Y); 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLegacyComparable_copyOf_collection() { 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedSet.copyOf(LegacyComparable.VALUES_BACKWARD); 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set)); 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLegacyComparable_copyOf_iterator() { 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set = ImmutableSortedSet.copyOf( 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LegacyComparable.VALUES_BACKWARD.iterator()); 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set)); 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLegacyComparable_builder_natural() { 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Note: IntelliJ wrongly reports an error for this statement 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.Builder<LegacyComparable> builder 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedSet.<LegacyComparable>naturalOrder(); 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll(LegacyComparable.VALUES_BACKWARD); 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(LegacyComparable.X); 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(LegacyComparable.Y, LegacyComparable.Z); 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set = builder.build(); 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set)); 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLegacyComparable_builder_reverse() { 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Note: IntelliJ wrongly reports an error for this statement 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.Builder<LegacyComparable> builder 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedSet.<LegacyComparable>reverseOrder(); 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll(LegacyComparable.VALUES_FORWARD); 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(LegacyComparable.X); 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(LegacyComparable.Y, LegacyComparable.Z); 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<LegacyComparable> set = builder.build(); 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_BACKWARD, set)); 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings({"deprecation", "static-access"}) 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderMethod() { 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.builder(); 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsList() { 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set = ImmutableSortedSet.of("a", "e", "i", "o", "u"); 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> list = set.asList(); 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of("a", "e", "i", "o", "u"), list); 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(list, ImmutableList.copyOf(set)); 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester, ImmutableSortedAsList") 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsListReturnTypeAndSerialization() { 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set = ImmutableSortedSet.of("a", "e", "i", "o", "u"); 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> list = set.asList(); 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof ImmutableSortedAsList); 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> copy = SerializableTester.reserializeAndAssert(list); 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy instanceof ImmutableSortedAsList); 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubsetAsList() { 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedSet.of("a", "e", "i", "o", "u").subSet("c", "r"); 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> list = set.asList(); 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of("e", "i", "o"), list); 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(list, ImmutableList.copyOf(set)); 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester, ImmutableSortedAsList") 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubsetAsListReturnTypeAndSerialization() { 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedSet.of("a", "e", "i", "o", "u").subSet("c", "r"); 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> list = set.asList(); 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof ImmutableSortedAsList); 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> copy = SerializableTester.reserializeAndAssert(list); 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy instanceof ImmutableSortedAsList); 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsListInconsistentComprator() { 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add( 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "in", "the", "quick", "jumped", "over", "a").build(); 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> list = set.asList(); 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list.contains("the")); 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, list.indexOf("the")); 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, list.lastIndexOf("the")); 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(list.contains("dog")); 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, list.indexOf("dog")); 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, list.lastIndexOf("dog")); 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(list.contains("chicken")); 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, list.indexOf("chicken")); 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, list.lastIndexOf("chicken")); 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final <E> Iterator<E> asIterator(E... elements) { 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList(elements).iterator(); 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // In GWT, java.util.TreeSet throws ClassCastException when the comparator 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // throws it, unlike JDK6. Therefore, we accept ClassCastException as a 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // valid result thrown by java.util.TreeSet#equals. 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertNotEqualLenient( 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeSet<?> unexpected, SortedSet<?> actual) { 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(actual).isNotEqualTo(unexpected); 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ClassCastException accepted) { 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadSetInclusive() { 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.headSet(strings[i], true)) 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(sortedNumberNames(0, i + 1)); 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadSetExclusive() { 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.headSet(strings[i], false)).hasContentsInOrder(sortedNumberNames(0, i)); 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailSetInclusive() { 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet(strings[i], true)).hasContentsInOrder( 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedNumberNames(i, strings.length)); 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailSetExclusive() { 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.tailSet(strings[i], false)).hasContentsInOrder( 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedNumberNames(i + 1, strings.length)); 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubSetExclusiveExclusive() { 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = i; j < strings.length; j++) { 8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet(strings[i], false, strings[j], false)) 8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(sortedNumberNames(Math.min(i + 1, j), j)); 8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubSetInclusiveExclusive() { 8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = i; j < strings.length; j++) { 8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet(strings[i], true, strings[j], false)) 8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(sortedNumberNames(i, j)); 8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubSetExclusiveInclusive() { 8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = i; j < strings.length; j++) { 8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet(strings[i], false, strings[j], true)) 8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(sortedNumberNames(i + 1, j + 1)); 8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubSetInclusiveInclusive() { 8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] strings = NUMBER_NAMES.toArray(new String[0]); 8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings); 8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.sort(strings); 8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < strings.length; i++) { 8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = i; j < strings.length; j++) { 8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(set.subSet(strings[i], true, strings[j], true)) 9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(sortedNumberNames(i, j + 1)); 9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static String[] sortedNumberNames(int i, int j) { 9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return SORTED_NUMBER_NAMES.subList(i, j).toArray(new String[0]); 9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final ImmutableList<String> NUMBER_NAMES = 9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of("one", "two", "three", "four", "five", "six", "seven"); 9111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final ImmutableList<String> SORTED_NUMBER_NAMES = 9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.natural().immutableSortedCopy(NUMBER_NAMES); 9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 916