go.x2ox.com/sorbifolia/random@v0.0.0-20240520090142-6d8be5c4ed59/random_test.go (about) 1 package random 2 3 import ( 4 "testing" 5 ) 6 7 func TestShuffleAl(t *testing.T) { 8 t.Parallel() 9 10 a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 11 b := make([]int, len(a)) 12 copy(b, a) 13 14 Shuffle(a) 15 16 if isEqual(a, b) { 17 t.Errorf("Shuffle failed: %v | %v\n", a, b) 18 } 19 } 20 21 func isEqual(item1, item2 []int) bool { 22 if len(item1) != len(item2) { 23 return false 24 } 25 if len(item1) == 0 || len(item2) == 0 { 26 return len(item1) == 0 && len(item2) == 0 27 } 28 for i := 0; i < len(item1); i++ { 29 if item1[i] != item2[i] { 30 return false 31 } 32 } 33 return true 34 } 35 36 func TestPicks(t *testing.T) { 37 t.Parallel() 38 39 arr := []int{123, 21, 21, 21, 3, 1233, 21, 321, 423, 4, 32, 43, 543, 5, 43} 40 if len(Picks(arr, 3)) != 3 { 41 t.Error("test fail") 42 } 43 if len(Picks(arr, 300)) != 300 { 44 t.Error("test fail") 45 } 46 if Picks(arr, 0) != nil { 47 t.Error("test fail") 48 } 49 if Picks([]int{}, 2) != nil { 50 t.Error("test fail") 51 } 52 } 53 54 func TestReverse(t *testing.T) { 55 t.Parallel() 56 57 arr := []int{1, 2, 3, 4, 5, 6} 58 Reverse(arr) 59 if !isEqual(arr, []int{6, 5, 4, 3, 2, 1}) { 60 t.Error("TestReverse failed: ") 61 } 62 } 63 64 func TestRandom_Number(t *testing.T) { 65 t.Parallel() 66 67 var arr = []Random{Safe(), Fast(), Math()} 68 for _, v := range arr { 69 v.Uint() 70 v.Uint64() 71 v.Uint32() 72 v.Uint16() 73 v.Uint8() 74 v.Int() 75 v.Int64() 76 v.Int32() 77 v.Int16() 78 v.Int8() 79 v.Uintn(12) 80 v.Uint64n(32) 81 v.Uint32n(21) 82 v.Uint16n(12) 83 v.Uint8n(33) 84 v.Intn(11) 85 v.Int64n(14) 86 v.Int32n(16) 87 v.Int16n(18) 88 v.Int8n(10) 89 90 v.Uintn(0) 91 v.Uint64n(0) 92 v.Uint32n(0) 93 v.Uint16n(0) 94 v.Uint8n(0) 95 v.Intn(0) 96 v.Int64n(0) 97 v.Int32n(0) 98 v.Int16n(0) 99 v.Int8n(0) 100 } 101 } 102 103 func BenchmarkFastRand_Number(b *testing.B) { 104 v := Fast() 105 for i := 0; i < b.N; i++ { 106 v.Uint() 107 v.Uint64() 108 v.Uint32() 109 v.Uint16() 110 v.Uint8() 111 v.Int() 112 v.Int64() 113 v.Int32() 114 v.Int16() 115 v.Int8() 116 v.Uintn(12) 117 v.Uint64n(32) 118 v.Uint32n(21) 119 v.Uint16n(12) 120 v.Uint8n(33) 121 v.Intn(11) 122 v.Int64n(14) 123 v.Int32n(16) 124 v.Int16n(18) 125 v.Int8n(10) 126 127 v.Uintn(0) 128 v.Uint64n(0) 129 v.Uint32n(0) 130 v.Uint16n(0) 131 v.Uint8n(0) 132 v.Intn(0) 133 v.Int64n(0) 134 v.Int32n(0) 135 v.Int16n(0) 136 v.Int8n(0) 137 } 138 } 139 140 func BenchmarkSafeRand_Number(b *testing.B) { 141 v := Safe() 142 for i := 0; i < b.N; i++ { 143 v.Uint() 144 v.Uint64() 145 v.Uint32() 146 v.Uint16() 147 v.Uint8() 148 v.Int() 149 v.Int64() 150 v.Int32() 151 v.Int16() 152 v.Int8() 153 v.Uintn(12) 154 v.Uint64n(32) 155 v.Uint32n(21) 156 v.Uint16n(12) 157 v.Uint8n(33) 158 v.Intn(11) 159 v.Int64n(14) 160 v.Int32n(16) 161 v.Int16n(18) 162 v.Int8n(10) 163 164 v.Uintn(0) 165 v.Uint64n(0) 166 v.Uint32n(0) 167 v.Uint16n(0) 168 v.Uint8n(0) 169 v.Intn(0) 170 v.Int64n(0) 171 v.Int32n(0) 172 v.Int16n(0) 173 v.Int8n(0) 174 } 175 } 176 177 func BenchmarkMathRand_Number(b *testing.B) { 178 v := Math() 179 for i := 0; i < b.N; i++ { 180 v.Uint() 181 v.Uint64() 182 v.Uint32() 183 v.Uint16() 184 v.Uint8() 185 v.Int() 186 v.Int64() 187 v.Int32() 188 v.Int16() 189 v.Int8() 190 v.Uintn(12) 191 v.Uint64n(32) 192 v.Uint32n(21) 193 v.Uint16n(12) 194 v.Uint8n(33) 195 v.Intn(11) 196 v.Int64n(14) 197 v.Int32n(16) 198 v.Int16n(18) 199 v.Int8n(10) 200 201 v.Uintn(0) 202 v.Uint64n(0) 203 v.Uint32n(0) 204 v.Uint16n(0) 205 v.Uint8n(0) 206 v.Intn(0) 207 v.Int64n(0) 208 v.Int32n(0) 209 v.Int16n(0) 210 v.Int8n(0) 211 } 212 }