Skip to content

Instantly share code, notes, and snippets.

@takashio-naoki
Created August 2, 2017 02:44
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 takashio-naoki/405a856c1bc7f2efb83f69d632a64fea to your computer and use it in GitHub Desktop.
Save takashio-naoki/405a856c1bc7f2efb83f69d632a64fea to your computer and use it in GitHub Desktop.
TDD Workshop 2017-08-01
public class ClosedRange {
private int min;
private int max;
public ClosedRange(int min, int max) {
if (min > max) {
throw new RuntimeException();
}
this.min = min;
this.max = max;
}
/**
* 指定した整数を含むかどうかを判定する.
*
* @param num 指定した整数
* @return 判定結果
*/
public boolean contains(int num) {
return this.min <= num && this.max >= num;
}
public boolean isEquals(ClosedRange closedRange) {
int argsMin = closedRange.min;
int argsMax = closedRange.max;
return this.min == argsMin && this.max == argsMax;
}
public boolean containsAll(ClosedRange closedRange) {
int argsMin = closedRange.min;
int argsMax = closedRange.max;
return contains(argsMin) && contains(argsMax);
}
@Override
public String toString() {
return String.format("[%s, %s]", this.min, this.max);
}
}

要件

  • 整数閉区間を示すオブジェクト
  • 整数閉区間は下端点と上端点を持つ
  • 文字列としても表現できる(例: 下端点 3, 上端点 8 の整数閉区間の文字列表記は "[3,8]")。
  • 上端点より下端点が大きい閉区間を作ることはできない。
  • 整数の閉区間は指定した整数を含むかどうかを判定できる。
  • 別の閉区間と等価かどうかを判定できる
  • 完全に含まれるかどうかも判定できる

テストケース

  • 上端点より下端点が大きい閉区間を作ることはできない。

  • 整数の閉区間は指定した整数を含むかどうかを判定できる。

  • 別の閉区間と等価かどうかを判定できる

  • 別の閉区間と完全に含まれるかどうかも判定できる

  • 文字列としても表現できる(例: 下端点 3, 上端点 8 の整数閉区間の文字列表記は "[3,8]")。

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class ClosedRangeTest {
public static class 上端点より下端点が大きい閉区間を作ることはできない {
@Test
public void 下端点5で上端点8の閉区間を作ることはできる() {
// setup
// exercise & verify
new ClosedRange(5, 8);
}
@Test(expected = RuntimeException.class)
public void 下端点8で上端点5の閉区間を作ることはできない() {
// setup
// exercise & verify
new ClosedRange(8, 5);
}
}
public static class 整数の閉区間は指定した整数を含むかどうかを判定できる {
@Test
public void 上端点5で下端点8の閉区間に6が含まれることを判定する(){
// setup
ClosedRange sut = new ClosedRange(5, 8);
// exercise
boolean actual = sut.contains(6);
// verify
assertEquals(true, actual);
}
@Test
public void 上端点5で下端点8の閉区間に4が含まれないことを判定する(){
// setup
ClosedRange sut = new ClosedRange(5, 8);
// exercise
boolean actual = sut.contains(4);
// verify
assertEquals(false, actual);
}
@Test
public void 上端点5で下端点8の閉区間に9が含まれることを判定する(){
// setup
ClosedRange sut = new ClosedRange(5, 8);
// exercise
boolean actual = sut.contains(9);
// verify
assertEquals(false, actual);
}
}
public static class 別の閉区間と等価かどうかを判定できる {
@Test
public void 閉区間4_6と閉区間4_6は等価である() {
// setup
ClosedRange sut = new ClosedRange(4, 6);
// exercise
boolean actual = sut.isEquals(new ClosedRange(4, 6));
// verify
assertEquals(true, actual);
}
@Test
public void 閉区間4_6と閉区間5_8は等価でない() {
// setup
ClosedRange sut = new ClosedRange(4, 6);
// exercise
boolean actual = sut.isEquals(new ClosedRange(5, 8));
// verify
assertEquals(false, actual);
}
//
@Test
public void 閉区間4_6と閉区間4_8は等価でない() {
// setup
ClosedRange sut = new ClosedRange(4, 6);
// exercise
boolean actual = sut.isEquals(new ClosedRange(4, 8));
// verify
assertEquals(false, actual);
}
@Test
public void 閉区間4_6と閉区間5_6は等価でない() {
// setup
ClosedRange sut = new ClosedRange(4, 6);
// exercise
boolean actual = sut.isEquals(new ClosedRange(5, 6));
// verify
assertEquals(false, actual);
}
}
public static class 別の閉区間と完全に含まれるかどうかも判定できる {
@Test
public void 閉区間4_7と閉区間5_6は完全に含まれる() {
// setup
ClosedRange sut = new ClosedRange(4, 7);
// exercise
boolean actual = sut.containsAll(new ClosedRange(5, 6));
// verify
assertEquals(true, actual);
}
@Test
public void 閉区間4_7と閉区間1_3は完全に含まれない() {
// setup
ClosedRange sut = new ClosedRange(4, 7);
// exercise
boolean actual = sut.containsAll(new ClosedRange(1, 3));
// verify
assertEquals(false, actual);
}
@Test
public void 閉区間4_7と閉区間3_5は完全に含まれない() {
// setup
ClosedRange sut = new ClosedRange(4, 7);
// exercise
boolean actual = sut.containsAll(new ClosedRange(3, 5));
// verify
assertEquals(false, actual);
}
@Test
public void 閉区間4_7と閉区間6_8は完全に含まれない() {
// setup
ClosedRange sut = new ClosedRange(4, 7);
// exercise
boolean actual = sut.containsAll(new ClosedRange(6, 8));
// verify
assertEquals(false, actual);
}
@Test
public void 閉区間4_7と閉区間8_9は完全に含まれない() {
// setup
ClosedRange sut = new ClosedRange(4, 7);
// exercise
boolean actual = sut.containsAll(new ClosedRange(8, 9));
// verify
assertEquals(false, actual);
}
}
public static class 文字列としても表現できる {
@Test
public void 文字列としても表現できること() {
// setup
ClosedRange sut = new ClosedRange(4, 7);
// exercise
String actual = sut.toString();
// verify
assertEquals("[4, 7]", actual);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment