Skip to content

Instantly share code, notes, and snippets.

@tututen
Last active August 1, 2017 09:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tututen/b85a4bc6c1cf8fb431d4aff4b4c5d8a5 to your computer and use it in GitHub Desktop.
Save tututen/b85a4bc6c1cf8fb431d4aff4b4c5d8a5 to your computer and use it in GitHub Desktop.
TDDワークショップ 小室・横山チーム 2017/08/01
package jp.classmethod.tddbc;
public class ClosedRange {
private int lowerEndpoint;
private int upperEndpoint;
public int getLowerEndpoint() {
return this.lowerEndpoint;
}
public int getUpperEndpoint() {
return this.upperEndpoint;
}
@Override
public String toString() {
return "[" + this.getLowerEndpoint() + "," + this.getUpperEndpoint() + "]";
}
public void setEndpoint(int lowerEndpoint, int upperEndpoint) {
if (lowerEndpoint > upperEndpoint) {
throw new InvalidEndpointException();
}
this.lowerEndpoint = lowerEndpoint;
this.upperEndpoint = upperEndpoint;
}
public boolean contains(int num) {
return this.lowerEndpoint <= num && num <= this.upperEndpoint;
}
public boolean contains(ClosedRange other) {
return this.lowerEndpoint <= other.lowerEndpoint &&
this.upperEndpoint >= other.upperEndpoint;
}
public boolean equals(ClosedRange other) {
return this.lowerEndpoint == other.lowerEndpoint &&
this.upperEndpoint == other.upperEndpoint;
}
}
package jp.classmethod.tddbc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class ClosedRangeTest {
@RunWith(Enclosed.class)
public static class 整数閉区間は下端点と上端点を持つ {
public static class 整数閉区間は下端点を持つ {
@Test
public void 下端点3を持つ() {
// 前準備
ClosedRange closedRange = new ClosedRange();
closedRange.setEndpoint(3, 8);
// 実行 & 検証
assertEquals(3, closedRange.getLowerEndpoint());
}
@Test
public void 下端点5を持つ() {
// 前準備
ClosedRange closedRange = new ClosedRange();
closedRange.setEndpoint(5, 8);
// 実行 & 検証
assertEquals(5, closedRange.getLowerEndpoint());
}
}
public static class 整数閉区間は上端点を持つ {
@Test
public void 上端点8を持つ() {
// 前準備
ClosedRange closedRange = new ClosedRange();
closedRange.setEndpoint(3, 8);
// 実行 & 検証
assertEquals(8, closedRange.getUpperEndpoint());
}
@Test
public void 上端点10を持つ() {
// 前準備
ClosedRange closedRange = new ClosedRange();
closedRange.setEndpoint(3, 10);
// 実行 & 検証
assertEquals(10, closedRange.getUpperEndpoint());
}
}
}
public static class 文字列としても表現できる {
@Test
public void 下端点3上端点8の整数閉区間の文字列表記は_3_8_となる() {
// 前準備
ClosedRange closedRange = new ClosedRange();
closedRange.setEndpoint(3, 8);
// 実行 & 検証
assertEquals("[3,8]", closedRange.toString());
}
@Test
public void 下端点5上端点10の整数閉区間の文字列表記は_5_10_となる() {
// 前準備
ClosedRange closedRange = new ClosedRange();
closedRange.setEndpoint(5, 10);
// 実行 & 検証
assertEquals("[5,10]", closedRange.toString());
}
}
public static class 上端点より下端点が大きい閉区間を作ることはできない {
@Test(expected = InvalidEndpointException.class)
public void 下端点8上端点3の時設定できない() {
// 前準備
ClosedRange closedRange = new ClosedRange();
// 実行
closedRange.setEndpoint(8, 3);
}
@Test
public void 下端点3上端点3の時設定できる() {
// 前準備
ClosedRange closedRange = new ClosedRange();
// 実行
closedRange.setEndpoint(3, 3);
}
}
public static class 整数の閉区間は指定した整数を含むかどうかを判定できる {
ClosedRange closedRange;
@Before
public void setup() {
closedRange = new ClosedRange();
closedRange.setEndpoint(3, 8);
}
@Test
public void 下端点3上端点8の整数閉区間に3は含まれる() {
// 実行 & 検証
assertTrue(closedRange.contains(3));
}
@Test
public void 下端点3上端点8の整数閉区間に2は含まれない() {
// 実行 & 検証
assertFalse(closedRange.contains(2));
}
@Test
public void 下端点3上端点8の整数閉区間に8は含まれる() {
// 実行 & 検証
assertTrue(closedRange.contains(8));
}
@Test
public void 下端点3上端点8の整数閉区間に9は含まれない() {
// 実行 & 検証
assertFalse(closedRange.contains(9));
}
}
public static class 別の閉区間と等価かどうか判定できる {
ClosedRange closedRange;
ClosedRange closedRange2;
@Before
public void setup() {
closedRange = new ClosedRange();
closedRange2 = new ClosedRange();
closedRange.setEndpoint(3, 8);
}
@Test
public void 整数閉区間下端点3上端点8と下端点3上端点8が同値であること() {
// 前準備
closedRange2.setEndpoint(3, 8);
// 実行 & 検証
assertTrue(closedRange.equals(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8と下端点5上端点8が同値でないこと() {
// 前準備
closedRange2.setEndpoint(5, 8);
// 実行 & 検証
assertFalse(closedRange.equals(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8と下端点3上端点6が同値でないこと() {
// 前準備
closedRange2.setEndpoint(3, 6);
// 実行 & 検証
assertFalse(closedRange.equals(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8と下端点5上端点6が同値でないこと() {
// 前準備
closedRange2.setEndpoint(5, 6);
// 実行 & 検証
assertFalse(closedRange.equals(closedRange2));
}
}
@RunWith(Enclosed.class)
public static class 完全に含まれるかどうか判定できる {
public static class 整数閉区間下端点3上端点8に対して含まれる {
ClosedRange closedRange;
ClosedRange closedRange2;
@Before
public void setup() {
closedRange = new ClosedRange();
closedRange2 = new ClosedRange();
closedRange.setEndpoint(3, 8);
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点4上端点7の閉区間が含まれること() {
// 前準備
closedRange2.setEndpoint(4, 7);
// 実行 & 検証
assertTrue(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点3上端点8の閉区間が含まれること() {
// 前準備
closedRange2.setEndpoint(3, 8);
// 実行 & 検証
assertTrue(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点3上端点7の閉区間が含まれること() {
// 前準備
closedRange2.setEndpoint(3, 7);
// 実行 & 検証
assertTrue(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点4上端点8の閉区間が含まれること() {
// 前準備
closedRange2.setEndpoint(4, 8);
// 実行 & 検証
assertTrue(closedRange.contains(closedRange2));
}
}
public static class 整数閉区間下端点3上端点8に対して含まれない {
ClosedRange closedRange;
ClosedRange closedRange2;
@Before
public void setup() {
closedRange = new ClosedRange();
closedRange2 = new ClosedRange();
closedRange.setEndpoint(3, 8);
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点2上端点7の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(2, 7);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点4上端点9の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(4, 9);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点2上端点3の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(2, 3);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点8上端点9の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(8, 9);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点2上端点9の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(2, 9);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点10上端点13の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(10, 13);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
@Test
public void 整数閉区間下端点3上端点8に対して下端点0上端点2の閉区間が含まれないこと() {
// 前準備
closedRange2.setEndpoint(0, 2);
// 実行 & 検証
assertFalse(closedRange.contains(closedRange2));
}
}
}
}
package jp.classmethod.tddbc;
public class InvalidEndpointException extends RuntimeException {
}
整数閉区間を示すオブジェクトをつくりたい。
- [x] 整数閉区間は下端点と上端点を持つ
- [x] 整数閉区間は下端点3を持つ
- [x] 整数閉区間は下端点5を持つ
- [x] 整数閉区間は上端点8を持つ
- [x] 整数閉区間は上端点10を持つ
- [x] 文字列としても表現できる
- [x] 下端点 3, 上端点 8 の整数閉区間の文字列表記は "[3,8]" となる
- [x] 下端点 5, 上端点 10 の整数閉区間の文字列表記は "[5,10]" となる
- [x] 上端点より下端点が大きい閉区間を作ることはできない
- [x] 下端点 8, 上端点 3 の時設定できない
- [x] 下端点 3, 上端点 3 の時設定できる
- [x] 整数の閉区間は指定した整数を含むかどうかを判定できる
- [x] 下端点 3, 上端点 8 の整数閉区間に3は含まれる
- [x] 下端点 3, 上端点 8 の整数閉区間に2は含まれない
- [x] 下端点 3, 上端点 8 の整数閉区間に8は含まれる
- [x] 下端点 3, 上端点 8 の整数閉区間に9は含まれない
- [x] 別の閉区間と等価かどうか判定できる
- [x] 整数閉区間下端点 3, 上端点 8と下端点 3, 上端点 8が同値であること
- [x] 整数閉区間下端点 3, 上端点 8と下端点 5, 上端点 8が同値でないこと
- [x] 整数閉区間下端点 3, 上端点 8と下端点 3, 上端点 6が同値でないこと
- [x] 整数閉区間下端点 3, 上端点 8と下端点 5, 上端点 6が同値でないこと
- [x] 完全に含まれるかどうか判定できる
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 4, 上端点 7が含まれること
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 3, 上端点 8が含まれること
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 3, 上端点 7が含まれること
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 4, 上端点 8が含まれること
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 2, 上端点 7が含まれないこと
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 4, 上端点 9が含まれないこと
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 2, 上端点 3が含まれないこと
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 8, 上端点 9が含まれないこと
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 2, 上端点 9が含まれないこと
- [x] 整数閉区間下端点 3, 上端点 8に対して閉区間下端点 10, 上端点 13が含まれないこと
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment