gods/utils/sort_test.go

105 lines
1.8 KiB
Go

// Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package utils
import (
"math/rand"
"testing"
)
func TestSortInts(t *testing.T) {
ints := []interface{}{}
ints = append(ints, 4)
ints = append(ints, 1)
ints = append(ints, 2)
ints = append(ints, 3)
Sort(ints, IntComparator)
for i := 1; i < len(ints); i++ {
if ints[i-1].(int) > ints[i].(int) {
t.Errorf("Not sorted!")
}
}
}
func TestSortStrings(t *testing.T) {
strings := []interface{}{}
strings = append(strings, "d")
strings = append(strings, "a")
strings = append(strings, "b")
strings = append(strings, "c")
Sort(strings, StringComparator)
for i := 1; i < len(strings); i++ {
if strings[i-1].(string) > strings[i].(string) {
t.Errorf("Not sorted!")
}
}
}
func TestSortStructs(t *testing.T) {
type User struct {
id int
name string
}
byID := func(a, b interface{}) int {
c1 := a.(User)
c2 := b.(User)
switch {
case c1.id > c2.id:
return 1
case c1.id < c2.id:
return -1
default:
return 0
}
}
// o1,o2,expected
users := []interface{}{
User{4, "d"},
User{1, "a"},
User{3, "c"},
User{2, "b"},
}
Sort(users, byID)
for i := 1; i < len(users); i++ {
if users[i-1].(User).id > users[i].(User).id {
t.Errorf("Not sorted!")
}
}
}
func TestSortRandom(t *testing.T) {
ints := []interface{}{}
for i := 0; i < 10000; i++ {
ints = append(ints, rand.Int())
}
Sort(ints, IntComparator)
for i := 1; i < len(ints); i++ {
if ints[i-1].(int) > ints[i].(int) {
t.Errorf("Not sorted!")
}
}
}
func BenchmarkGoSortRandom(b *testing.B) {
b.StopTimer()
ints := []interface{}{}
for i := 0; i < 100000; i++ {
ints = append(ints, rand.Int())
}
b.StartTimer()
Sort(ints, IntComparator)
b.StopTimer()
}