mirror of
https://github.com/emirpasic/gods
synced 2024-11-18 09:25:50 +00:00
105 lines
1.8 KiB
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()
|
|
}
|