package com.revolsys.collection.set; import org.junit.Assert; import org.junit.Test; import com.revolsys.collection.range.IntMinMax; public class MinMaxTest { private void assertMinMaxClip(final int min1, final int max1, final int min2, final int max2, final Integer expectedMin, final Integer expectedMax) { final IntMinMax minMax1 = new IntMinMax(min1, max1); final IntMinMax minMax2 = new IntMinMax(min2, max2); final IntMinMax expected; if (expectedMin == null) { expected = new IntMinMax(); } else { expected = new IntMinMax(expectedMin, expectedMax); } final IntMinMax actual1 = minMax1.clip(minMax2); Assert.assertEquals(minMax1 + " clip" + minMax2, expected, actual1); final IntMinMax actual2 = minMax2.clip(minMax1); Assert.assertEquals(minMax2 + " clip" + minMax1, expected, actual2); } private void assertMinMaxContains(final int min1, final int max1, final int min2, final int max2, final boolean expected) { final IntMinMax minMax1 = new IntMinMax(min1, max1); final IntMinMax minMax2 = new IntMinMax(min2, max2); final boolean actual = minMax1.contains(minMax2); Assert.assertEquals(minMax1 + " contains" + minMax2, expected, actual); } private void assertMinMaxOverlaps(final int min1, final int max1, final int min2, final int max2, final boolean expected) { final IntMinMax minMax1 = new IntMinMax(min1, max1); final IntMinMax minMax2 = new IntMinMax(min2, max2); final boolean actual1 = minMax1.overlaps(minMax2); Assert.assertEquals(minMax1 + " overlaps" + minMax2, expected, actual1); final boolean actual2 = minMax2.overlaps(minMax1); Assert.assertEquals(minMax2 + " overlaps" + minMax1, expected, actual2); } @Test public void testMinMaxClip() { assertMinMaxClip(0, 0, 1, 1, null, null); assertMinMaxClip(0, 1, 2, 2, null, null); assertMinMaxClip(0, 1, 2, 3, null, null); assertMinMaxClip(0, 1, 1, 2, 1, 1); assertMinMaxClip(0, 1, 1, 1, 1, 1); assertMinMaxClip(1, 1, 1, 1, 1, 1); assertMinMaxClip(1, 2, 1, 1, 1, 1); assertMinMaxClip(1, 2, 1, 2, 1, 2); assertMinMaxClip(1, 4, 1, 4, 1, 4); assertMinMaxClip(1, 4, 1, 3, 1, 3); assertMinMaxClip(1, 4, 2, 3, 2, 3); assertMinMaxClip(1, 4, 2, 4, 2, 4); } @Test public void testMinMaxContains() { assertMinMaxContains(0, 0, 1, 1, false); assertMinMaxContains(0, 1, 1, 2, false); assertMinMaxContains(1, 1, 0, 1, false); assertMinMaxContains(0, 1, 2, 2, false); assertMinMaxContains(2, 2, 0, 1, false); assertMinMaxContains(0, 1, 2, 3, false); assertMinMaxContains(2, 3, 0, 1, false); assertMinMaxContains(0, 1, 1, 1, true); assertMinMaxContains(1, 1, 1, 1, true); assertMinMaxContains(1, 2, 1, 1, true); assertMinMaxContains(1, 2, 1, 2, true); assertMinMaxContains(1, 4, 1, 4, true); assertMinMaxContains(1, 4, 1, 3, true); assertMinMaxContains(1, 4, 2, 3, true); assertMinMaxContains(1, 4, 2, 4, true); } @Test public void testMinMaxOverlaps() { assertMinMaxOverlaps(0, 0, 1, 1, false); assertMinMaxOverlaps(0, 1, 2, 2, false); assertMinMaxOverlaps(0, 1, 2, 3, false); assertMinMaxOverlaps(0, 1, 1, 2, true); assertMinMaxOverlaps(0, 1, 1, 1, true); assertMinMaxOverlaps(1, 1, 1, 1, true); assertMinMaxOverlaps(1, 2, 1, 1, true); assertMinMaxOverlaps(1, 2, 1, 2, true); assertMinMaxOverlaps(1, 4, 1, 4, true); assertMinMaxOverlaps(1, 4, 1, 3, true); assertMinMaxOverlaps(1, 4, 2, 3, true); assertMinMaxOverlaps(1, 4, 2, 4, true); } }