範囲を扱うクラス(2)
先日のエントリ
範囲を扱うクラス - ttmmrr(@o_tmr)の日記
の続き。
実装側
// Range.java public class Range<T extends Comparable<T>>{ private static final Range.Comp DEFAULT = Range.Comp.EE; private final Range.Comp _comp; private final T _from; private final T _to; public Range(final Range.Comp comp, final T from, final T to){ _comp = null != comp ? comp : DEFAULT; _from = from; _to = to; } public Range(final T from, final T to){ this(DEFAULT, from, to); } public T getFrom() { return _from; } public T getTo() { return _to; } public boolean contains(final T value) { if (null == value) return false; return _comp.contains(this, value); } public static enum Comp { /** ●−● // from<=value<=to */ EE { @Override public <T extends Comparable<T>> boolean contains(final Range<T> range, final T value) { return range.getFrom().compareTo(value) <= 0 && value.compareTo(range.getTo()) <= 0; } }, /** ○−● // from <value<=to*/ TE { @Override public <T extends Comparable<T>> boolean contains(final Range<T> range, final T value) { return range.getFrom().compareTo(value) < 0 && value.compareTo(range.getTo()) <= 0; } }, /** ●−○ // from<=value< to*/ ET { @Override public <T extends Comparable<T>> boolean contains(final Range<T> range, final T value) { return range.getFrom().compareTo(value) <= 0 && value.compareTo(range.getTo()) < 0; } }, /** ○−○ // from< value< to*/ TT { @Override public <T extends Comparable<T>> boolean contains(final Range<T> range, final T value) { return range.getFrom().compareTo(value) < 0 && value.compareTo(range.getTo()) < 0; } }; protected abstract <T extends Comparable<T>> boolean contains(final Range<T> range, final T value); } }
テスト(JUnit4)
// RangeTest.java import static org.junit.Assert.assertEquals; import org.junit.Test; public class RangeTest { @Test public void containsデフォルト() { Integer f = 1; Integer t = 12; Range<Integer> r = new Range<Integer>(f, t); assertEquals(false, r.contains(0)); // assertEquals(true, r.contains(1)); assertEquals(true, r.contains(2)); assertEquals(true, r.contains(11)); assertEquals(true, r.contains(12)); // assertEquals(false, r.contains(13)); assertEquals(false, r.contains(null)); } @Test public void containsEE() { Integer f = 1; Integer t = 12; Range<Integer> r = new Range<Integer>(Range.Comp.EE, f, t); assertEquals(false, r.contains(0)); // assertEquals(true, r.contains(1)); assertEquals(true, r.contains(2)); assertEquals(true, r.contains(11)); assertEquals(true, r.contains(12)); // assertEquals(false, r.contains(13)); assertEquals(false, r.contains(null)); } @Test public void containsTE() { Integer f = 1; Integer t = 12; Range<Integer> r = new Range<Integer>(Range.Comp.TE, f, t); assertEquals(false, r.contains(0)); assertEquals(false, r.contains(1));//★ // assertEquals(true, r.contains(2)); assertEquals(true, r.contains(11)); assertEquals(true, r.contains(12)); // assertEquals(false, r.contains(13)); assertEquals(false, r.contains(null)); } @Test public void containsET() { Integer f = 1; Integer t = 12; Range<Integer> r = new Range<Integer>(Range.Comp.ET, f, t); assertEquals(false, r.contains(0)); // assertEquals(true, r.contains(1)); assertEquals(true, r.contains(2)); assertEquals(true, r.contains(11)); // assertEquals(false, r.contains(12));//★ assertEquals(false, r.contains(13)); assertEquals(false, r.contains(null)); } @Test public void containsTT() { Integer f = 1; Integer t = 12; Range<Integer> r = new Range<Integer>(Range.Comp.TT, f, t); assertEquals(false, r.contains(0)); assertEquals(false, r.contains(1));//★ // assertEquals(true, r.contains(2)); assertEquals(true, r.contains(11)); // assertEquals(false, r.contains(12));//★ assertEquals(false, r.contains(13)); assertEquals(false, r.contains(null)); } }