11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * in compliance with the License. You may obtain a copy of the License at
67dd252788645e940eada959bdde927426e2531c9Paul Duffin *
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
87dd252788645e940eada959bdde927426e2531c9Paul Duffin *
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software distributed under the
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * express or implied. See the License for the specific language governing permissions and
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect;
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BoundType.CLOSED;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BoundType.OPEN;
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Objects;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
250888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase;
260888a09821a98ac0680fad765217302858e70fa4Paul Duffin
277dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Arrays;
287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.List;
297dd252788645e940eada959bdde927426e2531c9Paul Duffin
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code GeneralRange}.
327dd252788645e940eada959bdde927426e2531c9Paul Duffin *
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true)
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class GeneralRangeTest extends TestCase {
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final Ordering<Integer> ORDERING = Ordering.natural().nullsFirst();
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final List<Integer> IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5);
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCreateEmptyRangeFails() {
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BoundType lboundType : BoundType.values()) {
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (BoundType uboundType : BoundType.values()) {
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        try {
457dd252788645e940eada959bdde927426e2531c9Paul Duffin          GeneralRange.range(ORDERING, 4, lboundType, 2, uboundType);
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          fail("Expected IAE");
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        } catch (IllegalArgumentException expected) {}
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCreateEmptyRangeOpenOpenFails() {
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (Integer i : IN_ORDER_VALUES) {
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      try {
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        GeneralRange.range(ORDERING, i, OPEN, i, OPEN);
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        fail("Expected IAE");
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      } catch (IllegalArgumentException expected) {}
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCreateEmptyRangeClosedOpenSucceeds() {
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (Integer i : IN_ORDER_VALUES) {
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      GeneralRange<Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, OPEN);
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (Integer j : IN_ORDER_VALUES) {
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertFalse(range.contains(j));
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCreateEmptyRangeOpenClosedSucceeds() {
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (Integer i : IN_ORDER_VALUES) {
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      GeneralRange<Integer> range = GeneralRange.range(ORDERING, i, OPEN, i, CLOSED);
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (Integer j : IN_ORDER_VALUES) {
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertFalse(range.contains(j));
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCreateSingletonRangeSucceeds() {
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (Integer i : IN_ORDER_VALUES) {
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      GeneralRange<Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, CLOSED);
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (Integer j : IN_ORDER_VALUES) {
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(Objects.equal(i, j), range.contains(j));
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSingletonRange() {
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 3, CLOSED, 3, CLOSED);
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (Integer i : IN_ORDER_VALUES) {
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(ORDERING.compare(i, 3) == 0, range.contains(i));
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testLowerRange() {
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BoundType lBoundType : BoundType.values()) {
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      GeneralRange<Integer> range = GeneralRange.downTo(ORDERING, 3, lBoundType);
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (Integer i : IN_ORDER_VALUES) {
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(ORDERING.compare(i, 3) > 0
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), range.contains(i));
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(ORDERING.compare(i, 3) < 0
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            || (ORDERING.compare(i, 3) == 0 && lBoundType == OPEN), range.tooLow(i));
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertFalse(range.tooHigh(i));
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testUpperRange() {
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BoundType lBoundType : BoundType.values()) {
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      GeneralRange<Integer> range = GeneralRange.upTo(ORDERING, 3, lBoundType);
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (Integer i : IN_ORDER_VALUES) {
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(ORDERING.compare(i, 3) < 0
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), range.contains(i));
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(ORDERING.compare(i, 3) > 0
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            || (ORDERING.compare(i, 3) == 0 && lBoundType == OPEN), range.tooHigh(i));
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertFalse(range.tooLow(i));
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testDoublyBoundedAgainstRange() {
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BoundType lboundType : BoundType.values()) {
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (BoundType uboundType : BoundType.values()) {
1247dd252788645e940eada959bdde927426e2531c9Paul Duffin        Range<Integer> range = Range.range(2, lboundType, 4, uboundType);
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        GeneralRange<Integer> gRange = GeneralRange.range(ORDERING, 2, lboundType, 4, uboundType);
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        for (Integer i : IN_ORDER_VALUES) {
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          assertEquals(i != null && range.contains(i), gRange.contains(i));
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIntersectAgainstMatchingEndpointsRange() {
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN);
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN),
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, 2, OPEN, 4, CLOSED)));
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIntersectAgainstBiggerRange() {
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN);
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN),
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, null, OPEN, 5, CLOSED)));
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN),
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, 2, OPEN, 5, CLOSED)));
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN),
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, 1, OPEN, 4, OPEN)));
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIntersectAgainstSmallerRange() {
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN);
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 3, CLOSED, 4, OPEN),
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, 3, CLOSED, 4, CLOSED)));
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIntersectOverlappingRange() {
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, OPEN, 4, CLOSED);
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 3, CLOSED, 4, CLOSED),
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, 3, CLOSED, 5, CLOSED)));
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING, 2, OPEN, 3, OPEN),
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        range.intersect(GeneralRange.range(ORDERING, 1, OPEN, 3, OPEN)));
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIntersectNonOverlappingRange() {
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, OPEN, 4, CLOSED);
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(range.intersect(GeneralRange.range(ORDERING, 5, CLOSED, 6, CLOSED)).isEmpty());
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(range.intersect(GeneralRange.range(ORDERING, 1, OPEN, 2, OPEN)).isEmpty());
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testFromRangeAll() {
1737dd252788645e940eada959bdde927426e2531c9Paul Duffin    assertEquals(GeneralRange.all(Ordering.natural()), GeneralRange.from(Range.all()));
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testFromRangeOneEnd() {
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BoundType endpointType : BoundType.values()) {
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(GeneralRange.upTo(Ordering.natural(), 3, endpointType),
1797dd252788645e940eada959bdde927426e2531c9Paul Duffin          GeneralRange.from(Range.upTo(3, endpointType)));
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(GeneralRange.downTo(Ordering.natural(), 3, endpointType),
1827dd252788645e940eada959bdde927426e2531c9Paul Duffin          GeneralRange.from(Range.downTo(3, endpointType)));
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testFromRangeTwoEnds() {
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BoundType lowerType : BoundType.values()) {
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (BoundType upperType : BoundType.values()) {
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(GeneralRange.range(Ordering.natural(), 3, lowerType, 4, upperType),
1907dd252788645e940eada959bdde927426e2531c9Paul Duffin            GeneralRange.from(Range.range(3, lowerType, 4, upperType)));
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testReverse() {
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.all(ORDERING.reverse()), GeneralRange.all(ORDERING).reverse());
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.downTo(ORDERING.reverse(), 3, CLOSED),
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        GeneralRange.upTo(ORDERING, 3, CLOSED).reverse());
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.upTo(ORDERING.reverse(), 3, OPEN),
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        GeneralRange.downTo(ORDERING, 3, OPEN).reverse());
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(GeneralRange.range(ORDERING.reverse(), 5, OPEN, 3, CLOSED),
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        GeneralRange.range(ORDERING, 3, CLOSED, 5, OPEN).reverse());
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("NullPointerTester")
2067dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testNullPointers() {
2077dd252788645e940eada959bdde927426e2531c9Paul Duffin    new NullPointerTester().testAllPublicStaticMethods(GeneralRange.class);
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
210