gitee.com/quant1x/gox@v1.21.2/util/internal/sort_test.go (about)

     1  // Copyright (c) 2015, Emir Pasic. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package internal
     6  
     7  import (
     8  	"math/rand"
     9  	"testing"
    10  )
    11  
    12  func TestSortInts(t *testing.T) {
    13  	ints := []interface{}{}
    14  	ints = append(ints, 4)
    15  	ints = append(ints, 1)
    16  	ints = append(ints, 2)
    17  	ints = append(ints, 3)
    18  
    19  	Sort(ints, IntComparator)
    20  
    21  	for i := 1; i < len(ints); i++ {
    22  		if ints[i-1].(int) > ints[i].(int) {
    23  			t.Errorf("Not sorted!")
    24  		}
    25  	}
    26  
    27  }
    28  
    29  func TestSortStrings(t *testing.T) {
    30  
    31  	strings := []interface{}{}
    32  	strings = append(strings, "d")
    33  	strings = append(strings, "a")
    34  	strings = append(strings, "b")
    35  	strings = append(strings, "c")
    36  
    37  	Sort(strings, StringComparator)
    38  
    39  	for i := 1; i < len(strings); i++ {
    40  		if strings[i-1].(string) > strings[i].(string) {
    41  			t.Errorf("Not sorted!")
    42  		}
    43  	}
    44  }
    45  
    46  func TestSortStructs(t *testing.T) {
    47  	type User struct {
    48  		id   int
    49  		name string
    50  	}
    51  
    52  	byID := func(a, b interface{}) int {
    53  		c1 := a.(User)
    54  		c2 := b.(User)
    55  		switch {
    56  		case c1.id > c2.id:
    57  			return 1
    58  		case c1.id < c2.id:
    59  			return -1
    60  		default:
    61  			return 0
    62  		}
    63  	}
    64  
    65  	// o1,o2,expected
    66  	users := []interface{}{
    67  		User{4, "d"},
    68  		User{1, "a"},
    69  		User{3, "c"},
    70  		User{2, "b"},
    71  	}
    72  
    73  	Sort(users, byID)
    74  
    75  	for i := 1; i < len(users); i++ {
    76  		if users[i-1].(User).id > users[i].(User).id {
    77  			t.Errorf("Not sorted!")
    78  		}
    79  	}
    80  }
    81  
    82  func TestSortRandom(t *testing.T) {
    83  	ints := []interface{}{}
    84  	for i := 0; i < 10000; i++ {
    85  		ints = append(ints, rand.Int())
    86  	}
    87  	Sort(ints, IntComparator)
    88  	for i := 1; i < len(ints); i++ {
    89  		if ints[i-1].(int) > ints[i].(int) {
    90  			t.Errorf("Not sorted!")
    91  		}
    92  	}
    93  }
    94  
    95  func BenchmarkGoSortRandom(b *testing.B) {
    96  	b.StopTimer()
    97  	ints := []interface{}{}
    98  	for i := 0; i < 100000; i++ {
    99  		ints = append(ints, rand.Int())
   100  	}
   101  	b.StartTimer()
   102  	Sort(ints, IntComparator)
   103  	b.StopTimer()
   104  }