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,14 @@ 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 ))
134+ .isEqualTo (50 );
135+
119136 verifyGaps (tree );
120137 }
121138
@@ -135,9 +152,20 @@ void testDuplicateRanges() {
135152 assertThat (connectedRangeList .get (0 )).containsExactly (a .getValue (), a .getValue ());
136153 assertThat (connectedRangeList .get (0 ).getMinimumOverlap ()).isEqualTo (2 );
137154 assertThat (connectedRangeList .get (0 ).getMaximumOverlap ()).isEqualTo (2 );
155+ assertThat (connectedRangeList .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
156+ assertThat (connectedRangeList .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
157+ .isEqualTo (100 );
138158 assertThat (connectedRangeList .get (1 )).containsExactly (b .getValue ());
139159 assertThat (connectedRangeList .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
140160 assertThat (connectedRangeList .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
161+ assertThat (connectedRangeList .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
162+ assertThat (connectedRangeList .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
163+ .isEqualTo (33 );
164+
165+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (2 );
166+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
167+ .isEqualTo (100 );
168+
141169 verifyGaps (tree );
142170 }
143171
@@ -221,16 +249,29 @@ void testOverlappingRange() {
221249 assertThat (connectedRanges .get (0 ).hasOverlap ()).isTrue ();
222250 assertThat (connectedRanges .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
223251 assertThat (connectedRanges .get (0 ).getMaximumOverlap ()).isEqualTo (2 );
252+ assertThat (connectedRanges .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
253+ assertThat (connectedRanges .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
254+ .isEqualTo (200 );
224255
225256 assertThat (connectedRanges .get (1 )).containsExactly (d .getValue ());
226257 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
227258 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
228259 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
260+ assertThat (connectedRanges .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
261+ assertThat (connectedRanges .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
262+ .isEqualTo (100 );
229263
230264 assertThat (connectedRanges .get (2 )).containsExactly (e .getValue (), removedTestRange2 );
231265 assertThat (connectedRanges .get (2 ).hasOverlap ()).isTrue ();
232266 assertThat (connectedRanges .get (2 ).getMinimumOverlap ()).isEqualTo (2 );
233267 assertThat (connectedRanges .get (2 ).getMaximumOverlap ()).isEqualTo (2 );
268+ assertThat (connectedRanges .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
269+ assertThat (connectedRanges .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
270+ .isEqualTo (100 );
271+
272+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (2 );
273+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
274+ .isEqualTo (200 );
234275
235276 verifyGaps (tree );
236277
@@ -247,16 +288,29 @@ void testOverlappingRange() {
247288 assertThat (connectedRanges .get (0 ).hasOverlap ()).isFalse ();
248289 assertThat (connectedRanges .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
249290 assertThat (connectedRanges .get (0 ).getMaximumOverlap ()).isEqualTo (1 );
291+ assertThat (connectedRanges .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
292+ assertThat (connectedRanges .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
293+ .isEqualTo (100 );
250294
251295 assertThat (connectedRanges .get (1 )).containsExactly (d .getValue ());
252296 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
253297 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
254298 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
299+ assertThat (connectedRanges .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
300+ assertThat (connectedRanges .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
301+ .isEqualTo (100 );
255302
256303 assertThat (connectedRanges .get (2 )).containsExactly (e .getValue (), removedTestRange2 );
257304 assertThat (connectedRanges .get (2 ).hasOverlap ()).isTrue ();
258305 assertThat (connectedRanges .get (2 ).getMinimumOverlap ()).isEqualTo (2 );
259306 assertThat (connectedRanges .get (2 ).getMaximumOverlap ()).isEqualTo (2 );
307+ assertThat (connectedRanges .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (2 );
308+ assertThat (connectedRanges .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
309+ .isEqualTo (100 );
310+
311+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (2 );
312+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
313+ .isEqualTo (100 );
260314
261315 verifyGaps (tree );
262316
@@ -272,16 +326,29 @@ void testOverlappingRange() {
272326 assertThat (connectedRanges .get (0 ).hasOverlap ()).isFalse ();
273327 assertThat (connectedRanges .get (0 ).getMinimumOverlap ()).isEqualTo (1 );
274328 assertThat (connectedRanges .get (0 ).getMaximumOverlap ()).isEqualTo (1 );
329+ assertThat (connectedRanges .get (0 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
330+ assertThat (connectedRanges .get (0 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
331+ .isEqualTo (100 );
275332
276333 assertThat (connectedRanges .get (1 )).containsExactly (d .getValue ());
277334 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
278335 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
279336 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
337+ assertThat (connectedRanges .get (1 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
338+ assertThat (connectedRanges .get (1 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
339+ .isEqualTo (100 );
280340
281341 assertThat (connectedRanges .get (2 )).containsExactly (e .getValue ());
282342 assertThat (connectedRanges .get (2 ).hasOverlap ()).isFalse ();
283343 assertThat (connectedRanges .get (2 ).getMinimumOverlap ()).isEqualTo (1 );
284344 assertThat (connectedRanges .get (2 ).getMaximumOverlap ()).isEqualTo (1 );
345+ assertThat (connectedRanges .get (2 ).getMaximumValue (i -> 1 )).isEqualTo (1 );
346+ assertThat (connectedRanges .get (2 ).getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
347+ .isEqualTo (50 );
348+
349+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (1 );
350+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
351+ .isEqualTo (100 );
285352
286353 verifyGaps (tree );
287354 Range <TestRange , Integer > g = tree .getRange (new TestRange (6 , 7 ));
@@ -298,6 +365,10 @@ void testOverlappingRange() {
298365 assertThat (connectedRanges .get (1 ).hasOverlap ()).isFalse ();
299366 assertThat (connectedRanges .get (1 ).getMinimumOverlap ()).isEqualTo (1 );
300367 assertThat (connectedRanges .get (1 ).getMaximumOverlap ()).isEqualTo (1 );
368+
369+ assertThat (tree .getConnectedRangeChain ().getMaximumValue (i -> 1 )).isEqualTo (1 );
370+ assertThat (tree .getConnectedRangeChain ().getMaximumValueForDistinctRanges (ConnectedRangeTrackerTest ::rangeMaxFunction ))
371+ .isEqualTo (100 );
301372 }
302373
303374 void verifyGaps (ConnectedRangeTracker <TestRange , Integer , Integer > tree ) {
0 commit comments