Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
TDD Workshop
package myrange
import "fmt"
type RangeType int
const (
OPEN RangeType = iota
CLOSE
OPEN_CLOSE
CLOSE_OPEN
)
type Range struct {
LowerEndpoint int
UpperEndpoint int
RangeType RangeType
}
func NewRange(lower int, upper int, rangeType RangeType) (*Range, error) {
if rangeType == CLOSE && lower > upper {
return nil, fmt.Errorf("rangeType == CLOSE && lower > upper")
}
if rangeType == OPEN && lower >= upper {
return nil, fmt.Errorf("rangeType == OPEN && lower >= upper")
}
return &Range{lower, upper, rangeType}, nil
}
func (r *Range) Include(in *Range) bool {
if r.LowerEndpoint <= in.LowerEndpoint && r.UpperEndpoint >= in.UpperEndpoint {
return true
}
return false
}
package myrange
import "testing"
var propertyTest = []struct {
lower int
upper int
rangeType RangeType
out *Range
}{
{1, 2, OPEN, &Range{1, 2, OPEN}},
{2, 2, OPEN, nil},
{2, 1, OPEN, nil},
{1, 2, CLOSE, &Range{1, 2, CLOSE}},
{2, 2, CLOSE, &Range{2, 2, CLOSE}},
{2, 1, CLOSE, nil},
}
func TestNewRange(t *testing.T) {
for _, tt := range propertyTest {
r, _ := NewRange(tt.lower, tt.upper, tt.rangeType)
if tt.out == nil {
if r != nil {
t.Errorf("expect:%v result:%v", tt, r)
}
} else {
if *r != *tt.out {
t.Errorf("expect:%v result:%v", tt, r)
}
}
}
}
var includeTest = []struct {
in1 *Range
in2 *Range
out bool
}{
{&Range{1, 10, CLOSE}, &Range{2, 9, CLOSE}, true},
{&Range{1, 10, CLOSE}, &Range{1, 10, CLOSE}, true},
{&Range{1, 10, CLOSE}, &Range{2, 11, CLOSE}, false},
{&Range{1, 10, CLOSE}, &Range{0, 9, CLOSE}, false},
}
func TestInclude(t *testing.T) {
for _, tt := range includeTest {
if tt.in1.Include(tt.in2) != tt.out {
t.Errorf("エラー")
}
}
}
@cm-igarashi-ryosuke

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.