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.
4
5// Test that random number sequences generated by a specific seed
6// do not change from version to version.
7//
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
10// outputs.
11
12package rand_test
13
14import (
15	"bytes"
16	"flag"
17	"fmt"
18	"go/format"
19	"io"
20	. "math/rand/v2"
21	"os"
22	"reflect"
23	"strings"
24	"testing"
25)
26
27var update = flag.Bool("update", false, "update golden results for regression test")
28
29func TestRegress(t *testing.T) {
30	var int32s = []int32{1, 10, 32, 1 << 20, 1<<20 + 1, 1000000000, 1 << 30, 1<<31 - 2, 1<<31 - 1}
31	var uint32s = []uint32{1, 10, 32, 1 << 20, 1<<20 + 1, 1000000000, 1 << 30, 1<<31 - 2, 1<<31 - 1, 1<<32 - 2, 1<<32 - 1}
32	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}
33	var uint64s = []uint64{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, 1<<64 - 2, 1<<64 - 1}
34	var permSizes = []int{0, 1, 5, 8, 9, 10, 16}
35
36	n := reflect.TypeOf(New(NewPCG(1, 2))).NumMethod()
37	p := 0
38	var buf bytes.Buffer
39	if *update {
40		fmt.Fprintf(&buf, "var regressGolden = []any{\n")
41	}
42	for i := 0; i < n; i++ {
43		if *update && i > 0 {
44			fmt.Fprintf(&buf, "\n")
45		}
46		r := New(NewPCG(1, 2))
47		rv := reflect.ValueOf(r)
48		m := rv.Type().Method(i)
49		mv := rv.Method(i)
50		mt := mv.Type()
51		if mt.NumOut() == 0 {
52			continue
53		}
54		for repeat := 0; repeat < 20; repeat++ {
55			var args []reflect.Value
56			var argstr string
57			if mt.NumIn() == 1 {
58				var x any
59				switch mt.In(0).Kind() {
60				default:
61					t.Fatalf("unexpected argument type for r.%s", m.Name)
62
63				case reflect.Int:
64					if m.Name == "Perm" {
65						x = permSizes[repeat%len(permSizes)]
66						break
67					}
68					big := int64s[repeat%len(int64s)]
69					if int64(int(big)) != big {
70						// On 32-bit machine.
71						// Consume an Int64 like on a 64-bit machine,
72						// to keep the golden data the same on different architectures.
73						r.Int64N(big)
74						if *update {
75							t.Fatalf("must run -update on 64-bit machine")
76						}
77						p++
78						continue
79					}
80					x = int(big)
81
82				case reflect.Uint:
83					if m.Name == "Uint" {
84						continue
85					}
86					big := uint64s[repeat%len(uint64s)]
87					if uint64(uint(big)) != big {
88						r.Uint64N(big) // what would happen on 64-bit machine, to keep stream in sync
89						if *update {
90							t.Fatalf("must run -update on 64-bit machine")
91						}
92						p++
93						continue
94					}
95					x = uint(big)
96
97				case reflect.Int32:
98					x = int32s[repeat%len(int32s)]
99
100				case reflect.Int64:
101					x = int64s[repeat%len(int64s)]
102
103				case reflect.Uint32:
104					x = uint32s[repeat%len(uint32s)]
105
106				case reflect.Uint64:
107					x = uint64s[repeat%len(uint64s)]
108				}
109				argstr = fmt.Sprint(x)
110				args = append(args, reflect.ValueOf(x))
111			}
112
113			var out any
114			out = mv.Call(args)[0].Interface()
115			if m.Name == "Int" || m.Name == "IntN" {
116				out = int64(out.(int))
117			}
118			if m.Name == "Uint" || m.Name == "UintN" {
119				out = uint64(out.(uint))
120			}
121			if *update {
122				var val string
123				big := int64(1 << 60)
124				if int64(int(big)) != big && (m.Name == "Int" || m.Name == "IntN" || m.Name == "Uint" || m.Name == "UintN") {
125					// 32-bit machine cannot print 64-bit results
126					val = "truncated"
127				} else if reflect.TypeOf(out).Kind() == reflect.Slice {
128					val = fmt.Sprintf("%#v", out)
129				} else {
130					val = fmt.Sprintf("%T(%v)", out, out)
131				}
132				fmt.Fprintf(&buf, "\t%s, // %s(%s)\n", val, m.Name, argstr)
133			} else if p >= len(regressGolden) {
134				t.Errorf("r.%s(%s) = %v, missing golden value", m.Name, argstr, out)
135			} else {
136				want := regressGolden[p]
137				if m.Name == "Int" {
138					want = int64(int(uint(want.(int64)) << 1 >> 1))
139				}
140				if m.Name == "Uint" {
141					want = uint64(uint(want.(uint64)))
142				}
143				if !reflect.DeepEqual(out, want) {
144					t.Errorf("r.%s(%s) = %v, want %v", m.Name, argstr, out, want)
145				}
146			}
147			p++
148		}
149	}
150	if *update {
151		replace(t, "regress_test.go", buf.Bytes())
152	}
153}
154
155func TestUpdateExample(t *testing.T) {
156	if !*update {
157		t.Skip("-update not given")
158	}
159
160	oldStdout := os.Stdout
161	defer func() {
162		os.Stdout = oldStdout
163	}()
164
165	r, w, err := os.Pipe()
166	if err != nil {
167		t.Fatal(err)
168	}
169	defer r.Close()
170	defer w.Close()
171
172	go func() {
173		os.Stdout = w
174		Example_rand()
175		os.Stdout = oldStdout
176		w.Close()
177	}()
178	out, err := io.ReadAll(r)
179	if err != nil {
180		t.Fatal(err)
181	}
182
183	var buf bytes.Buffer
184	fmt.Fprintf(&buf, "\t// Output:\n")
185	for _, line := range strings.Split(string(out), "\n") {
186		if line != "" {
187			fmt.Fprintf(&buf, "\t// %s\n", line)
188		}
189	}
190
191	replace(t, "example_test.go", buf.Bytes())
192
193	// Exit so that Example_rand cannot fail.
194	fmt.Printf("UPDATED; ignore non-zero exit status\n")
195	os.Exit(1)
196}
197
198// replace substitutes the definition text from new into the content of file.
199// The text in new is of the form
200//
201//	var whatever = T{
202//		...
203//	}
204//
205// Replace searches file for an exact match for the text of the first line,
206// finds the closing brace, and then substitutes new for what used to be in the file.
207// This lets us update the regressGolden table during go test -update.
208func replace(t *testing.T, file string, new []byte) {
209	first, _, _ := bytes.Cut(new, []byte("\n"))
210	first = append(append([]byte("\n"), first...), '\n')
211	data, err := os.ReadFile(file)
212	if err != nil {
213		t.Fatal(err)
214	}
215	i := bytes.Index(data, first)
216	if i < 0 {
217		t.Fatalf("cannot find %q in %s", first, file)
218	}
219	j := bytes.Index(data[i+1:], []byte("\n}\n"))
220	if j < 0 {
221		t.Fatalf("cannot find end in %s", file)
222	}
223	data = append(append(data[:i+1:i+1], new...), data[i+1+j+1:]...)
224	data, err = format.Source(data)
225	if err != nil {
226		t.Fatal(err)
227	}
228	if err := os.WriteFile(file, data, 0666); err != nil {
229		t.Fatal(err)
230	}
231}
232
233var regressGolden = []any{
234	float64(0.5931317151369719),   // ExpFloat64()
235	float64(0.0680034588807843),   // ExpFloat64()
236	float64(0.036496967459790364), // ExpFloat64()
237	float64(2.460335459645379),    // ExpFloat64()
238	float64(1.5792300208419903),   // ExpFloat64()
239	float64(0.9149501499404387),   // ExpFloat64()
240	float64(0.43463410545541104),  // ExpFloat64()
241	float64(0.5513632046504593),   // ExpFloat64()
242	float64(0.7426404617374481),   // ExpFloat64()
243	float64(1.2334925132631804),   // ExpFloat64()
244	float64(0.892529142200442),    // ExpFloat64()
245	float64(0.21508763681487764),  // ExpFloat64()
246	float64(1.0208588200798545),   // ExpFloat64()
247	float64(0.7650739736831382),   // ExpFloat64()
248	float64(0.7772788529257701),   // ExpFloat64()
249	float64(1.102732861281323),    // ExpFloat64()
250	float64(0.6982243043885805),   // ExpFloat64()
251	float64(0.4981788638202421),   // ExpFloat64()
252	float64(0.15806532306947937),  // ExpFloat64()
253	float64(0.9419163802459202),   // ExpFloat64()
254
255	float32(0.95955694),  // Float32()
256	float32(0.8076733),   // Float32()
257	float32(0.8135684),   // Float32()
258	float32(0.92872405),  // Float32()
259	float32(0.97472525),  // Float32()
260	float32(0.5485458),   // Float32()
261	float32(0.97740936),  // Float32()
262	float32(0.042272687), // Float32()
263	float32(0.99663067),  // Float32()
264	float32(0.035181105), // Float32()
265	float32(0.45059562),  // Float32()
266	float32(0.86597633),  // Float32()
267	float32(0.8954844),   // Float32()
268	float32(0.090798736), // Float32()
269	float32(0.46218646),  // Float32()
270	float32(0.5955118),   // Float32()
271	float32(0.08985227),  // Float32()
272	float32(0.19820237),  // Float32()
273	float32(0.7443699),   // Float32()
274	float32(0.56461),     // Float32()
275
276	float64(0.6764556596678251),  // Float64()
277	float64(0.4613862177205994),  // Float64()
278	float64(0.5085473976760264),  // Float64()
279	float64(0.4297927436037299),  // Float64()
280	float64(0.797802349388613),   // Float64()
281	float64(0.3883664855410056),  // Float64()
282	float64(0.8192750264193612),  // Float64()
283	float64(0.3381816951746133),  // Float64()
284	float64(0.9730458047755973),  // Float64()
285	float64(0.281449117585586),   // Float64()
286	float64(0.6047654075331631),  // Float64()
287	float64(0.9278107175107462),  // Float64()
288	float64(0.16387541502137226), // Float64()
289	float64(0.7263900707339023),  // Float64()
290	float64(0.6974917552729882),  // Float64()
291	float64(0.7640946923790318),  // Float64()
292	float64(0.7188183661358182),  // Float64()
293	float64(0.5856191500346635),  // Float64()
294	float64(0.9549597149363428),  // Float64()
295	float64(0.5168804691962643),  // Float64()
296
297	int64(4969059760275911952), // Int()
298	int64(2147869220224756844), // Int()
299	int64(5246770554000605320), // Int()
300	int64(5471241176507662746), // Int()
301	int64(4321634407747778896), // Int()
302	int64(760102831717374652),  // Int()
303	int64(9221744211007427193), // Int()
304	int64(8289669384274456462), // Int()
305	int64(2449715415482412441), // Int()
306	int64(3389241988064777392), // Int()
307	int64(2986830195847294191), // Int()
308	int64(8204908297817606218), // Int()
309	int64(8134976985547166651), // Int()
310	int64(2240328155279531677), // Int()
311	int64(7311121042813227358), // Int()
312	int64(5231057920893523323), // Int()
313	int64(4257872588489500903), // Int()
314	int64(158397175702351138),  // Int()
315	int64(1350674201389090105), // Int()
316	int64(6093522341581845358), // Int()
317
318	int32(1652216515), // Int32()
319	int32(1323786710), // Int32()
320	int32(1684546306), // Int32()
321	int32(1710678126), // Int32()
322	int32(503104460),  // Int32()
323	int32(88487615),   // Int32()
324	int32(1073552320), // Int32()
325	int32(965044529),  // Int32()
326	int32(285184408),  // Int32()
327	int32(394559696),  // Int32()
328	int32(1421454622), // Int32()
329	int32(955177040),  // Int32()
330	int32(2020777787), // Int32()
331	int32(260808523),  // Int32()
332	int32(851126509),  // Int32()
333	int32(1682717115), // Int32()
334	int32(1569423431), // Int32()
335	int32(1092181682), // Int32()
336	int32(157239171),  // Int32()
337	int32(709379364),  // Int32()
338
339	int32(0),          // Int32N(1)
340	int32(6),          // Int32N(10)
341	int32(8),          // Int32N(32)
342	int32(704922),     // Int32N(1048576)
343	int32(245656),     // Int32N(1048577)
344	int32(41205257),   // Int32N(1000000000)
345	int32(43831929),   // Int32N(1073741824)
346	int32(965044528),  // Int32N(2147483646)
347	int32(285184408),  // Int32N(2147483647)
348	int32(0),          // Int32N(1)
349	int32(6),          // Int32N(10)
350	int32(10),         // Int32N(32)
351	int32(283579),     // Int32N(1048576)
352	int32(127348),     // Int32N(1048577)
353	int32(396336665),  // Int32N(1000000000)
354	int32(911873403),  // Int32N(1073741824)
355	int32(1569423430), // Int32N(2147483646)
356	int32(1092181681), // Int32N(2147483647)
357	int32(0),          // Int32N(1)
358	int32(3),          // Int32N(10)
359
360	int64(4969059760275911952), // Int64()
361	int64(2147869220224756844), // Int64()
362	int64(5246770554000605320), // Int64()
363	int64(5471241176507662746), // Int64()
364	int64(4321634407747778896), // Int64()
365	int64(760102831717374652),  // Int64()
366	int64(9221744211007427193), // Int64()
367	int64(8289669384274456462), // Int64()
368	int64(2449715415482412441), // Int64()
369	int64(3389241988064777392), // Int64()
370	int64(2986830195847294191), // Int64()
371	int64(8204908297817606218), // Int64()
372	int64(8134976985547166651), // Int64()
373	int64(2240328155279531677), // Int64()
374	int64(7311121042813227358), // Int64()
375	int64(5231057920893523323), // Int64()
376	int64(4257872588489500903), // Int64()
377	int64(158397175702351138),  // Int64()
378	int64(1350674201389090105), // Int64()
379	int64(6093522341581845358), // Int64()
380
381	int64(0),                   // Int64N(1)
382	int64(6),                   // Int64N(10)
383	int64(8),                   // Int64N(32)
384	int64(704922),              // Int64N(1048576)
385	int64(245656),              // Int64N(1048577)
386	int64(41205257),            // Int64N(1000000000)
387	int64(43831929),            // Int64N(1073741824)
388	int64(965044528),           // Int64N(2147483646)
389	int64(285184408),           // Int64N(2147483647)
390	int64(183731176326946086),  // Int64N(1000000000000000000)
391	int64(680987186633600239),  // Int64N(1152921504606846976)
392	int64(4102454148908803108), // Int64N(9223372036854775806)
393	int64(8679174511200971228), // Int64N(9223372036854775807)
394	int64(0),                   // Int64N(1)
395	int64(3),                   // Int64N(10)
396	int64(27),                  // Int64N(32)
397	int64(665831),              // Int64N(1048576)
398	int64(533292),              // Int64N(1048577)
399	int64(73220195),            // Int64N(1000000000)
400	int64(686060398),           // Int64N(1073741824)
401
402	int64(0),                   // IntN(1)
403	int64(6),                   // IntN(10)
404	int64(8),                   // IntN(32)
405	int64(704922),              // IntN(1048576)
406	int64(245656),              // IntN(1048577)
407	int64(41205257),            // IntN(1000000000)
408	int64(43831929),            // IntN(1073741824)
409	int64(965044528),           // IntN(2147483646)
410	int64(285184408),           // IntN(2147483647)
411	int64(183731176326946086),  // IntN(1000000000000000000)
412	int64(680987186633600239),  // IntN(1152921504606846976)
413	int64(4102454148908803108), // IntN(9223372036854775806)
414	int64(8679174511200971228), // IntN(9223372036854775807)
415	int64(0),                   // IntN(1)
416	int64(3),                   // IntN(10)
417	int64(27),                  // IntN(32)
418	int64(665831),              // IntN(1048576)
419	int64(533292),              // IntN(1048577)
420	int64(73220195),            // IntN(1000000000)
421	int64(686060398),           // IntN(1073741824)
422
423	float64(0.37944549835531083),  // NormFloat64()
424	float64(0.07473804659119399),  // NormFloat64()
425	float64(0.20006841200604142),  // NormFloat64()
426	float64(-1.1253144115495104),  // NormFloat64()
427	float64(-0.4005883316435388),  // NormFloat64()
428	float64(-3.0853771402394736),  // NormFloat64()
429	float64(1.932330243076978),    // NormFloat64()
430	float64(1.726131393719264),    // NormFloat64()
431	float64(-0.11707238034168332), // NormFloat64()
432	float64(-0.9303318111676635),  // NormFloat64()
433	float64(-0.04750789419852852), // NormFloat64()
434	float64(0.22248301107582735),  // NormFloat64()
435	float64(-1.83630520614272),    // NormFloat64()
436	float64(0.7259521217919809),   // NormFloat64()
437	float64(0.8806882871913041),   // NormFloat64()
438	float64(-1.5022903484270484),  // NormFloat64()
439	float64(0.5972577266810571),   // NormFloat64()
440	float64(1.5631937339973658),   // NormFloat64()
441	float64(-0.3841235370075905),  // NormFloat64()
442	float64(-0.2967295854430667),  // NormFloat64()
443
444	[]int{},                             // Perm(0)
445	[]int{0},                            // Perm(1)
446	[]int{1, 4, 2, 0, 3},                // Perm(5)
447	[]int{4, 3, 6, 1, 5, 2, 7, 0},       // Perm(8)
448	[]int{6, 5, 1, 8, 7, 2, 0, 3, 4},    // Perm(9)
449	[]int{9, 4, 2, 5, 6, 8, 1, 7, 0, 3}, // Perm(10)
450	[]int{5, 9, 3, 1, 4, 2, 10, 7, 15, 11, 0, 14, 13, 8, 6, 12}, // Perm(16)
451	[]int{},                             // Perm(0)
452	[]int{0},                            // Perm(1)
453	[]int{4, 2, 1, 3, 0},                // Perm(5)
454	[]int{0, 2, 3, 1, 5, 4, 6, 7},       // Perm(8)
455	[]int{2, 0, 8, 3, 4, 7, 6, 5, 1},    // Perm(9)
456	[]int{0, 6, 5, 3, 8, 4, 1, 2, 9, 7}, // Perm(10)
457	[]int{9, 14, 4, 11, 13, 8, 0, 6, 2, 12, 3, 7, 1, 10, 5, 15}, // Perm(16)
458	[]int{},                             // Perm(0)
459	[]int{0},                            // Perm(1)
460	[]int{2, 4, 0, 3, 1},                // Perm(5)
461	[]int{3, 2, 1, 0, 7, 5, 4, 6},       // Perm(8)
462	[]int{1, 3, 4, 5, 0, 2, 7, 8, 6},    // Perm(9)
463	[]int{1, 8, 4, 7, 2, 6, 5, 9, 0, 3}, // Perm(10)
464
465	uint64(14192431797130687760), // Uint()
466	uint64(11371241257079532652), // Uint()
467	uint64(14470142590855381128), // Uint()
468	uint64(14694613213362438554), // Uint()
469	uint64(4321634407747778896),  // Uint()
470	uint64(760102831717374652),   // Uint()
471	uint64(9221744211007427193),  // Uint()
472	uint64(8289669384274456462),  // Uint()
473	uint64(2449715415482412441),  // Uint()
474	uint64(3389241988064777392),  // Uint()
475	uint64(12210202232702069999), // Uint()
476	uint64(8204908297817606218),  // Uint()
477	uint64(17358349022401942459), // Uint()
478	uint64(2240328155279531677),  // Uint()
479	uint64(7311121042813227358),  // Uint()
480	uint64(14454429957748299131), // Uint()
481	uint64(13481244625344276711), // Uint()
482	uint64(9381769212557126946),  // Uint()
483	uint64(1350674201389090105),  // Uint()
484	uint64(6093522341581845358),  // Uint()
485
486	uint32(3304433030), // Uint32()
487	uint32(2647573421), // Uint32()
488	uint32(3369092613), // Uint32()
489	uint32(3421356252), // Uint32()
490	uint32(1006208920), // Uint32()
491	uint32(176975231),  // Uint32()
492	uint32(2147104640), // Uint32()
493	uint32(1930089058), // Uint32()
494	uint32(570368816),  // Uint32()
495	uint32(789119393),  // Uint32()
496	uint32(2842909244), // Uint32()
497	uint32(1910354080), // Uint32()
498	uint32(4041555575), // Uint32()
499	uint32(521617046),  // Uint32()
500	uint32(1702253018), // Uint32()
501	uint32(3365434230), // Uint32()
502	uint32(3138846863), // Uint32()
503	uint32(2184363364), // Uint32()
504	uint32(314478343),  // Uint32()
505	uint32(1418758728), // Uint32()
506
507	uint32(0),          // Uint32N(1)
508	uint32(6),          // Uint32N(10)
509	uint32(8),          // Uint32N(32)
510	uint32(704922),     // Uint32N(1048576)
511	uint32(245656),     // Uint32N(1048577)
512	uint32(41205257),   // Uint32N(1000000000)
513	uint32(43831929),   // Uint32N(1073741824)
514	uint32(965044528),  // Uint32N(2147483646)
515	uint32(285184408),  // Uint32N(2147483647)
516	uint32(789119393),  // Uint32N(4294967294)
517	uint32(2842909244), // Uint32N(4294967295)
518	uint32(0),          // Uint32N(1)
519	uint32(9),          // Uint32N(10)
520	uint32(29),         // Uint32N(32)
521	uint32(266590),     // Uint32N(1048576)
522	uint32(821640),     // Uint32N(1048577)
523	uint32(730819735),  // Uint32N(1000000000)
524	uint32(522841378),  // Uint32N(1073741824)
525	uint32(157239171),  // Uint32N(2147483646)
526	uint32(709379364),  // Uint32N(2147483647)
527
528	uint64(14192431797130687760), // Uint64()
529	uint64(11371241257079532652), // Uint64()
530	uint64(14470142590855381128), // Uint64()
531	uint64(14694613213362438554), // Uint64()
532	uint64(4321634407747778896),  // Uint64()
533	uint64(760102831717374652),   // Uint64()
534	uint64(9221744211007427193),  // Uint64()
535	uint64(8289669384274456462),  // Uint64()
536	uint64(2449715415482412441),  // Uint64()
537	uint64(3389241988064777392),  // Uint64()
538	uint64(12210202232702069999), // Uint64()
539	uint64(8204908297817606218),  // Uint64()
540	uint64(17358349022401942459), // Uint64()
541	uint64(2240328155279531677),  // Uint64()
542	uint64(7311121042813227358),  // Uint64()
543	uint64(14454429957748299131), // Uint64()
544	uint64(13481244625344276711), // Uint64()
545	uint64(9381769212557126946),  // Uint64()
546	uint64(1350674201389090105),  // Uint64()
547	uint64(6093522341581845358),  // Uint64()
548
549	uint64(0),                   // Uint64N(1)
550	uint64(6),                   // Uint64N(10)
551	uint64(8),                   // Uint64N(32)
552	uint64(704922),              // Uint64N(1048576)
553	uint64(245656),              // Uint64N(1048577)
554	uint64(41205257),            // Uint64N(1000000000)
555	uint64(43831929),            // Uint64N(1073741824)
556	uint64(965044528),           // Uint64N(2147483646)
557	uint64(285184408),           // Uint64N(2147483647)
558	uint64(183731176326946086),  // Uint64N(1000000000000000000)
559	uint64(680987186633600239),  // Uint64N(1152921504606846976)
560	uint64(4102454148908803108), // Uint64N(9223372036854775806)
561	uint64(8679174511200971228), // Uint64N(9223372036854775807)
562	uint64(2240328155279531676), // Uint64N(18446744073709551614)
563	uint64(7311121042813227357), // Uint64N(18446744073709551615)
564	uint64(0),                   // Uint64N(1)
565	uint64(7),                   // Uint64N(10)
566	uint64(2),                   // Uint64N(32)
567	uint64(312633),              // Uint64N(1048576)
568	uint64(346376),              // Uint64N(1048577)
569
570	uint64(0),                   // UintN(1)
571	uint64(6),                   // UintN(10)
572	uint64(8),                   // UintN(32)
573	uint64(704922),              // UintN(1048576)
574	uint64(245656),              // UintN(1048577)
575	uint64(41205257),            // UintN(1000000000)
576	uint64(43831929),            // UintN(1073741824)
577	uint64(965044528),           // UintN(2147483646)
578	uint64(285184408),           // UintN(2147483647)
579	uint64(183731176326946086),  // UintN(1000000000000000000)
580	uint64(680987186633600239),  // UintN(1152921504606846976)
581	uint64(4102454148908803108), // UintN(9223372036854775806)
582	uint64(8679174511200971228), // UintN(9223372036854775807)
583	uint64(2240328155279531676), // UintN(18446744073709551614)
584	uint64(7311121042813227357), // UintN(18446744073709551615)
585	uint64(0),                   // UintN(1)
586	uint64(7),                   // UintN(10)
587	uint64(2),                   // UintN(32)
588	uint64(312633),              // UintN(1048576)
589	uint64(346376),              // UintN(1048577)
590}
591