1 // Copyright 2014 The Go Authors. 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.
5 // Test that random number sequences generated by a specific seed
6 // do not change from version to version.
8 // Do NOT make changes to the golden outputs. If bugs need to be fixed
9 // in the underlying code, find ways to fix them that do not affect the
22 var printgolden
= flag
.Bool("printgolden", false, "print golden results for regression test")
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))
31 rv
:= reflect
.ValueOf(r
)
35 fmt
.Printf("var regressGolden = []interface{}{\n")
37 for i
:= 0; i
< n
; i
++ {
38 m
:= rv
.Type().Method(i
)
45 for repeat
:= 0; repeat
< 20; repeat
++ {
46 var args
[]reflect
.Value
50 switch mt
.In(0).Kind() {
52 t
.Fatalf("unexpected argument type for r.%s", m
.Name
)
56 x
= permSizes
[repeat%len
(permSizes
)]
59 big
:= int64s
[repeat%len
(int64s
)]
60 if int64(int(big
)) != big
{
61 r
.Int63n(big
) // what would happen on 64-bit machine, to keep stream in sync
63 fmt
.Printf("\tskipped, // must run printgolden on 64-bit machine\n")
71 x
= int32s
[repeat%len
(int32s
)]
74 x
= int64s
[repeat%len
(int64s
)]
78 n
:= readBufferSizes
[repeat%len
(readBufferSizes
)]
82 argstr
= fmt
.Sprint(x
)
83 args
= append(args
, reflect
.ValueOf(x
))
87 out
= mv
.Call(args
)[0].Interface()
88 if m
.Name
== "Int" || m
.Name
== "Intn" {
89 out
= int64(out
.(int))
92 out
= args
[0].Interface().([]byte)
97 if int64(int(big
)) != big
&& (m
.Name
== "Int" || m
.Name
== "Intn") {
98 // 32-bit machine cannot print 64-bit results
100 } else if reflect
.TypeOf(out
).Kind() == reflect
.Slice
{
101 val
= fmt
.Sprintf("%#v", out
)
103 val
= fmt
.Sprintf("%T(%v)", out
, out
)
105 fmt
.Printf("\t%s, // %s(%s)\n", val
, m
.Name
, argstr
)
107 want
:= regressGolden
[p
]
109 want
= int64(int(uint(want
.(int64)) << 1 >> 1))
111 if !reflect
.DeepEqual(out
, want
) {
112 t
.Errorf("r.%s(%s) = %v, want %v", m
.Name
, argstr
, out
, want
)
123 var regressGolden
= []interface{}{
124 float64(4.668112973579268), // ExpFloat64()
125 float64(0.1601593871172866), // ExpFloat64()
126 float64(3.0465834105636), // ExpFloat64()
127 float64(0.06385839451671879), // ExpFloat64()
128 float64(1.8578917487258961), // ExpFloat64()
129 float64(0.784676123472182), // ExpFloat64()
130 float64(0.11225477361256932), // ExpFloat64()
131 float64(0.20173283329802255), // ExpFloat64()
132 float64(0.3468619496201105), // ExpFloat64()
133 float64(0.35601103454384536), // ExpFloat64()
134 float64(0.888376329507869), // ExpFloat64()
135 float64(1.4081362450365698), // ExpFloat64()
136 float64(1.0077753823151994), // ExpFloat64()
137 float64(0.23594100766227588), // ExpFloat64()
138 float64(2.777245612300007), // ExpFloat64()
139 float64(0.5202997830662377), // ExpFloat64()
140 float64(1.2842705247770294), // ExpFloat64()
141 float64(0.030307408362776206), // ExpFloat64()
142 float64(2.204156824853721), // ExpFloat64()
143 float64(2.09891923895058), // ExpFloat64()
144 float32(0.94519615), // Float32()
145 float32(0.24496509), // Float32()
146 float32(0.65595627), // Float32()
147 float32(0.05434384), // Float32()
148 float32(0.3675872), // Float32()
149 float32(0.28948045), // Float32()
150 float32(0.1924386), // Float32()
151 float32(0.65533215), // Float32()
152 float32(0.8971697), // Float32()
153 float32(0.16735445), // Float32()
154 float32(0.28858566), // Float32()
155 float32(0.9026048), // Float32()
156 float32(0.84978026), // Float32()
157 float32(0.2730468), // Float32()
158 float32(0.6090802), // Float32()
159 float32(0.253656), // Float32()
160 float32(0.7746542), // Float32()
161 float32(0.017480763), // Float32()
162 float32(0.78707397), // Float32()
163 float32(0.7993937), // Float32()
164 float64(0.9451961492941164), // Float64()
165 float64(0.24496508529377975), // Float64()
166 float64(0.6559562651954052), // Float64()
167 float64(0.05434383959970039), // Float64()
168 float64(0.36758720663245853), // Float64()
169 float64(0.2894804331565928), // Float64()
170 float64(0.19243860967493215), // Float64()
171 float64(0.6553321508148324), // Float64()
172 float64(0.897169713149801), // Float64()
173 float64(0.16735444255905835), // Float64()
174 float64(0.2885856518054551), // Float64()
175 float64(0.9026048462705047), // Float64()
176 float64(0.8497802817628735), // Float64()
177 float64(0.2730468047134829), // Float64()
178 float64(0.6090801919903561), // Float64()
179 float64(0.25365600644283687), // Float64()
180 float64(0.7746542391859803), // Float64()
181 float64(0.017480762156647272), // Float64()
182 float64(0.7870739563039942), // Float64()
183 float64(0.7993936979594545), // Float64()
184 int64(8717895732742165505), // Int()
185 int64(2259404117704393152), // Int()
186 int64(6050128673802995827), // Int()
187 int64(501233450539197794), // Int()
188 int64(3390393562759376202), // Int()
189 int64(2669985732393126063), // Int()
190 int64(1774932891286980153), // Int()
191 int64(6044372234677422456), // Int()
192 int64(8274930044578894929), // Int()
193 int64(1543572285742637646), // Int()
194 int64(2661732831099943416), // Int()
195 int64(8325060299420976708), // Int()
196 int64(7837839688282259259), // Int()
197 int64(2518412263346885298), // Int()
198 int64(5617773211005988520), // Int()
199 int64(2339563716805116249), // Int()
200 int64(7144924247938981575), // Int()
201 int64(161231572858529631), // Int()
202 int64(7259475919510918339), // Int()
203 int64(7373105480197164748), // Int()
204 int32(2029793274), // Int31()
205 int32(526058514), // Int31()
206 int32(1408655353), // Int31()
207 int32(116702506), // Int31()
208 int32(789387515), // Int31()
209 int32(621654496), // Int31()
210 int32(413258767), // Int31()
211 int32(1407315077), // Int31()
212 int32(1926657288), // Int31()
213 int32(359390928), // Int31()
214 int32(619732968), // Int31()
215 int32(1938329147), // Int31()
216 int32(1824889259), // Int31()
217 int32(586363548), // Int31()
218 int32(1307989752), // Int31()
219 int32(544722126), // Int31()
220 int32(1663557311), // Int31()
221 int32(37539650), // Int31()
222 int32(1690228450), // Int31()
223 int32(1716684894), // Int31()
224 int32(0), // Int31n(1)
225 int32(4), // Int31n(10)
226 int32(25), // Int31n(32)
227 int32(310570), // Int31n(1048576)
228 int32(857611), // Int31n(1048577)
229 int32(621654496), // Int31n(1000000000)
230 int32(413258767), // Int31n(1073741824)
231 int32(1407315077), // Int31n(2147483646)
232 int32(1926657288), // Int31n(2147483647)
233 int32(0), // Int31n(1)
234 int32(8), // Int31n(10)
235 int32(27), // Int31n(32)
236 int32(367019), // Int31n(1048576)
237 int32(209005), // Int31n(1048577)
238 int32(307989752), // Int31n(1000000000)
239 int32(544722126), // Int31n(1073741824)
240 int32(1663557311), // Int31n(2147483646)
241 int32(37539650), // Int31n(2147483647)
242 int32(0), // Int31n(1)
243 int32(4), // Int31n(10)
244 int64(8717895732742165505), // Int63()
245 int64(2259404117704393152), // Int63()
246 int64(6050128673802995827), // Int63()
247 int64(501233450539197794), // Int63()
248 int64(3390393562759376202), // Int63()
249 int64(2669985732393126063), // Int63()
250 int64(1774932891286980153), // Int63()
251 int64(6044372234677422456), // Int63()
252 int64(8274930044578894929), // Int63()
253 int64(1543572285742637646), // Int63()
254 int64(2661732831099943416), // Int63()
255 int64(8325060299420976708), // Int63()
256 int64(7837839688282259259), // Int63()
257 int64(2518412263346885298), // Int63()
258 int64(5617773211005988520), // Int63()
259 int64(2339563716805116249), // Int63()
260 int64(7144924247938981575), // Int63()
261 int64(161231572858529631), // Int63()
262 int64(7259475919510918339), // Int63()
263 int64(7373105480197164748), // Int63()
264 int64(0), // Int63n(1)
265 int64(2), // Int63n(10)
266 int64(19), // Int63n(32)
267 int64(959842), // Int63n(1048576)
268 int64(688912), // Int63n(1048577)
269 int64(393126063), // Int63n(1000000000)
270 int64(89212473), // Int63n(1073741824)
271 int64(834026388), // Int63n(2147483646)
272 int64(1577188963), // Int63n(2147483647)
273 int64(543572285742637646), // Int63n(1000000000000000000)
274 int64(355889821886249464), // Int63n(1152921504606846976)
275 int64(8325060299420976708), // Int63n(9223372036854775806)
276 int64(7837839688282259259), // Int63n(9223372036854775807)
277 int64(0), // Int63n(1)
278 int64(0), // Int63n(10)
279 int64(25), // Int63n(32)
280 int64(679623), // Int63n(1048576)
281 int64(882178), // Int63n(1048577)
282 int64(510918339), // Int63n(1000000000)
283 int64(782454476), // Int63n(1073741824)
285 int64(4), // Intn(10)
286 int64(25), // Intn(32)
287 int64(310570), // Intn(1048576)
288 int64(857611), // Intn(1048577)
289 int64(621654496), // Intn(1000000000)
290 int64(413258767), // Intn(1073741824)
291 int64(1407315077), // Intn(2147483646)
292 int64(1926657288), // Intn(2147483647)
293 int64(543572285742637646), // Intn(1000000000000000000)
294 int64(355889821886249464), // Intn(1152921504606846976)
295 int64(8325060299420976708), // Intn(9223372036854775806)
296 int64(7837839688282259259), // Intn(9223372036854775807)
298 int64(2), // Intn(10)
299 int64(14), // Intn(32)
300 int64(515775), // Intn(1048576)
301 int64(839455), // Intn(1048577)
302 int64(690228450), // Intn(1000000000)
303 int64(642943070), // Intn(1073741824)
304 float64(-0.28158587086436215), // NormFloat64()
305 float64(0.570933095808067), // NormFloat64()
306 float64(-1.6920196326157044), // NormFloat64()
307 float64(0.1996229111693099), // NormFloat64()
308 float64(1.9195199291234621), // NormFloat64()
309 float64(0.8954838794918353), // NormFloat64()
310 float64(0.41457072128813166), // NormFloat64()
311 float64(-0.48700161491544713), // NormFloat64()
312 float64(-0.1684059662402393), // NormFloat64()
313 float64(0.37056410998929545), // NormFloat64()
314 float64(1.0156889027029008), // NormFloat64()
315 float64(-0.5174422210625114), // NormFloat64()
316 float64(-0.5565834214413804), // NormFloat64()
317 float64(0.778320596648391), // NormFloat64()
318 float64(-1.8970718197702225), // NormFloat64()
319 float64(0.5229525761688676), // NormFloat64()
320 float64(-1.5515595563231523), // NormFloat64()
321 float64(0.0182029289376123), // NormFloat64()
322 float64(-0.6820951356608795), // NormFloat64()
323 float64(-0.5987943422687668), // NormFloat64()
326 []int{0, 4, 1, 3, 2}, // Perm(5)
327 []int{3, 1, 0, 4, 7, 5, 2, 6}, // Perm(8)
328 []int{5, 0, 3, 6, 7, 4, 2, 1, 8}, // Perm(9)
329 []int{4, 5, 0, 2, 6, 9, 3, 1, 8, 7}, // Perm(10)
330 []int{14, 2, 0, 8, 3, 5, 13, 12, 1, 4, 6, 7, 11, 9, 15, 10}, // Perm(16)
333 []int{3, 0, 1, 2, 4}, // Perm(5)
334 []int{5, 1, 2, 0, 4, 7, 3, 6}, // Perm(8)
335 []int{4, 0, 6, 8, 1, 5, 2, 7, 3}, // Perm(9)
336 []int{8, 6, 1, 7, 5, 4, 3, 2, 9, 0}, // Perm(10)
337 []int{0, 3, 13, 2, 15, 4, 10, 1, 8, 14, 7, 6, 12, 9, 5, 11}, // Perm(16)
340 []int{0, 4, 2, 1, 3}, // Perm(5)
341 []int{2, 1, 7, 0, 6, 3, 4, 5}, // Perm(8)
342 []int{8, 7, 5, 3, 4, 6, 0, 1, 2}, // Perm(9)
343 []int{1, 0, 2, 5, 7, 6, 9, 8, 3, 4}, // Perm(10)
344 []byte{0x1}, // Read([0])
345 []byte{0xc0, 0x41, 0xd3, 0xff, 0x12, 0x4, 0x5b}, // Read([0 0 0 0 0 0 0])
346 []byte{0x73, 0xc8, 0x6e, 0x4f, 0xf9, 0x5f, 0xf6, 0x62}, // Read([0 0 0 0 0 0 0 0])
347 []byte{0x4a, 0x2d, 0xb, 0x75, 0xfb, 0x18, 0xd, 0xaf, 0x48}, // Read([0 0 0 0 0 0 0 0 0])
348 []byte{0x39, 0x46, 0x51, 0x85, 0xf, 0xd4, 0xa1, 0x78, 0x89, 0x2e}, // Read([0 0 0 0 0 0 0 0 0 0])
349 []byte{0x51}, // Read([0])
350 []byte{0x4e, 0xe2, 0xd3, 0xd0, 0xd0, 0xde, 0x6b}, // Read([0 0 0 0 0 0 0])
351 []byte{0xf8, 0xf9, 0xb4, 0x4c, 0xe8, 0x5f, 0xf0, 0x44}, // Read([0 0 0 0 0 0 0 0])
352 []byte{0x3b, 0xbf, 0x85, 0x7a, 0xab, 0x99, 0xc5, 0xb2, 0x52}, // Read([0 0 0 0 0 0 0 0 0])
353 []byte{0xa8, 0xae, 0xb7, 0x9e, 0xf8, 0x56, 0xf6, 0x59, 0xc1, 0x8f}, // Read([0 0 0 0 0 0 0 0 0 0])
354 []byte{0xc7}, // Read([0])
355 []byte{0x5f, 0x67, 0xcf, 0xe2, 0x42, 0xcf, 0x3c}, // Read([0 0 0 0 0 0 0])
356 []byte{0xc3, 0x54, 0xf3, 0xed, 0xe2, 0xd6, 0xbe, 0xcc}, // Read([0 0 0 0 0 0 0 0])
357 []byte{0x6a, 0x9f, 0x4a, 0x57, 0x8b, 0xcb, 0x9e, 0xf2, 0xd4}, // Read([0 0 0 0 0 0 0 0 0])
358 []byte{0x6d, 0x29, 0x97, 0x61, 0xea, 0x9e, 0x4f, 0x5a, 0xa6, 0xae}, // Read([0 0 0 0 0 0 0 0 0 0])
359 []byte{0xaa}, // Read([0])
360 []byte{0x20, 0xef, 0xcd, 0x6c, 0xea, 0x84, 0xb6}, // Read([0 0 0 0 0 0 0])
361 []byte{0x92, 0x5e, 0x60, 0x7b, 0xe0, 0x63, 0x71, 0x6f}, // Read([0 0 0 0 0 0 0 0])
362 []byte{0x4, 0x5c, 0x3f, 0x0, 0xf, 0x8a, 0x79, 0x6b, 0xce}, // Read([0 0 0 0 0 0 0 0 0])
363 []byte{0xaa, 0xca, 0xee, 0xdf, 0xad, 0x5b, 0x50, 0x66, 0x64, 0xe8}, // Read([0 0 0 0 0 0 0 0 0 0])
364 uint32(4059586549), // Uint32()
365 uint32(1052117029), // Uint32()
366 uint32(2817310706), // Uint32()
367 uint32(233405013), // Uint32()
368 uint32(1578775030), // Uint32()
369 uint32(1243308993), // Uint32()
370 uint32(826517535), // Uint32()
371 uint32(2814630155), // Uint32()
372 uint32(3853314576), // Uint32()
373 uint32(718781857), // Uint32()
374 uint32(1239465936), // Uint32()
375 uint32(3876658295), // Uint32()
376 uint32(3649778518), // Uint32()
377 uint32(1172727096), // Uint32()
378 uint32(2615979505), // Uint32()
379 uint32(1089444252), // Uint32()
380 uint32(3327114623), // Uint32()
381 uint32(75079301), // Uint32()
382 uint32(3380456901), // Uint32()
383 uint32(3433369789), // Uint32()