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 com.google.common.collect.BoundType.CLOSED; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BoundType.OPEN; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.DiscreteDomains.integers; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.testing.SerializableTester.reserializeAndAssert; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Predicate; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.Helpers; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link Range}. 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class RangeTest extends TestCase { 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOpen() { 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.open(4, 8); 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkContains(range); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.lowerEndpoint()); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.lowerBoundType()); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(8, (int) range.upperEndpoint()); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.upperBoundType()); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(4\u20258)", range.toString()); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOpen_invalid() { 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.open(4, 3); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.open(3, 3); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClosed() { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(5, 7); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkContains(range); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, (int) range.lowerEndpoint()); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.lowerBoundType()); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, (int) range.upperEndpoint()); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.upperBoundType()); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[5\u20257]", range.toString()); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClosed_invalid() { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.closed(4, 3); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOpenClosed() { 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.openClosed(4, 7); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkContains(range); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.lowerEndpoint()); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.lowerBoundType()); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, (int) range.upperEndpoint()); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.upperBoundType()); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(4\u20257]", range.toString()); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClosedOpen() { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closedOpen(5, 8); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkContains(range); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, (int) range.lowerEndpoint()); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.lowerBoundType()); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(8, (int) range.upperEndpoint()); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.upperBoundType()); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[5\u20258)", range.toString()); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsConnected() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Ranges.closed(3, 5).isConnected(Ranges.open(5, 6))); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Ranges.closed(3, 5).isConnected(Ranges.openClosed(5, 5))); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Ranges.open(3, 5).isConnected(Ranges.closed(5, 6))); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Ranges.closed(3, 7).isConnected(Ranges.open(6, 8))); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Ranges.open(3, 7).isConnected(Ranges.closed(5, 6))); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Ranges.closed(3, 5).isConnected(Ranges.closed(7, 8))); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Ranges.closed(3, 5).isConnected(Ranges.closedOpen(7, 7))); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void checkContains(Range<Integer> range) { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(4)); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(5)); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(7)); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(8)); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingleton() { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(4, 4); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(3)); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(4)); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.lowerEndpoint()); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.lowerBoundType()); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.upperEndpoint()); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.upperBoundType()); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[4\u20254]", range.toString()); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty1() { 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closedOpen(4, 4); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(3)); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(4)); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.lowerEndpoint()); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.lowerBoundType()); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.upperEndpoint()); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.upperBoundType()); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.isEmpty()); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[4\u20254)", range.toString()); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty2() { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.openClosed(4, 4); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(3)); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(4)); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.lowerEndpoint()); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.lowerBoundType()); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.upperEndpoint()); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.upperBoundType()); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.isEmpty()); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(4\u20254]", range.toString()); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLessThan() { 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.lessThan(5); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(Integer.MIN_VALUE)); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(4)); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertUnboundedBelow(range); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, (int) range.upperEndpoint()); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.upperBoundType()); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(-\u221e\u20255)", range.toString()); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGreaterThan() { 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.greaterThan(5); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(6)); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(Integer.MAX_VALUE)); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, (int) range.lowerEndpoint()); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(OPEN, range.lowerBoundType()); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertUnboundedAbove(range); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(5\u2025+\u221e)", range.toString()); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAtLeast() { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.atLeast(6); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(6)); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(Integer.MAX_VALUE)); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasLowerBound()); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(6, (int) range.lowerEndpoint()); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.lowerBoundType()); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertUnboundedAbove(range); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[6\u2025+\u221e)", range.toString()); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAtMost() { 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.atMost(4); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(Integer.MIN_VALUE)); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(4)); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.contains(5)); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertUnboundedBelow(range); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.hasUpperBound()); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, (int) range.upperEndpoint()); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(CLOSED, range.upperBoundType()); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(-\u221e\u20254]", range.toString()); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAll() { 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.all(); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(Integer.MIN_VALUE)); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.contains(Integer.MAX_VALUE)); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertUnboundedBelow(range); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertUnboundedAbove(range); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.isEmpty()); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("(-\u221e\u2025+\u221e)", range.toString()); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reserializeAndAssert(range); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertUnboundedBelow(Range<Integer> range) { 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.hasLowerBound()); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.lowerEndpoint(); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.lowerBoundType(); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) { 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertUnboundedAbove(Range<Integer> range) { 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.hasUpperBound()); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.upperEndpoint(); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) { 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.upperBoundType(); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) { 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderingCuts() { 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cut<Integer> a = Ranges.lessThan(0).lowerBound; 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cut<Integer> b = Ranges.atLeast(0).lowerBound; 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cut<Integer> c = Ranges.greaterThan(0).lowerBound; 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cut<Integer> d = Ranges.atLeast(1).lowerBound; 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cut<Integer> e = Ranges.greaterThan(1).lowerBound; 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cut<Integer> f = Ranges.greaterThan(1).upperBound; 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Helpers.testCompareToAndEquals(ImmutableList.of(a, b, c, d, e, f)); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAll() { 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(3, 5); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.containsAll(asList(3, 3, 4, 5))); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.containsAll(asList(3, 3, 4, 5, 6))); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // We happen to know that natural-order sorted sets use a different code 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // path, so we test that separately 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.containsAll(ImmutableSortedSet.of(3, 3, 4, 5))); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.containsAll(ImmutableSortedSet.of(3))); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.containsAll(ImmutableSortedSet.<Integer>of())); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.containsAll(ImmutableSortedSet.of(3, 3, 4, 5, 6))); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Ranges.openClosed(3, 3).containsAll( 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.<Integer>emptySet())); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEncloses_open() { 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.open(2, 5); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(range)); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.open(2, 4))); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.open(3, 5))); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.closed(3, 4))); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.openClosed(2, 5))); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.closedOpen(2, 5))); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.closed(1, 4))); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.closed(3, 6))); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.greaterThan(3))); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.lessThan(3))); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.atLeast(3))); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.atMost(3))); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.<Integer>all())); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEncloses_closed() { 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(2, 5); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(range)); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.open(2, 5))); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.openClosed(2, 5))); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.closedOpen(2, 5))); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.closed(3, 5))); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(range.encloses(Ranges.closed(2, 4))); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.open(1, 6))); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.greaterThan(3))); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.lessThan(3))); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.atLeast(3))); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.atMost(3))); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(range.encloses(Ranges.<Integer>all())); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntersection_empty() { 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closedOpen(3, 3); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(range)); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.open(3, 5)); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.closed(0, 2)); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntersection_deFactoEmpty() { 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.open(3, 4); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(range)); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.openClosed(3, 3), 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.atMost(3))); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(4, 4), 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.atLeast(4))); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.lessThan(3)); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.greaterThan(4)); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range = Ranges.closed(3, 4); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.openClosed(4, 4), 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.greaterThan(4))); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntersection_singleton() { 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(3, 3); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(range)); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.atMost(4))); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.atMost(3))); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.atLeast(3))); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.atLeast(2))); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(3, 3), 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.lessThan(3))); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.openClosed(3, 3), 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.greaterThan(3))); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.atLeast(4)); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.atMost(2)); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntersection_general() { 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(4, 8); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // separate below 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.closed(0, 2)); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // adjacent below 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(4, 4), 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.closedOpen(2, 4))); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // overlap below 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(4, 6), range.intersection(Ranges.closed(2, 6))); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosed with same start 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(4, 6), range.intersection(Ranges.closed(4, 6))); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosed, interior 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(5, 7), range.intersection(Ranges.closed(5, 7))); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosed with same end 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(6, 8), range.intersection(Ranges.closed(6, 8))); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // equal 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(range)); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosing with same start 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.closed(4, 10))); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosing with same end 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.closed(2, 8))); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosing, exterior 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.intersection(Ranges.closed(2, 10))); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // overlap above 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(6, 8), range.intersection(Ranges.closed(6, 10))); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // adjacent above 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.openClosed(8, 8), 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.openClosed(8, 10))); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // separate above 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.intersection(Ranges.closed(10, 12)); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSpan_general() { 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.closed(4, 8); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // separate below 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(0, 8), range.span(Ranges.closed(0, 2))); 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atMost(8), range.span(Ranges.atMost(2))); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // adjacent below 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(2, 8), range.span(Ranges.closedOpen(2, 4))); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atMost(8), range.span(Ranges.lessThan(4))); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // overlap below 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(2, 8), range.span(Ranges.closed(2, 6))); 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atMost(8), range.span(Ranges.atMost(6))); 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosed with same start 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.span(Ranges.closed(4, 6))); 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosed, interior 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.span(Ranges.closed(5, 7))); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosed with same end 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.span(Ranges.closed(6, 8))); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // equal 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(range, range.span(range)); 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosing with same start 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(4, 10), range.span(Ranges.closed(4, 10))); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(4), range.span(Ranges.atLeast(4))); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosing with same end 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(2, 8), range.span(Ranges.closed(2, 8))); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atMost(8), range.span(Ranges.atMost(8))); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // enclosing, exterior 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(2, 10), range.span(Ranges.closed(2, 10))); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.<Integer>all(), range.span(Ranges.<Integer>all())); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // overlap above 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(4, 10), range.span(Ranges.closed(6, 10))); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(4), range.span(Ranges.atLeast(6))); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // adjacent above 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(4, 10), range.span(Ranges.openClosed(8, 10))); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(4), range.span(Ranges.greaterThan(8))); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // separate above 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closed(4, 12), range.span(Ranges.closed(10, 12))); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(4), range.span(Ranges.atLeast(10))); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testApply() { 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<Integer> predicate = Ranges.closed(2, 3); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(predicate.apply(1)); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(predicate.apply(2)); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(predicate.apply(3)); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(predicate.apply(4)); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals() { 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Ranges.open(1, 5), 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.range(1, OPEN, 5, OPEN)) 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Ranges.greaterThan(2), Ranges.greaterThan(2)) 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Ranges.all(), Ranges.all()) 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup("Phil") 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLegacyComparable() { 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<LegacyComparable> range 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Ranges.closed(LegacyComparable.X, LegacyComparable.Y); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final DiscreteDomain<Integer> UNBOUNDED_DOMAIN = 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DiscreteDomain<Integer>() { 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer next(Integer value) { 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return DiscreteDomains.integers().next(value); 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer previous(Integer value) { 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return DiscreteDomains.integers().previous(value); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public long distance(Integer start, Integer end) { 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return DiscreteDomains.integers().distance(start, end); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsSet_noMin() { 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.lessThan(0); 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.asSet(UNBOUNDED_DOMAIN); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsSet_noMax() { 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Range<Integer> range = Ranges.greaterThan(0); 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert range.asSet(UNBOUNDED_DOMAIN); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsSet_empty() { 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(), Ranges.closedOpen(1, 1).asSet(integers())); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(), Ranges.openClosed(5, 5).asSet(integers())); 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(), Ranges.lessThan(Integer.MIN_VALUE).asSet(integers())); 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(), Ranges.greaterThan(Integer.MAX_VALUE).asSet(integers())); 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCanonical() { 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(1, 5), 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.closed(1, 4).canonical(integers())); 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(1, 5), 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.open(0, 5).canonical(integers())); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(1, 5), 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.closedOpen(1, 5).canonical(integers())); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(1, 5), 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.openClosed(0, 4).canonical(integers())); 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(Integer.MIN_VALUE, 0), 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.closedOpen(Integer.MIN_VALUE, 0).canonical(integers())); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(Integer.MIN_VALUE, 0), 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.lessThan(0).canonical(integers())); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.closedOpen(Integer.MIN_VALUE, 1), 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ranges.atMost(0).canonical(integers())); 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(0), Ranges.atLeast(0).canonical(integers())); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(1), Ranges.greaterThan(0).canonical(integers())); 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(Integer.MIN_VALUE), Ranges.<Integer>all().canonical(integers())); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCanonical_unboundedDomain() { 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.lessThan(0), Ranges.lessThan(0).canonical(UNBOUNDED_DOMAIN)); 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.lessThan(1), Ranges.atMost(0).canonical(UNBOUNDED_DOMAIN)); 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(0), Ranges.atLeast(0).canonical(UNBOUNDED_DOMAIN)); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.atLeast(1), Ranges.greaterThan(0).canonical(UNBOUNDED_DOMAIN)); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ranges.all(), Ranges.<Integer>all().canonical(UNBOUNDED_DOMAIN)); 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 605