11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 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 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 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 Bringertimport static com.google.common.collect.BstSide.LEFT; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstSide.RIGHT; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.assertInOrderTraversalIs; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.balancePolicy; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.countAggregate; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.defaultNullPointerTester; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.nodeFactory; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.pathFactory; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BstTesting.pathToList; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.BstTesting.SimpleNode; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code BSTRangeOps}. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class BstRangeOpsTest extends TestCase { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final SortedSet<Character> MODEL = 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedSet.of('a', 'b', 'c', 'd', 'e', 'f', 'g'); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final SimpleNode ROOT; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static { 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode a = new SimpleNode('a', null, null); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', a, c); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ROOT = d; 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountInRangeLowerBound() { 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (char c : "abcdefg".toCharArray()) { 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (BoundType type : BoundType.values()) { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long count = BstRangeOps.totalInRange( 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert countAggregate, GeneralRange.downTo(Ordering.natural(), c, type), ROOT); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert char d = c; 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (type == BoundType.OPEN) { 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert d++; 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(MODEL.tailSet(d).size(), count); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountInRangeUpperBound() { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (char c : "abcdefg".toCharArray()) { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (BoundType type : BoundType.values()) { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long count = BstRangeOps.totalInRange( 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert countAggregate, GeneralRange.upTo(Ordering.natural(), c, type), ROOT); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert char d = c; 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (type == BoundType.CLOSED) { 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert d++; 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(MODEL.headSet(d).size(), count); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountInRangeBothBounds() { 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String chars = "abcdefg"; 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < chars.length(); i++) { 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (BoundType lb : BoundType.values()) { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = i; j < chars.length(); j++) { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (BoundType ub : BoundType.values()) { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (i == j && lb == BoundType.OPEN && ub == BoundType.OPEN) { 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert continue; 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long count = BstRangeOps.totalInRange(countAggregate, GeneralRange.range( 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.natural(), chars.charAt(i), lb, chars.charAt(j), ub), ROOT); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert char lo = chars.charAt(i); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (lb == BoundType.OPEN) { 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert lo++; 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert char hi = chars.charAt(j); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (ub == BoundType.CLOSED) { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hi++; 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (lo > hi) { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert lo = hi; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(MODEL.subSet(lo, hi).size(), count); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountInRangeAll() { 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(MODEL.size(), BstRangeOps.totalInRange( 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert countAggregate, GeneralRange.<Character>all(Ordering.natural()), ROOT)); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountInRangeEmpty() { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode empty = null; 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range = GeneralRange.all(Ordering.natural()); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, BstRangeOps.totalInRange(countAggregate, range, empty)); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearRangeLowerBound() { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / / \ 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // a e g 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode a = new SimpleNode('a', null, null); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', a, null); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertInOrderTraversalIs(d, "abdefg"); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.downTo(Ordering.natural(), 'f', CLOSED); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range1, "abde"); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = GeneralRange.downTo(Ordering.natural(), 'f', OPEN); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range2, "abdef"); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range3 = GeneralRange.downTo(Ordering.natural(), 'a', CLOSED); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range3, ""); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range4 = GeneralRange.downTo(Ordering.natural(), 'a', OPEN); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range4, "a"); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range5 = GeneralRange.downTo(Ordering.natural(), 'c', OPEN); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range5, "ab"); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range6 = GeneralRange.downTo(Ordering.natural(), 'c', CLOSED); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range6, "ab"); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearRangeUpperBound() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / / \ 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // a e g 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode a = new SimpleNode('a', null, null); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', a, null); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertInOrderTraversalIs(d, "abdefg"); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.upTo(Ordering.natural(), 'f', CLOSED); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range1, "g"); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = GeneralRange.upTo(Ordering.natural(), 'f', OPEN); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range2, "fg"); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range3 = GeneralRange.upTo(Ordering.natural(), 'a', CLOSED); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range3, "bdefg"); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range4 = GeneralRange.upTo(Ordering.natural(), 'a', OPEN); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range4, "abdefg"); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range5 = GeneralRange.upTo(Ordering.natural(), 'c', OPEN); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range5, "defg"); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range6 = GeneralRange.upTo(Ordering.natural(), 'c', CLOSED); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range6, "defg"); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearRangeDoublyBounded() { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ / \ 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // a c e g 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode a = new SimpleNode('a', null, null); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', a, c); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange.range(Ordering.natural(), 'c', OPEN, 'f', CLOSED); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range1, "abcg"); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange.range(Ordering.natural(), 'a', CLOSED, 'h', OPEN); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, range2, ""); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearRangeAll() { 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ / \ 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // a c e g 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode a = new SimpleNode('a', null, null); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', a, c); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testTraversalAfterClearingRangeIs(d, GeneralRange.<Character>all(Ordering.natural()), ""); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void testTraversalAfterClearingRangeIs( 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d, GeneralRange<Character> range, String expected) { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertInOrderTraversalIs( 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BstRangeOps.minusRange(range, balancePolicy, nodeFactory, d), expected); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLeftmostPathAll() { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // \ / \ 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // c e g 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', null, c); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.all(Ordering.natural()); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, LEFT, pathFactory, d))) 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(b, d); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(BstRangeOps.furthestPath(range1, LEFT, pathFactory, null)); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLeftmostPathDownTo() { 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // \ / \ 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // c e g 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', null, c); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.downTo(Ordering.natural(), 'd', OPEN); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, LEFT, pathFactory, d))) 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(e, f, d); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = GeneralRange.downTo(Ordering.natural(), 'd', CLOSED); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, LEFT, pathFactory, d))) 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(d); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range3 = GeneralRange.downTo(Ordering.natural(), 'a', CLOSED); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range3, LEFT, pathFactory, d))) 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(b, d); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range4 = GeneralRange.downTo(Ordering.natural(), 'h', CLOSED); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(BstRangeOps.furthestPath(range4, LEFT, pathFactory, d)); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLeftmostPathUpTo() { 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // \ / \ 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // c e g 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', null, c); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.upTo(Ordering.natural(), 'd', OPEN); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, LEFT, pathFactory, d))) 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(b, d); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = GeneralRange.upTo(Ordering.natural(), 'd', CLOSED); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, LEFT, pathFactory, d))) 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(b, d); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range3 = GeneralRange.upTo(Ordering.natural(), 'a', CLOSED); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(BstRangeOps.furthestPath(range3, LEFT, pathFactory, d)); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRightmostPathAll() { 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // \ / \ 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // c e g 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', null, c); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.all(Ordering.natural()); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, d))) 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(g, f, d); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, null)); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRightmostPathDownTo() { 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // \ / \ 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // c e g 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', null, c); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.downTo(Ordering.natural(), 'd', OPEN); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, d))) 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(g, f, d); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = GeneralRange.downTo(Ordering.natural(), 'd', CLOSED); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, RIGHT, pathFactory, d))) 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(g, f, d); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range3 = GeneralRange.downTo(Ordering.natural(), 'a', CLOSED); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range3, RIGHT, pathFactory, d))) 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(g, f, d); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range4 = GeneralRange.downTo(Ordering.natural(), 'h', CLOSED); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(BstRangeOps.furthestPath(range4, RIGHT, pathFactory, d)); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRightmostPathUpTo() { 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // d 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // / \ 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // b f 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // \ / \ 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // c e g 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode c = new SimpleNode('c', null, null); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode b = new SimpleNode('b', null, c); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode e = new SimpleNode('e', null, null); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode g = new SimpleNode('g', null, null); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode f = new SimpleNode('f', e, g); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SimpleNode d = new SimpleNode('d', b, f); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range1 = GeneralRange.upTo(Ordering.natural(), 'd', OPEN); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, d))) 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(c, b, d); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range2 = GeneralRange.upTo(Ordering.natural(), 'd', CLOSED); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, RIGHT, pathFactory, d))) 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(d); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range3 = GeneralRange.upTo(Ordering.natural(), 'a', CLOSED); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(BstRangeOps.furthestPath(range3, RIGHT, pathFactory, d)); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert GeneralRange<Character> range4 = GeneralRange.upTo(Ordering.natural(), 'h', CLOSED); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(pathToList(BstRangeOps.furthestPath(range4, RIGHT, pathFactory, d))) 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(g, f, d); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointers() throws Exception { 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert defaultNullPointerTester().testAllPublicStaticMethods(BstRangeOps.class); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 398