/** * */ package cz.cuni.mff.peckam.java.origamist.unused.test; import static org.junit.Assert.assertTrue; import org.junit.Test; import cz.cuni.mff.peckam.java.origamist.unused.utils.Interval; import cz.cuni.mff.peckam.java.origamist.unused.utils.IntervalTree; /** * * * @author Martin Pecka */ public class IntervalTreeTest { @Test public void testTree() { IntervalTree<Double, String> tree = new IntervalTree<Double, String>(); tree.put(new TestInterval(0d, 1d), "a"); tree.put(new TestInterval(1d, 2d), "b"); tree.put(new TestInterval(2d, 3d), "c"); tree.put(new TestInterval(3d, 4d), "d"); tree.put(new TestInterval(4d, 5d), "e"); tree.put(new TestInterval(5d, 6d), "f"); tree.put(new TestInterval(6d, 7d), "g"); tree.put(new TestInterval(7d, 8d), "h"); tree.put(new TestInterval(8d, 9d), "i"); String str; str = tree.intervalGet(new TestInterval(0.5, 0.5)); assertTrue("a".equals(str)); str = tree.intervalGet(new TestInterval(0.75, 0.75)); assertTrue("a".equals(str)); str = tree.intervalGet(new TestInterval(1d, 1d)); assertTrue("a".equals(str) || "b".equals(str)); str = tree.intervalGet(new TestInterval(-0.5, 0.5)); assertTrue("a".equals(str)); str = tree.intervalGet(new TestInterval(-0.5, 0d)); assertTrue("a".equals(str)); str = tree.intervalGet(new TestInterval(2.5, 2.5)); assertTrue("c".equals(str)); str = tree.intervalGet(new TestInterval(4.999, 4.999)); assertTrue("e".equals(str)); str = tree.intervalGet(new TestInterval(9d, 9d)); assertTrue("i".equals(str)); str = tree.intervalGet(new TestInterval(0.5, 5.5)); assertTrue("a".equals(str) || "b".equals(str) || "c".equals(str) || "d".equals(str) || "e".equals(str) || "f".equals(str)); str = tree.intervalGet(new TestInterval(-0.5, -0.5)); assertTrue(str == null); str = tree.intervalGet(new TestInterval(9.5, 9.5)); assertTrue(str == null); tree.remove(new TestInterval(2d, 3d)); tree.remove(new TestInterval(4d, 5d)); tree.remove(new TestInterval(5d, 6d)); tree.remove(new TestInterval(8d, 9d)); str = tree.intervalGet(new TestInterval(2d, 3d)); assertTrue("b".equals(str) || "d".equals(str)); str = tree.intervalGet(new TestInterval(2d, 2d)); assertTrue("b".equals(str)); str = tree.intervalGet(new TestInterval(3d, 3d)); assertTrue("d".equals(str)); str = tree.intervalGet(new TestInterval(4d, 4d)); assertTrue("d".equals(str)); str = tree.intervalGet(new TestInterval(3.5d, 5.5d)); assertTrue("d".equals(str)); str = tree.intervalGet(new TestInterval(7.2d, 10d)); assertTrue("h".equals(str)); str = tree.intervalGet(new TestInterval(2.5, 2.5)); assertTrue(str == null); str = tree.intervalGet(new TestInterval(5d, 5d)); assertTrue(str == null); str = tree.intervalGet(new TestInterval(4.5, 5.5)); assertTrue(str == null); str = tree.intervalGet(new TestInterval(8.05, 8.05)); assertTrue(str == null); } public static void main(String[] args) { new IntervalTreeTest().testTree(); } class TestInterval implements Interval<Double> { protected Double min; protected Double max; /** * @param min * @param max */ public TestInterval(Double min, Double max) { this.min = min; this.max = max; } /** * @return the min */ @Override public Double getMin() { return min; } /** * @return the max */ @Override public Double getMax() { return max; } @Override public boolean overlapsWith(Interval<Double> other) { return (other.getMin() >= min && other.getMin() <= max) || (other.getMax() >= min && other.getMax() <= max) || (min >= other.getMin() && min <= other.getMax()) || (max >= other.getMin() && max <= other.getMax()); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + ((max == null) ? 0 : max.hashCode()); result = prime * result + ((min == null) ? 0 : min.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; TestInterval other = (TestInterval) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (max == null) { if (other.max != null) return false; } else if (!max.equals(other.max)) return false; if (min == null) { if (other.min != null) return false; } else if (!min.equals(other.min)) return false; return true; } private IntervalTreeTest getOuterType() { return IntervalTreeTest.this; } @Override public String toString() { return "[min=" + min + ", max=" + max + "]"; } } }