Last active
August 1, 2017 09:54
-
-
Save tututen/b85a4bc6c1cf8fb431d4aff4b4c5d8a5 to your computer and use it in GitHub Desktop.
TDDワークショップ 小室・横山チーム 2017/08/01
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package jp.classmethod.tddbc; | |
public class InvalidEndpointException extends RuntimeException { | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
整数閉区間を示すオブジェクトをつくりたい。 | |
- [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