33import static org .assertj .core .api .Assertions .assertThat ;
44
55import java .util .ArrayList ;
6+ import java .util .Collection ;
67import java .util .HashMap ;
78import java .util .List ;
89import java .util .Map ;
@@ -67,6 +68,10 @@ private ConnectedRangeTracker<TestRange, Integer, Integer> getIntegerConnectedRa
6768 return new ConnectedRangeTracker <>(TestRange ::getStart , TestRange ::getEnd , (a , b ) -> b - a );
6869 }
6970
71+ static int rangeMaxFunction (Collection <? super TestRange > ranges , int length ) {
72+ return 100 * ranges .size () / length ;
73+ }
74+
7075 @ Test
7176 void testNonConsecutiveRanges () {
7277 ConnectedRangeTracker <TestRange , Integer , Integer > tree = getIntegerConnectedRangeTracker ();
@@ -96,6 +101,10 @@ void testNonConsecutiveRanges() {
96101 assertThat (connectedRangeList .get (2 ).getMinimumOverlap ()).isEqualTo (1 );
97102 assertThat (connectedRangeList .get (2 ).getMaximumOverlap ()).isEqualTo (1 );
98103
104+ assertThat (connectedRangeList .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
105+ assertThat (connectedRangeList .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
106+ .isEqualTo (50 );
107+
99108 verifyGaps (tree );
100109 }
101110
@@ -116,6 +125,13 @@ void testConsecutiveRanges() {
116125 assertThat (connectedRangeList .get (0 )).containsExactly (new TestRange (0 , 2 ), new TestRange (2 , 4 ), new TestRange (4 , 7 ));
117126 assertThat (connectedRangeList .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
118127 assertThat (connectedRangeList .get (0 ).getMaximumOverlap ()).isEqualTo (1 );
128+ assertThat (connectedRangeList .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
129+ assertThat (connectedRangeList .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
130+ .isEqualTo (50 );
131+
132+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (1 );
133+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (50 );
134+
119135 verifyGaps (tree );
120136 }
121137
@@ -135,9 +151,19 @@ void testDuplicateRanges() {
135151 assertThat (connectedRangeList .get (0 )).containsExactly (a .getValue (), a .getValue ());
136152 assertThat (connectedRangeList .get (0 ).getMinimumOverlap ()).isEqualTo (2 );
137153 assertThat (connectedRangeList .get (0 ).getMaximumOverlap ()).isEqualTo (2 );
154+ assertThat (connectedRangeList .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
155+ assertThat (connectedRangeList .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
156+ .isEqualTo (100 );
138157 assertThat (connectedRangeList .get (1 )).containsExactly (b .getValue ());
139158 assertThat (connectedRangeList .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
140159 assertThat (connectedRangeList .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
160+ assertThat (connectedRangeList .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
161+ assertThat (connectedRangeList .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
162+ .isEqualTo (33 );
163+
164+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (2 );
165+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
166+
141167 verifyGaps (tree );
142168 }
143169
@@ -221,16 +247,25 @@ void testOverlappingRange() {
221247 assertThat (connectedRanges .get (0 ).hasOverlap ()).isTrue ();
222248 assertThat (connectedRanges .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
223249 assertThat (connectedRanges .get (0 ).getMaximumOverlap ()).isEqualTo (2 );
250+ assertThat (connectedRanges .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
251+ assertThat (connectedRanges .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (200 );
224252
225253 assertThat (connectedRanges .get (1 )).containsExactly (d .getValue ());
226254 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
227255 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
228256 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
257+ assertThat (connectedRanges .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
258+ assertThat (connectedRanges .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
229259
230260 assertThat (connectedRanges .get (2 )).containsExactly (e .getValue (), removedTestRange2 );
231261 assertThat (connectedRanges .get (2 ).hasOverlap ()).isTrue ();
232262 assertThat (connectedRanges .get (2 ).getMinimumOverlap ()).isEqualTo (2 );
233263 assertThat (connectedRanges .get (2 ).getMaximumOverlap ()).isEqualTo (2 );
264+ assertThat (connectedRanges .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
265+ assertThat (connectedRanges .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
266+
267+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (2 );
268+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (200 );
234269
235270 verifyGaps (tree );
236271
@@ -247,16 +282,26 @@ void testOverlappingRange() {
247282 assertThat (connectedRanges .get (0 ).hasOverlap ()).isFalse ();
248283 assertThat (connectedRanges .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
249284 assertThat (connectedRanges .get (0 ).getMaximumOverlap ()).isEqualTo (1 );
285+ assertThat (connectedRanges .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
286+ assertThat (connectedRanges .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
250287
251288 assertThat (connectedRanges .get (1 )).containsExactly (d .getValue ());
252289 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
253290 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
254291 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
292+ assertThat (connectedRanges .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
293+ assertThat (connectedRanges .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
255294
256295 assertThat (connectedRanges .get (2 )).containsExactly (e .getValue (), removedTestRange2 );
257296 assertThat (connectedRanges .get (2 ).hasOverlap ()).isTrue ();
258297 assertThat (connectedRanges .get (2 ).getMinimumOverlap ()).isEqualTo (2 );
259298 assertThat (connectedRanges .get (2 ).getMaximumOverlap ()).isEqualTo (2 );
299+ assertThat (connectedRanges .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
300+ assertThat (connectedRanges .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
301+
302+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (2 );
303+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
304+
260305
261306 verifyGaps (tree );
262307
@@ -272,16 +317,25 @@ void testOverlappingRange() {
272317 assertThat (connectedRanges .get (0 ).hasOverlap ()).isFalse ();
273318 assertThat (connectedRanges .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
274319 assertThat (connectedRanges .get (0 ).getMaximumOverlap ()).isEqualTo (1 );
320+ assertThat (connectedRanges .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
321+ assertThat (connectedRanges .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
275322
276323 assertThat (connectedRanges .get (1 )).containsExactly (d .getValue ());
277324 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
278325 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
279326 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
327+ assertThat (connectedRanges .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
328+ assertThat (connectedRanges .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
280329
281330 assertThat (connectedRanges .get (2 )).containsExactly (e .getValue ());
282331 assertThat (connectedRanges .get (2 ).hasOverlap ()).isFalse ();
283332 assertThat (connectedRanges .get (2 ).getMinimumOverlap ()).isEqualTo (1 );
284333 assertThat (connectedRanges .get (2 ).getMaximumOverlap ()).isEqualTo (1 );
334+ assertThat (connectedRanges .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
335+ assertThat (connectedRanges .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (50 );
336+
337+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (1 );
338+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
285339
286340 verifyGaps (tree );
287341 Range <TestRange , Integer > g = tree .getRange (new TestRange (6 , 7 ));
@@ -298,6 +352,9 @@ void testOverlappingRange() {
298352 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
299353 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
300354 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
355+
356+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (1 );
357+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction )).isEqualTo (100 );
301358 }
302359
303360 void verifyGaps (ConnectedRangeTracker <TestRange , Integer , Integer > tree ) {
0 commit comments