sortition type definition + benchmarks and tests
parent
9f095a1fbe
commit
ddaf7f7c38
@ -0,0 +1,4 @@
|
||||
package main
|
||||
|
||||
// @todo remove return
|
||||
type Sort func([]int)
|
@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
utils "github.com/0xAX/go-algorithms"
|
||||
)
|
||||
|
||||
var funcs = []struct{
|
||||
name string
|
||||
f Sort
|
||||
}{
|
||||
{"shell", ShellSort},
|
||||
{"selection", SelectionSort},
|
||||
{"oddeven", OddEvenSort},
|
||||
{"insertion", InsertionSort},
|
||||
{"heap", HeapSort},
|
||||
{"gnome", GnomeSort},
|
||||
{"counting", CountingSort},
|
||||
{"comb", CombSort},
|
||||
{"cocktail", CocktailSort},
|
||||
{"bubble", BubbleSort},
|
||||
}
|
||||
|
||||
func TestSort(t *testing.T) {
|
||||
for _, tt := range funcs {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
arr := utils.RandArray(10)
|
||||
|
||||
tt.f(arr)
|
||||
|
||||
if !isSorted(arr) {
|
||||
t.Errorf("%v is not sorted", arr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkSort(b *testing.B) {
|
||||
for _, tt := range funcs {
|
||||
arrs := make([][]int, 0)
|
||||
|
||||
for n := 0; n < b.N; n++ {
|
||||
arrs = append(arrs, utils.RandArray(10))
|
||||
}
|
||||
|
||||
b.Run(tt.name, func(b *testing.B) {
|
||||
for n := 0; n < len(arrs); n++ {
|
||||
tt.f(arrs[n])
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func isSorted(arr []int) bool {
|
||||
for i := 0; i < len(arr) - 1; i++ {
|
||||
if arr[i] > arr[i + 1] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
Loading…
Reference in New Issue