github.com/chenjiandongx/go-queue@v0.0.0-20191023082232-e2a36f382f84/sort_test.go (about) 1 package collections 2 3 import ( 4 "math/rand" 5 "sort" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 var maxCnt int = 10e3 12 13 func yieldRandomArray(cnt int) []int { 14 res := make([]int, cnt) 15 for i := 0; i < cnt; i++ { 16 res[i] = rand.Int() 17 } 18 return res 19 } 20 21 func assertSort(items []int) bool { 22 for i := 0; i < len(items)-1; i++ { 23 if items[i] > items[i+1] { 24 return false 25 } 26 } 27 return true 28 } 29 30 type StdItems struct { 31 data []int 32 } 33 34 func (o StdItems) Less(i, j int) bool { 35 return o.data[i] < o.data[j] 36 } 37 38 func (o StdItems) Swap(i, j int) { 39 o.data[i], o.data[j] = o.data[j], o.data[i] 40 } 41 42 func (o StdItems) Len() int { 43 return len(o.data) 44 } 45 46 func TestBubbleSort(t *testing.T) { 47 items := yieldRandomArray(maxCnt) 48 BubbleSort(items) 49 assert.True(t, assertSort(items)) 50 } 51 52 func BenchmarkBubbleSort(b *testing.B) { 53 for i := 0; i < b.N; i++ { 54 items := yieldRandomArray(maxCnt) 55 BubbleSort(items) 56 } 57 } 58 59 func TestInsertionSort(t *testing.T) { 60 items := yieldRandomArray(maxCnt) 61 InsertionSort(items) 62 assert.True(t, assertSort(items)) 63 } 64 65 func BenchmarkInsertionSort(b *testing.B) { 66 for i := 0; i < b.N; i++ { 67 items := yieldRandomArray(maxCnt) 68 InsertionSort(items) 69 } 70 } 71 72 func TestStdSort(t *testing.T) { 73 items := StdItems{yieldRandomArray(maxCnt)} 74 sort.Sort(items) 75 assert.True(t, assertSort(items.data)) 76 } 77 78 func BenchmarkStdSort(b *testing.B) { 79 for i := 0; i < b.N; i++ { 80 sort.Sort(StdItems{yieldRandomArray(maxCnt)}) 81 } 82 } 83 84 func TestQuickSort(t *testing.T) { 85 items := yieldRandomArray(maxCnt) 86 QuickSort(items) 87 assert.True(t, assertSort(items)) 88 } 89 90 func BenchmarkQuickSort(b *testing.B) { 91 for i := 0; i < b.N; i++ { 92 items := yieldRandomArray(maxCnt) 93 QuickSort(items) 94 } 95 } 96 97 func TestShellSort(t *testing.T) { 98 items := yieldRandomArray(maxCnt) 99 ShellSort(items) 100 assert.True(t, assertSort(items)) 101 } 102 103 func BenchmarkShellSort(b *testing.B) { 104 for i := 0; i < b.N; i++ { 105 items := yieldRandomArray(maxCnt) 106 ShellSort(items) 107 } 108 } 109 110 func TestHeapSort(t *testing.T) { 111 items := yieldRandomArray(maxCnt) 112 HeapSort(items) 113 assert.True(t, assertSort(items)) 114 } 115 116 func BenchmarkHeapSort(b *testing.B) { 117 for i := 0; i < b.N; i++ { 118 items := yieldRandomArray(maxCnt) 119 HeapSort(items) 120 } 121 } 122 123 func TestMergeSort(t *testing.T) { 124 items := yieldRandomArray(maxCnt) 125 MergeSort(items) 126 assert.True(t, assertSort(items)) 127 } 128 129 func BenchmarkMergeSort(b *testing.B) { 130 for i := 0; i < b.N; i++ { 131 items := yieldRandomArray(maxCnt) 132 MergeSort(items) 133 } 134 } 135 136 func TestStdSortWithoutInterface(t *testing.T) { 137 items := yieldRandomArray(maxCnt) 138 StdSortWithoutInterface(items) 139 assert.True(t, assertSort(items)) 140 } 141 142 func BenchmarkStdSortWithoutInterface(b *testing.B) { 143 for i := 0; i < b.N; i++ { 144 items := yieldRandomArray(maxCnt) 145 StdSortWithoutInterface(items) 146 } 147 } 148 149 func TestStdSortWithGoroutine(t *testing.T) { 150 items := yieldRandomArray(maxCnt) 151 StdSortWithGoroutine(items) 152 assert.True(t, assertSort(items)) 153 } 154 155 func BenchmarkStdSortWithGoroutine(b *testing.B) { 156 for i := 0; i < b.N; i++ { 157 items := yieldRandomArray(maxCnt) 158 StdSortWithGoroutine(items) 159 } 160 }