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  }