From deaa4e1c33cd2c1c75f698881918688055abfa51 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 7 Aug 2020 11:14:35 +0100 Subject: add quick2 --- ds/elem.go | 12 +++++++----- ds/integer.go | 23 +++++++++++++++++++++++ ds/integer_test.go | 24 ++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 ds/integer_test.go (limited to 'ds') diff --git a/ds/elem.go b/ds/elem.go index 0589e81..22bc9d9 100644 --- a/ds/elem.go +++ b/ds/elem.go @@ -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) + } +} -- cgit v1.2.3