summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2020-08-08 13:27:43 +0100
committerPaul Buetow <pbuetow@mimecast.com>2020-08-08 13:27:43 +0100
commit44e930b71107310eae55060cf0aa2cac7089d239 (patch)
tree2b5c1cc62bc51a87d75393a80053ffe85db043cb
parent390333bb314f6cb25adc5716ea383112860ed342 (diff)
fortune not found
Quick commit
-rw-r--r--ds/arraylist.go2
-rw-r--r--ds/elem.go12
-rw-r--r--ds/integer.go55
-rw-r--r--ds/integer_test.go42
-rw-r--r--sort/quick.go4
-rw-r--r--sort/sort_test.go14
6 files changed, 32 insertions, 97 deletions
diff --git a/ds/arraylist.go b/ds/arraylist.go
index d3feef5..66490f3 100644
--- a/ds/arraylist.go
+++ b/ds/arraylist.go
@@ -5,7 +5,7 @@ import (
"strings"
)
-type ArrayList []Elem
+type ArrayList []Integer
func (a ArrayList) FirstN(n int) string {
var sb strings.Builder
diff --git a/ds/elem.go b/ds/elem.go
deleted file mode 100644
index 22bc9d9..0000000
--- a/ds/elem.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package ds
-
-type Elem interface {
- 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 e8936c8..1372624 100644
--- a/ds/integer.go
+++ b/ds/integer.go
@@ -1,22 +1,19 @@
package ds
import (
- "fmt"
"math/rand"
)
-type Integer struct {
- Val int
-}
+type Integer int
func RandomIntegers(length, max int) ArrayList {
a := make(ArrayList, length)
for i := 0; i < length; i++ {
if max > 0 {
- a[i] = Integer{rand.Intn(max)}
+ a[i] = Integer(rand.Intn(max))
continue
}
- a[i] = Integer{rand.Int()}
+ a[i] = Integer(rand.Int())
}
return a
}
@@ -24,7 +21,7 @@ func RandomIntegers(length, max int) ArrayList {
func AscendingIntegers(length int) ArrayList {
a := make(ArrayList, length)
for i := 0; i < length; i++ {
- a[i] = Integer{i}
+ a[i] = Integer(i)
}
return a
}
@@ -33,57 +30,47 @@ func DescendingIntegers(length int) ArrayList {
a := make(ArrayList, length)
j := length
for i := 0; i < length; i++ {
- a[i] = Integer{j}
+ a[i] = Integer(j)
j--
}
return a
}
-func (i Integer) String() string {
- return fmt.Sprintf("%d", i.Val)
-}
-
-func (i Integer) Int() int {
- return i.Val
-}
-
-func (i Integer) Equal(j Elem) bool {
- return i.Val == j.Int()
+func (i Integer) Equal(j Integer) bool {
+ return i == j
}
-func (i Integer) Lower(j Elem) bool {
- return i.Val < j.Int()
+func (i Integer) Lower(j Integer) bool {
+ return i < j
}
-func (i Integer) LowerEqual(j Elem) bool {
- return i.Val <= j.Int()
+func (i Integer) LowerEqual(j Integer) bool {
+ return i <= j
}
-func (i Integer) Higher(j Elem) bool {
- return i.Val > j.Int()
+func (i Integer) Higher(j Integer) bool {
+ return i > j
}
-func (i Integer) HigherEqual(j Elem) bool {
- return i.Val >= j.Int()
+func (i Integer) HigherEqual(j Integer) bool {
+ return i >= j
}
-func (i Integer) Compare(j Elem) int {
- jVal := j.Int()
+func (i Integer) Compare(j Integer) int {
switch {
- case i.Val < jVal:
+ case i < j:
return -1
- case i.Val > jVal:
+ case i > j:
return 1
}
return 0
}
-func (i Integer) CompareCB(j Elem, lowerCB, higherCB, equalsCB func()) {
- jVal := j.Int()
+func (i Integer) CompareCB(j Integer, lowerCB, higherCB, equalsCB func()) {
switch {
- case i.Val < jVal:
+ case i < j:
lowerCB()
- case i.Val > jVal:
+ case i > j:
higherCB()
default:
equalsCB()
diff --git a/ds/integer_test.go b/ds/integer_test.go
deleted file mode 100644
index fe9cb90..0000000
--- a/ds/integer_test.go
+++ /dev/null
@@ -1,42 +0,0 @@
-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)
- }
-
- i = Integer{23}
- j = Integer{23}
- if !i.HigherEqual(j) {
- t.Errorf("Unpexpected %v.HigherEqual(%v) == false",
- i,j)
- }
-
- i = Integer{23}
- j = Integer{42}
- if i.HigherEqual(j) {
- t.Errorf("Unpexpected %v.HigherEqual(%v) == true",
- i,j)
- }
- if !j.HigherEqual(i) {
- t.Errorf("Unpexpected %v.HigherEqual(%v) == false",
- j,i)
- }
-}
diff --git a/sort/quick.go b/sort/quick.go
index f58f046..5dbcfe5 100644
--- a/sort/quick.go
+++ b/sort/quick.go
@@ -31,13 +31,13 @@ func quickPartition(a ds.ArrayList, lo, hi int) int {
v := a[lo] // Partitioning item
for {
- for i++; a[i].Lower(v); i++ {
+ for i++; a[i] < v; i++ {
if i == hi {
break
}
}
- for j--; v.Lower(a[j]); j-- {
+ for j--; v < a[j]; j-- {
if j == lo {
break
}
diff --git a/sort/sort_test.go b/sort/sort_test.go
index 899669b..fa515d7 100644
--- a/sort/sort_test.go
+++ b/sort/sort_test.go
@@ -10,8 +10,9 @@ import (
var benchResult ds.ArrayList
var benchResultInt []int
-const minLength int = 100
-const maxLength int = 10000
+const minLength int = 1
+const maxLength int = 1000000
+const maxSlowLength int = 100000
var arrayListCache map[string]ds.ArrayList
@@ -19,13 +20,13 @@ type sortAlgorithm func(ds.ArrayList) ds.ArrayList
type sortAlgorithmInt func([]int) []int
func TestSelectionSort(t *testing.T) {
- for i := minLength; i <= maxLength; i *= 10 {
+ for i := minLength; i <= maxSlowLength; i *= 10 {
test(Selection, i, t)
}
}
func TestInsertionSort(t *testing.T) {
- for i := minLength; i <= maxLength; i *= 10 {
+ for i := minLength; i <= maxSlowLength; i *= 10 {
test(Insertion, i, t)
}
}
@@ -82,13 +83,13 @@ func TestShuffleSort(t *testing.T) {
}
func BenchmarkInsertionSort(b *testing.B) {
- for i := minLength; i <= maxLength; i *= 10 {
+ for i := minLength; i <= maxSlowLength; i *= 10 {
benchmark(Insertion, i, b)
}
}
func BenchmarkSelectionSort(b *testing.B) {
- for i := minLength; i <= maxLength; i *= 10 {
+ for i := minLength; i <= maxSlowLength; i *= 10 {
benchmark(Selection, i, b)
}
}
@@ -204,6 +205,7 @@ func makeRandomIntegers(length, max int) ds.ArrayList {
return a
}
a := ds.RandomIntegers(length, max)
+ a = Shuffle(a)
arrayListCache[key] = a
return a
}