diff options
Diffstat (limited to 'ds')
| -rw-r--r-- | ds/elem.go | 12 | ||||
| -rw-r--r-- | ds/integer.go | 23 | ||||
| -rw-r--r-- | ds/integer_test.go | 24 |
3 files changed, 54 insertions, 5 deletions
@@ -1,10 +1,12 @@ package ds type Elem interface { - Equal(a Elem) bool - Lower(a Elem) bool - LowerEqual(a Elem) bool - Higher(a Elem) bool - HigherEqual(a Elem) bool + Equal(e Elem) bool + Lower(e Elem) bool + LowerEqual(e Elem) bool + Higher(e Elem) bool + HigherEqual(e Elem) bool + Compare(e Elem) int + CompareCB(e Elem, lowerCB, higherCB, equalsCB func()) Int() int } diff --git a/ds/integer.go b/ds/integer.go index 4abb349..296e5bb 100644 --- a/ds/integer.go +++ b/ds/integer.go @@ -62,3 +62,26 @@ func (i Integer) Higher(j Elem) bool { func (i Integer) HigherEqual(j Elem) bool { return i.Val >= j.Int() } + +func (i Integer) Compare(j Elem) int { + jVal := j.Int() + switch { + case i.Val < jVal: + return -1 + case i.Val > jVal: + return 1 + } + return 0 +} + +func (i Integer) CompareCB(j Elem, lowerCB, higherCB, equalsCB func()) { + jVal := j.Int() + switch { + case i.Val < jVal: + lowerCB() + case i.Val > jVal: + higherCB() + default: + equalsCB() + } +} diff --git a/ds/integer_test.go b/ds/integer_test.go new file mode 100644 index 0000000..9be55eb --- /dev/null +++ b/ds/integer_test.go @@ -0,0 +1,24 @@ +package ds + +import "testing" + +func TestCompare(t *testing.T) { + i := Integer{1} + j := Integer{10} + res := i.Compare(j) + if res != -1 { + t.Errorf("%v must be lower than %v, but got %v", i, j, res) + } + + res = j.Compare(i) + if res != 1 { + t.Errorf("%v must be higher than %v, but got %v", j, i, res) + } + + i = Integer{2} + j = Integer{2} + res = i.Compare(j) + if res != 0 { + t.Errorf("%v must be equal to %v, but got %v", i, j, res) + } +} |
