Source file
src/math/rand/regress_test.go
1
2
3
4
5
6
7
8
9
10
11
12 package rand_test
13
14 import (
15 "flag"
16 "fmt"
17 . "math/rand"
18 "reflect"
19 "testing"
20 )
21
22 var printgolden = flag.Bool("printgolden", false, "print golden results for regression test")
23
24 func TestRegress(t *testing.T) {
25 var int32s = []int32{1, 10, 32, 1 << 20, 1<<20 + 1, 1000000000, 1 << 30, 1<<31 - 2, 1<<31 - 1}
26 var int64s = []int64{1, 10, 32, 1 << 20, 1<<20 + 1, 1000000000, 1 << 30, 1<<31 - 2, 1<<31 - 1, 1000000000000000000, 1 << 60, 1<<63 - 2, 1<<63 - 1}
27 var permSizes = []int{0, 1, 5, 8, 9, 10, 16}
28 var readBufferSizes = []int{1, 7, 8, 9, 10}
29 r := New(NewSource(0))
30
31 rv := reflect.ValueOf(r)
32 n := rv.NumMethod()
33 p := 0
34 if *printgolden {
35 fmt.Printf("var regressGolden = []interface{}{\n")
36 }
37 for i := 0; i < n; i++ {
38 m := rv.Type().Method(i)
39 mv := rv.Method(i)
40 mt := mv.Type()
41 if mt.NumOut() == 0 {
42 continue
43 }
44 r.Seed(0)
45 for repeat := 0; repeat < 20; repeat++ {
46 var args []reflect.Value
47 var argstr string
48 if mt.NumIn() == 1 {
49 var x interface{}
50 switch mt.In(0).Kind() {
51 default:
52 t.Fatalf("unexpected argument type for r.%s", m.Name)
53
54 case reflect.Int:
55 if m.Name == "Perm" {
56 x = permSizes[repeat%len(permSizes)]
57 break
58 }
59 big := int64s[repeat%len(int64s)]
60 if int64(int(big)) != big {
61 r.Int63n(big)
62 if *printgolden {
63 fmt.Printf("\tskipped, // must run printgolden on 64-bit machine\n")
64 }
65 p++
66 continue
67 }
68 x = int(big)
69
70 case reflect.Int32:
71 x = int32s[repeat%len(int32s)]
72
73 case reflect.Int64:
74 x = int64s[repeat%len(int64s)]
75
76 case reflect.Slice:
77 if m.Name == "Read" {
78 n := readBufferSizes[repeat%len(readBufferSizes)]
79 x = make([]byte, n)
80 }
81 }
82 argstr = fmt.Sprint(x)
83 args = append(args, reflect.ValueOf(x))
84 }
85
86 var out interface{}
87 out = mv.Call(args)[0].Interface()
88 if m.Name == "Int" || m.Name == "Intn" {
89 out = int64(out.(int))
90 }
91 if m.Name == "Read" {
92 out = args[0].Interface().([]byte)
93 }
94 if *printgolden {
95 var val string
96 big := int64(1 << 60)
97 if int64(int(big)) != big && (m.Name == "Int" || m.Name == "Intn") {
98
99 val = "truncated"
100 } else if reflect.TypeOf(out).Kind() == reflect.Slice {
101 val = fmt.Sprintf("%#v", out)
102 } else {
103 val = fmt.Sprintf("%T(%v)", out, out)
104 }
105 fmt.Printf("\t%s, // %s(%s)\n", val, m.Name, argstr)
106 } else {
107 want := regressGolden[p]
108 if m.Name == "Int" {
109 want = int64(int(uint(want.(int64)) << 1 >> 1))
110 }
111 if !reflect.DeepEqual(out, want) {
112 t.Errorf("r.%s(%s) = %v, want %v", m.Name, argstr, out, want)
113 }
114 }
115 p++
116 }
117 }
118 if *printgolden {
119 fmt.Printf("}\n")
120 }
121 }
122
123 var regressGolden = []interface{}{
124 float64(4.668112973579268),
125 float64(0.1601593871172866),
126 float64(3.0465834105636),
127 float64(0.06385839451671879),
128 float64(1.8578917487258961),
129 float64(0.784676123472182),
130 float64(0.11225477361256932),
131 float64(0.20173283329802255),
132 float64(0.3468619496201105),
133 float64(0.35601103454384536),
134 float64(0.888376329507869),
135 float64(1.4081362450365698),
136 float64(1.0077753823151994),
137 float64(0.23594100766227588),
138 float64(2.777245612300007),
139 float64(0.5202997830662377),
140 float64(1.2842705247770294),
141 float64(0.030307408362776206),
142 float64(2.204156824853721),
143 float64(2.09891923895058),
144 float32(0.94519615),
145 float32(0.24496509),
146 float32(0.65595627),
147 float32(0.05434384),
148 float32(0.3675872),
149 float32(0.28948045),
150 float32(0.1924386),
151 float32(0.65533215),
152 float32(0.8971697),
153 float32(0.16735445),
154 float32(0.28858566),
155 float32(0.9026048),
156 float32(0.84978026),
157 float32(0.2730468),
158 float32(0.6090802),
159 float32(0.253656),
160 float32(0.7746542),
161 float32(0.017480763),
162 float32(0.78707397),
163 float32(0.7993937),
164 float64(0.9451961492941164),
165 float64(0.24496508529377975),
166 float64(0.6559562651954052),
167 float64(0.05434383959970039),
168 float64(0.36758720663245853),
169 float64(0.2894804331565928),
170 float64(0.19243860967493215),
171 float64(0.6553321508148324),
172 float64(0.897169713149801),
173 float64(0.16735444255905835),
174 float64(0.2885856518054551),
175 float64(0.9026048462705047),
176 float64(0.8497802817628735),
177 float64(0.2730468047134829),
178 float64(0.6090801919903561),
179 float64(0.25365600644283687),
180 float64(0.7746542391859803),
181 float64(0.017480762156647272),
182 float64(0.7870739563039942),
183 float64(0.7993936979594545),
184 int64(8717895732742165505),
185 int64(2259404117704393152),
186 int64(6050128673802995827),
187 int64(501233450539197794),
188 int64(3390393562759376202),
189 int64(2669985732393126063),
190 int64(1774932891286980153),
191 int64(6044372234677422456),
192 int64(8274930044578894929),
193 int64(1543572285742637646),
194 int64(2661732831099943416),
195 int64(8325060299420976708),
196 int64(7837839688282259259),
197 int64(2518412263346885298),
198 int64(5617773211005988520),
199 int64(2339563716805116249),
200 int64(7144924247938981575),
201 int64(161231572858529631),
202 int64(7259475919510918339),
203 int64(7373105480197164748),
204 int32(2029793274),
205 int32(526058514),
206 int32(1408655353),
207 int32(116702506),
208 int32(789387515),
209 int32(621654496),
210 int32(413258767),
211 int32(1407315077),
212 int32(1926657288),
213 int32(359390928),
214 int32(619732968),
215 int32(1938329147),
216 int32(1824889259),
217 int32(586363548),
218 int32(1307989752),
219 int32(544722126),
220 int32(1663557311),
221 int32(37539650),
222 int32(1690228450),
223 int32(1716684894),
224 int32(0),
225 int32(4),
226 int32(25),
227 int32(310570),
228 int32(857611),
229 int32(621654496),
230 int32(413258767),
231 int32(1407315077),
232 int32(1926657288),
233 int32(0),
234 int32(8),
235 int32(27),
236 int32(367019),
237 int32(209005),
238 int32(307989752),
239 int32(544722126),
240 int32(1663557311),
241 int32(37539650),
242 int32(0),
243 int32(4),
244 int64(8717895732742165505),
245 int64(2259404117704393152),
246 int64(6050128673802995827),
247 int64(501233450539197794),
248 int64(3390393562759376202),
249 int64(2669985732393126063),
250 int64(1774932891286980153),
251 int64(6044372234677422456),
252 int64(8274930044578894929),
253 int64(1543572285742637646),
254 int64(2661732831099943416),
255 int64(8325060299420976708),
256 int64(7837839688282259259),
257 int64(2518412263346885298),
258 int64(5617773211005988520),
259 int64(2339563716805116249),
260 int64(7144924247938981575),
261 int64(161231572858529631),
262 int64(7259475919510918339),
263 int64(7373105480197164748),
264 int64(0),
265 int64(2),
266 int64(19),
267 int64(959842),
268 int64(688912),
269 int64(393126063),
270 int64(89212473),
271 int64(834026388),
272 int64(1577188963),
273 int64(543572285742637646),
274 int64(355889821886249464),
275 int64(8325060299420976708),
276 int64(7837839688282259259),
277 int64(0),
278 int64(0),
279 int64(25),
280 int64(679623),
281 int64(882178),
282 int64(510918339),
283 int64(782454476),
284 int64(0),
285 int64(4),
286 int64(25),
287 int64(310570),
288 int64(857611),
289 int64(621654496),
290 int64(413258767),
291 int64(1407315077),
292 int64(1926657288),
293 int64(543572285742637646),
294 int64(355889821886249464),
295 int64(8325060299420976708),
296 int64(7837839688282259259),
297 int64(0),
298 int64(2),
299 int64(14),
300 int64(515775),
301 int64(839455),
302 int64(690228450),
303 int64(642943070),
304 float64(-0.28158587086436215),
305 float64(0.570933095808067),
306 float64(-1.6920196326157044),
307 float64(0.1996229111693099),
308 float64(1.9195199291234621),
309 float64(0.8954838794918353),
310 float64(0.41457072128813166),
311 float64(-0.48700161491544713),
312 float64(-0.1684059662402393),
313 float64(0.37056410998929545),
314 float64(1.0156889027029008),
315 float64(-0.5174422210625114),
316 float64(-0.5565834214413804),
317 float64(0.778320596648391),
318 float64(-1.8970718197702225),
319 float64(0.5229525761688676),
320 float64(-1.5515595563231523),
321 float64(0.0182029289376123),
322 float64(-0.6820951356608795),
323 float64(-0.5987943422687668),
324 []int{},
325 []int{0},
326 []int{0, 4, 1, 3, 2},
327 []int{3, 1, 0, 4, 7, 5, 2, 6},
328 []int{5, 0, 3, 6, 7, 4, 2, 1, 8},
329 []int{4, 5, 0, 2, 6, 9, 3, 1, 8, 7},
330 []int{14, 2, 0, 8, 3, 5, 13, 12, 1, 4, 6, 7, 11, 9, 15, 10},
331 []int{},
332 []int{0},
333 []int{3, 0, 1, 2, 4},
334 []int{5, 1, 2, 0, 4, 7, 3, 6},
335 []int{4, 0, 6, 8, 1, 5, 2, 7, 3},
336 []int{8, 6, 1, 7, 5, 4, 3, 2, 9, 0},
337 []int{0, 3, 13, 2, 15, 4, 10, 1, 8, 14, 7, 6, 12, 9, 5, 11},
338 []int{},
339 []int{0},
340 []int{0, 4, 2, 1, 3},
341 []int{2, 1, 7, 0, 6, 3, 4, 5},
342 []int{8, 7, 5, 3, 4, 6, 0, 1, 2},
343 []int{1, 0, 2, 5, 7, 6, 9, 8, 3, 4},
344 []byte{0x1},
345 []byte{0x94, 0xfd, 0xc2, 0xfa, 0x2f, 0xfc, 0xc0},
346 []byte{0x41, 0xd3, 0xff, 0x12, 0x4, 0x5b, 0x73, 0xc8},
347 []byte{0x6e, 0x4f, 0xf9, 0x5f, 0xf6, 0x62, 0xa5, 0xee, 0xe8},
348 []byte{0x2a, 0xbd, 0xf4, 0x4a, 0x2d, 0xb, 0x75, 0xfb, 0x18, 0xd},
349 []byte{0xaf},
350 []byte{0x48, 0xa7, 0x9e, 0xe0, 0xb1, 0xd, 0x39},
351 []byte{0x46, 0x51, 0x85, 0xf, 0xd4, 0xa1, 0x78, 0x89},
352 []byte{0x2e, 0xe2, 0x85, 0xec, 0xe1, 0x51, 0x14, 0x55, 0x78},
353 []byte{0x8, 0x75, 0xd6, 0x4e, 0xe2, 0xd3, 0xd0, 0xd0, 0xde, 0x6b},
354 []byte{0xf8},
355 []byte{0xf9, 0xb4, 0x4c, 0xe8, 0x5f, 0xf0, 0x44},
356 []byte{0xc6, 0xb1, 0xf8, 0x3b, 0x8e, 0x88, 0x3b, 0xbf},
357 []byte{0x85, 0x7a, 0xab, 0x99, 0xc5, 0xb2, 0x52, 0xc7, 0x42},
358 []byte{0x9c, 0x32, 0xf3, 0xa8, 0xae, 0xb7, 0x9e, 0xf8, 0x56, 0xf6},
359 []byte{0x59},
360 []byte{0xc1, 0x8f, 0xd, 0xce, 0xcc, 0x77, 0xc7},
361 []byte{0x5e, 0x7a, 0x81, 0xbf, 0xde, 0x27, 0x5f, 0x67},
362 []byte{0xcf, 0xe2, 0x42, 0xcf, 0x3c, 0xc3, 0x54, 0xf3, 0xed},
363 []byte{0xe2, 0xd6, 0xbe, 0xcc, 0x4e, 0xa3, 0xae, 0x5e, 0x88, 0x52},
364 uint32(4059586549),
365 uint32(1052117029),
366 uint32(2817310706),
367 uint32(233405013),
368 uint32(1578775030),
369 uint32(1243308993),
370 uint32(826517535),
371 uint32(2814630155),
372 uint32(3853314576),
373 uint32(718781857),
374 uint32(1239465936),
375 uint32(3876658295),
376 uint32(3649778518),
377 uint32(1172727096),
378 uint32(2615979505),
379 uint32(1089444252),
380 uint32(3327114623),
381 uint32(75079301),
382 uint32(3380456901),
383 uint32(3433369789),
384 uint64(8717895732742165505),
385 uint64(2259404117704393152),
386 uint64(6050128673802995827),
387 uint64(9724605487393973602),
388 uint64(12613765599614152010),
389 uint64(11893357769247901871),
390 uint64(1774932891286980153),
391 uint64(15267744271532198264),
392 uint64(17498302081433670737),
393 uint64(1543572285742637646),
394 uint64(11885104867954719224),
395 uint64(17548432336275752516),
396 uint64(7837839688282259259),
397 uint64(2518412263346885298),
398 uint64(5617773211005988520),
399 uint64(11562935753659892057),
400 uint64(16368296284793757383),
401 uint64(161231572858529631),
402 uint64(16482847956365694147),
403 uint64(16596477517051940556),
404 }
405
View as plain text