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