niki/vendor/github.com/brianvoe/gofakeit/v7/number.go

891 lines
25 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package gofakeit
import (
"math"
"math/bits"
)
// Number will generate a random number between given min and max
func Number(min int, max int) int { return number(GlobalFaker, min, max) }
// Number will generate a random number between given min and max
func (f *Faker) Number(min int, max int) int { return number(f, min, max) }
func number(f *Faker, min int, max int) int { return randIntRange(f, min, max) }
// Uint will generate a random uint value
func Uint() uint { return uintFunc(GlobalFaker) }
// Uint will generate a random uint value
func (f *Faker) Uint() uint { return uintFunc(f) }
func uintFunc(f *Faker) uint { return uint(f.Uint64()) }
// UintN will generate a random uint value between 0 and n
func UintN(n uint) uint { return uintNFunc(GlobalFaker, n) }
// UintN will generate a random uint value between 0 and n
func (f *Faker) UintN(n uint) uint { return uintNFunc(f, n) }
func uintNFunc(f *Faker, n uint) uint {
if n == 0 {
return 0
}
return uint(uint64NFunc(f, uint64(n)))
}
// Uint8 will generate a random uint8 value
func Uint8() uint8 { return uint8Func(GlobalFaker) }
// Uint8 will generate a random uint8 value
func (f *Faker) Uint8() uint8 { return uint8Func(f) }
func uint8Func(f *Faker) uint8 { return uint8(randIntRange(f, minUint, math.MaxUint8)) }
// Uint16 will generate a random uint16 value
func Uint16() uint16 { return uint16Func(GlobalFaker) }
// Uint16 will generate a random uint16 value
func (f *Faker) Uint16() uint16 { return uint16Func(f) }
func uint16Func(f *Faker) uint16 { return uint16(randIntRange(f, minUint, math.MaxUint16)) }
// Uint32 will generate a random uint32 value
func Uint32() uint32 { return uint32Func(GlobalFaker) }
// Uint32 will generate a random uint32 value
func (f *Faker) Uint32() uint32 { return uint32Func(f) }
func uint32Func(f *Faker) uint32 { return uint32(f.Uint64() >> 32) }
// Uint64 will generate a random uint64 value
func Uint64() uint64 { return GlobalFaker.Uint64() }
// Uint64 will generate a random uint64 value
// This is the primary location in which the random number is generated.
// This will be the only location in which reading from Rand.Uint64() is lockable
func (f *Faker) Uint64() uint64 {
// Check if the source is locked
if f.Locked {
// Lock the source
f.mu.Lock()
defer f.mu.Unlock()
}
return f.Rand.Uint64()
}
// uint64n is the no-bounds-checks version of Uint64N.
// See https://cs.opensource.google/go/go/+/refs/tags/go1.22.0:src/math/rand/v2/rand.go;l=78
// hidden as to not clutter with additional N functions
func uint64NFunc(f *Faker, n uint64) uint64 {
if is32bit && uint64(uint32(n)) == n {
// create reusable function here
uint32NFunc := func(f *Faker, n uint32) uint32 {
if n&(n-1) == 0 { // n is power of two, can mask
return uint32(f.Uint64()) & (n - 1)
}
x := f.Uint64()
lo1a, lo0 := bits.Mul32(uint32(x), n)
hi, lo1b := bits.Mul32(uint32(x>>32), n)
lo1, c := bits.Add32(lo1a, lo1b, 0)
hi += c
if lo1 == 0 && lo0 < uint32(n) {
n64 := uint64(n)
thresh := uint32(-n64 % n64)
for lo1 == 0 && lo0 < thresh {
x := f.Uint64()
lo1a, lo0 = bits.Mul32(uint32(x), n)
hi, lo1b = bits.Mul32(uint32(x>>32), n)
lo1, c = bits.Add32(lo1a, lo1b, 0)
hi += c
}
}
return hi
}
return uint64(uint32NFunc(f, uint32(n)))
}
if n&(n-1) == 0 { // n is power of two, can mask
return f.Uint64() & (n - 1)
}
hi, lo := bits.Mul64(f.Uint64(), n)
if lo < n {
thresh := -n % n
for lo < thresh {
hi, lo = bits.Mul64(f.Uint64(), n)
}
}
return hi
}
// UintRange will generate a random uint value between min and max
func UintRange(min, max uint) uint { return uintRangeFunc(GlobalFaker, min, max) }
// UintRange will generate a random uint value between min and max
func (f *Faker) UintRange(min, max uint) uint { return uintRangeFunc(f, min, max) }
func uintRangeFunc(f *Faker, min, max uint) uint { return randUintRange(f, min, max) }
// Int will generate a random int value
func Int() int { return intFunc(GlobalFaker) }
// Int will generate a random int value
func (f *Faker) Int() int { return intFunc(f) }
func intFunc(f *Faker) int { return int(uint(f.Uint64()) << 1 >> 1) }
// IntN will generate a random int value between 0 and n
func IntN(n int) int { return intNFunc(GlobalFaker, n) }
// IntN will generate a random int value between 0 and n
func (f *Faker) IntN(n int) int { return intNFunc(f, n) }
func intNFunc(f *Faker, n int) int {
if n <= 0 {
return 0
}
return int(uint64NFunc(f, uint64(n)))
}
// Int8 will generate a random Int8 value
func Int8() int8 { return int8Func(GlobalFaker) }
// Int8 will generate a random Int8 value
func (f *Faker) Int8() int8 { return int8Func(f) }
func int8Func(f *Faker) int8 { return int8(randIntRange(f, math.MinInt8, math.MaxInt8)) }
// Int16 will generate a random int16 value
func Int16() int16 { return int16Func(GlobalFaker) }
// Int16 will generate a random int16 value
func (f *Faker) Int16() int16 { return int16Func(f) }
func int16Func(f *Faker) int16 { return int16(randIntRange(f, math.MinInt16, math.MaxInt16)) }
// Int32 will generate a random int32 value
func Int32() int32 { return int32Func(GlobalFaker) }
// Int32 will generate a random int32 value
func (f *Faker) Int32() int32 { return int32Func(f) }
func int32Func(f *Faker) int32 { return int32(f.Uint64() >> 33) }
// int32n is an identical computation to int64n
// hidden as to not clutter with additional N functions
func int32NFunc(f *Faker, n int32) int32 {
if n <= 0 {
return 0
}
return int32(uint64NFunc(f, uint64(n)))
}
// Int64 will generate a random int64 value
func Int64() int64 { return int64Func(GlobalFaker) }
// Int64 will generate a random int64 value
func (f *Faker) Int64() int64 { return int64Func(f) }
func int64Func(f *Faker) int64 { return int64(f.Uint64() &^ (1 << 63)) }
// IntRange will generate a random int value between min and max
func IntRange(min, max int) int { return intRangeFunc(GlobalFaker, min, max) }
// IntRange will generate a random int value between min and max
func (f *Faker) IntRange(min, max int) int { return intRangeFunc(f, min, max) }
func intRangeFunc(f *Faker, min, max int) int { return randIntRange(f, min, max) }
// Float32 will generate a random float32 value
func Float32() float32 { return float32Func(GlobalFaker) }
// Float32 will generate a random float32 value
func (f *Faker) Float32() float32 { return float32Func(f) }
func float32Func(f *Faker) float32 {
// There are exactly 1<<24 float32s in [0,1). Use Intn(1<<24) / (1<<24).
return float32(f.Uint32()<<8>>8) / (1 << 24)
}
// Float32Range will generate a random float32 value between min and max
func Float32Range(min, max float32) float32 {
return float32Range(GlobalFaker, min, max)
}
// Float32Range will generate a random float32 value between min and max
func (f *Faker) Float32Range(min, max float32) float32 {
return float32Range(f, min, max)
}
func float32Range(f *Faker, min, max float32) float32 {
if min == max {
return min
}
return f.Float32()*(max-min) + min
}
// Float64 will generate a random float64 value
func Float64() float64 {
return float64Func(GlobalFaker)
}
// Float64 will generate a random float64 value
func (f *Faker) Float64() float64 {
return float64Func(f)
}
func float64Func(f *Faker) float64 {
// There are exactly 1<<53 float64s in [0,1). Use Intn(1<<53) / (1<<53).
return float64(f.Uint64()<<11>>11) / (1 << 53)
}
// Float64Range will generate a random float64 value between min and max
func Float64Range(min, max float64) float64 {
return float64Range(GlobalFaker, min, max)
}
// Float64Range will generate a random float64 value between min and max
func (f *Faker) Float64Range(min, max float64) float64 {
return float64Range(f, min, max)
}
func float64Range(f *Faker, min, max float64) float64 {
if min == max {
return min
}
return f.Float64()*(max-min) + min
}
// ShuffleInts will randomize a slice of ints
func ShuffleInts(a []int) { shuffleInts(GlobalFaker, a) }
// ShuffleInts will randomize a slice of ints
func (f *Faker) ShuffleInts(a []int) { shuffleInts(f, a) }
func shuffleInts(f *Faker, a []int) {
for i := range a {
j := f.IntN(i + 1)
a[i], a[j] = a[j], a[i]
}
}
// RandomInt will take in a slice of int and return a randomly selected value
func RandomInt(i []int) int { return randomInt(GlobalFaker, i) }
// RandomInt will take in a slice of int and return a randomly selected value
func (f *Faker) RandomInt(i []int) int { return randomInt(f, i) }
func randomInt(f *Faker, i []int) int {
size := len(i)
if size == 0 {
return 0
}
if size == 1 {
return i[0]
}
return i[f.IntN(size)]
}
// RandomUint will take in a slice of uint and return a randomly selected value
func RandomUint(u []uint) uint { return randomUint(GlobalFaker, u) }
// RandomUint will take in a slice of uint and return a randomly selected value
func (f *Faker) RandomUint(u []uint) uint { return randomUint(f, u) }
func randomUint(f *Faker, u []uint) uint {
size := len(u)
if size == 0 {
return 0
}
if size == 1 {
return u[0]
}
return u[f.IntN(size)]
}
// HexUint will generate a random uint hex value with "0x" prefix
func HexUint(bitSize int) string { return hexUint(GlobalFaker, bitSize) }
// HexUint will generate a random uint hex value with "0x" prefix
func (f *Faker) HexUint(bitSize int) string { return hexUint(f, bitSize) }
func hexUint(f *Faker, bitSize int) string {
digits := []byte("0123456789abcdef")
hexLen := (bitSize >> 2) + 2
if hexLen <= 2 {
return "0x"
}
s := make([]byte, hexLen)
s[0], s[1] = '0', 'x'
for i := 2; i < hexLen; i++ {
s[i] = digits[f.IntN(16)]
}
return string(s)
}
func addNumberLookup() {
AddFuncLookup("number", Info{
Display: "Number",
Category: "number",
Description: "Integer used for counting or measuring, with optional bounds",
Example: "14866",
Output: "int",
Aliases: []string{
"integer value",
"whole-number output",
"bounded result",
"range-limited value",
"discrete quantity",
},
Keywords: []string{
"integer", "int", "random",
"min", "max", "range", "bounded", "between", "inclusive",
},
Params: []Param{
{Field: "min", Display: "Min", Type: "int", Default: "-2147483648", Description: "Minimum integer value"},
{Field: "max", Display: "Max", Type: "int", Default: "2147483647", Description: "Maximum integer value"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
min, err := info.GetInt(m, "min")
if err != nil {
return nil, err
}
max, err := info.GetInt(m, "max")
if err != nil {
return nil, err
}
return number(f, min, max), nil
},
})
AddFuncLookup("uint", Info{
Display: "Uint",
Category: "number",
Description: "Unsigned integer (nonnegative whole number)",
Example: "14866",
Output: "uint",
Aliases: []string{
"nonnegative value",
"natural-count type",
"unsigned whole",
"zero-or-greater",
"cardinal quantity",
},
Keywords: []string{
"unsigned", "integer", "nonnegative",
"natural", "zero", "positive", "whole",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return uintFunc(f), nil },
})
AddFuncLookup("uintn", Info{
Display: "UintN",
Category: "number",
Description: "Unsigned integer between 0 (inclusive) and n (exclusive)",
Example: "32783",
Output: "uint",
Aliases: []string{
"upper-bounded uint",
"cap-limited unsigned",
"zero-to-n minus one",
"exclusive-maximum uint",
"limited-range unsigned",
},
Keywords: []string{
"unsigned", "range", "upper",
"limit", "bound", "cap", "max", "exclusive",
},
Params: []Param{
{Field: "n", Display: "N", Type: "uint", Default: "4294967295", Description: "Maximum uint value (exclusive)"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
n, err := info.GetUint(m, "n")
if err != nil {
return nil, err
}
return uintNFunc(f, n), nil
},
})
AddFuncLookup("uint8", Info{
Display: "Uint8",
Category: "number",
Description: "Unsigned 8-bit integer, range 0255",
Example: "152",
Output: "uint8",
Aliases: []string{
"byte-sized unsigned",
"octet quantity",
"small-range unsigned",
"one-byte value",
"0-255 whole",
},
Keywords: []string{
"unsigned", "8bit", "byte", "octet", "range", "integer",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return uint8Func(f), nil },
})
AddFuncLookup("uint16", Info{
Display: "Uint16",
Category: "number",
Description: "Unsigned 16-bit integer, range 065,535",
Example: "34968",
Output: "uint16",
Aliases: []string{
"two-byte unsigned",
"ushort quantity",
"medium-range unsigned",
"port-sized value",
"0-65535 whole",
},
Keywords: []string{
"unsigned", "16bit", "word", "port", "range", "integer",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return uint16Func(f), nil },
})
AddFuncLookup("uint32", Info{
Display: "Uint32",
Category: "number",
Description: "Unsigned 32-bit integer, range 04,294,967,295",
Example: "1075055705",
Output: "uint32",
Aliases: []string{
"four-byte unsigned", "u32 numeric", "ipv4-scale value",
"wide-range unsigned", "32-bit whole", "medium unsigned int", "standard unsigned int",
},
Keywords: []string{
"unsigned", "32bit", "range", "ipv4", "integer", "binary", "numeric",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return uint32Func(f), nil },
})
AddFuncLookup("uint64", Info{
Display: "Uint64",
Category: "number",
Description: "Unsigned 64-bit integer, range 018,446,744,073,709,551,615",
Example: "843730692693298265",
Output: "uint64",
Aliases: []string{
"eight-byte unsigned", "u64 numeric", "very-large unsigned", "wide whole count", "extended-range value", "large uint", "unsigned bigint",
},
Keywords: []string{
"unsigned", "64bit", "range", "bigint", "integer", "numeric", "arithmetic",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return f.Uint64(), nil },
})
AddFuncLookup("uintrange", Info{
Display: "Uint Range",
Category: "number",
Description: "Unsigned integer value within a given range",
Example: "1075055705",
Output: "uint",
Aliases: []string{
"unsigned span",
"nonnegative interval",
"ranged cardinal",
"bounded unsigned result",
"constrained uint output",
},
Keywords: []string{
"uintrange", "unsigned", "range", "min", "max",
"bounds", "limits", "interval", "span",
},
Params: []Param{
{Field: "min", Display: "Min", Type: "uint", Default: "0", Description: "Minimum uint value"},
{Field: "max", Display: "Max", Type: "uint", Default: "4294967295", Description: "Maximum uint value"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
min, err := info.GetUint(m, "min")
if err != nil {
return nil, err
}
max, err := info.GetUint(m, "max")
if err != nil {
return nil, err
}
return uintRangeFunc(f, min, max), nil
},
})
AddFuncLookup("int", Info{
Display: "Int",
Category: "number",
Description: "Signed integer",
Example: "14866",
Output: "int",
Aliases: []string{
"signed whole",
"two-sided count",
"negative-or-positive value",
"zero-inclusive whole",
"general int type",
},
Keywords: []string{
"signed", "integer",
"positive", "negative", "zero", "counting",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return intFunc(f), nil },
})
AddFuncLookup("intn", Info{
Display: "IntN",
Category: "number",
Description: "Integer between 0 (inclusive) and n (exclusive)",
Example: "32783",
Output: "int",
Aliases: []string{
"upper-bounded int",
"exclusive-maximum int",
"zero-through-n minus one",
"limited-range int",
"cap-limited integer",
},
Keywords: []string{
"range", "upper", "limit", "bound",
"cap", "max", "exclusive", "integer",
},
Params: []Param{
{Field: "n", Display: "N", Type: "int", Default: "2147483647", Description: "Maximum int value (exclusive)"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
n, err := info.GetInt(m, "n")
if err != nil {
return nil, err
}
return intNFunc(f, n), nil
},
})
AddFuncLookup("int8", Info{
Display: "Int8",
Category: "number",
Description: "Signed 8-bit integer, range 128127",
Example: "24",
Output: "int8",
Aliases: []string{
"byte-sized signed", "small signed range", "one-byte integer", "8-bit whole signed", "narrow signed value", "tiny int", "signed byte",
},
Keywords: []string{
"signed", "8bit", "range", "twoscomplement", "integer", "arithmetic", "numeric", "binary", "storage",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return int8Func(f), nil },
})
AddFuncLookup("int16", Info{
Display: "Int16",
Category: "number",
Description: "Signed 16-bit integer, range 32,76832,767",
Example: "2200",
Output: "int16",
Aliases: []string{
"two-byte signed", "short integer signed", "16-bit whole signed", "narrow-mid signed", "twobyte int", "short int", "halfword signed",
},
Keywords: []string{
"signed", "16bit", "range", "word", "numeric", "arithmetic", "binary", "integer",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return int16Func(f), nil },
})
AddFuncLookup("int32", Info{
Display: "Int32",
Category: "number",
Description: "Signed 32-bit integer, range 2,147,483,6482,147,483,647",
Example: "-1072427943",
Output: "int32",
Aliases: []string{
"four-byte signed", "standard-width signed", "32-bit whole signed", "midrange integer", "int32 value", "long int", "standard signed int",
},
Keywords: []string{
"signed", "32bit", "range", "ipv4", "numeric", "arithmetic", "binary", "integer",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return int32Func(f), nil },
})
AddFuncLookup("int64", Info{
Display: "Int64",
Category: "number",
Description: "Signed 64-bit integer, range 9,223,372,036,854,775,8089,223,372,036,854,775,807",
Example: "-8379641344161477543",
Output: "int64",
Aliases: []string{
"eight-byte signed",
"long-width integer",
"64-bit whole signed",
"large signed value",
"extended signed range",
},
Keywords: []string{
"signed", "64bit", "bigint", "range", "timestamp", "nanosecond",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return int64Func(f), nil },
})
AddFuncLookup("intrange", Info{
Display: "Int Range",
Category: "number",
Description: "Signed integer value within a given range",
Example: "-8379477543",
Output: "int",
Aliases: []string{
"signed span",
"bounded integer result",
"constrained int output",
"limited signed interval",
"ranged whole value",
},
Keywords: []string{
"int", "range", "min", "max",
"bounds", "limits", "interval", "span",
},
Params: []Param{
{Field: "min", Display: "Min", Type: "int", Description: "Minimum int value"},
{Field: "max", Display: "Max", Type: "int", Description: "Maximum int value"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
min, err := info.GetInt(m, "min")
if err != nil {
return nil, err
}
max, err := info.GetInt(m, "max")
if err != nil {
return nil, err
}
return intRangeFunc(f, min, max), nil
},
})
AddFuncLookup("float32", Info{
Display: "Float32",
Category: "number",
Description: "Floating-point number with 32-bit single precision (IEEE 754)",
Example: "3.1128167e+37",
Output: "float32",
Aliases: []string{
"single-precision float",
"fp32 numeric",
"32-bit real",
"float single",
"reduced-precision real",
},
Keywords: []string{
"single-precision", "ieee754",
"fp32", "mantissa", "exponent", "decimal",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return float32Func(f), nil },
})
AddFuncLookup("float32range", Info{
Display: "Float32 Range",
Category: "number",
Description: "Float32 value within a given range",
Example: "914774.6",
Output: "float32",
Aliases: []string{
"single-precision span",
"bounded fp32",
"limited float32 output",
"constrained 32-bit real",
"float single interval",
},
Keywords: []string{
"float32", "range",
"min", "max", "bounds", "limits", "interval",
},
Params: []Param{
{Field: "min", Display: "Min", Type: "float", Description: "Minimum float32 value"},
{Field: "max", Display: "Max", Type: "float", Description: "Maximum float32 value"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
min, err := info.GetFloat32(m, "min")
if err != nil {
return nil, err
}
max, err := info.GetFloat32(m, "max")
if err != nil {
return nil, err
}
return float32Range(f, min, max), nil
},
})
AddFuncLookup("float64", Info{
Display: "Float64",
Category: "number",
Description: "Floating-point number with 64-bit double precision (IEEE 754)",
Example: "1.644484108270445e+307",
Output: "float64",
Aliases: []string{
"double-precision float",
"fp64 numeric",
"64-bit real",
"float double",
"high-precision real",
},
Keywords: []string{
"double-precision", "ieee754",
"fp64", "mantissa", "exponent", "decimal",
"precision", "scientific", "number",
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) { return float64Func(f), nil },
})
AddFuncLookup("float64range", Info{
Display: "Float64 Range",
Category: "number",
Description: "Float64 value within a given range",
Example: "914774.5585333086",
Output: "float64",
Aliases: []string{
"double-precision span",
"bounded fp64",
"limited float64 output",
"constrained 64-bit real",
"float double interval",
},
Keywords: []string{
"float64", "range",
"min", "max", "bounds", "limits", "interval",
},
Params: []Param{
{Field: "min", Display: "Min", Type: "float", Description: "Minimum float64 value"},
{Field: "max", Display: "Max", Type: "float", Description: "Maximum float64 value"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
min, err := info.GetFloat64(m, "min")
if err != nil {
return nil, err
}
max, err := info.GetFloat64(m, "max")
if err != nil {
return nil, err
}
return float64Range(f, min, max), nil
},
})
AddFuncLookup("shuffleints", Info{
Display: "Shuffle Ints",
Category: "number",
Description: "Shuffles an array of ints",
Example: "1,2,3,4 => 3,1,4,2",
Output: "[]int",
Aliases: []string{
"reorder integers",
"scramble int slice",
"random permutation ints",
"reshuffle numbers",
"jumbled int output",
},
Keywords: []string{
"shuffle", "permute", "randomize",
"ints", "slice", "array", "permutation",
},
Params: []Param{
{Field: "ints", Display: "Integers", Type: "[]int", Description: "Delimited separated integers"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
ints, err := info.GetIntArray(m, "ints")
if err != nil {
return nil, err
}
shuffleInts(f, ints)
return ints, nil
},
})
AddFuncLookup("randomint", Info{
Display: "Random Int",
Category: "number",
Description: "Randomly selected value from a slice of int",
Example: "-1,2,-3,4 => -3",
Output: "int",
Aliases: []string{
"draw one integer",
"sample an int",
"pick from ints",
"select a number",
"choose single int",
},
Keywords: []string{
"random", "pick", "choose",
"select", "ints", "slice", "list",
},
Params: []Param{
{Field: "ints", Display: "Integers", Type: "[]int", Description: "Delimited separated integers"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
ints, err := info.GetIntArray(m, "ints")
if err != nil {
return nil, err
}
return randomInt(f, ints), nil
},
})
AddFuncLookup("randomuint", Info{
Display: "Random Uint",
Category: "number",
Description: "Randomly selected value from a slice of uint",
Example: "1,2,3,4 => 4",
Output: "uint",
Aliases: []string{
"draw one unsigned",
"sample a uint",
"pick from uints",
"select an unsigned",
"choose single uint",
},
Keywords: []string{
"random", "pick", "choose",
"select", "uints", "slice", "list", "nonnegative",
},
Params: []Param{
{Field: "uints", Display: "Unsigned Integers", Type: "[]uint", Description: "Delimited separated unsigned integers"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
uints, err := info.GetUintArray(m, "uints")
if err != nil {
return nil, err
}
return randomUint(f, uints), nil
},
})
AddFuncLookup("hexuint", Info{
Display: "HexUint",
Category: "number",
Description: "Hexadecimal representation of an unsigned integer",
Example: "0x87",
Output: "string",
Aliases: []string{
"hex-encoded unsigned",
"base-16 uint string",
"prefixed 0x value",
"hex view of uint",
"formatted unsigned hex",
},
Keywords: []string{
"hex", "base16", "uint", "0x",
"bits", "width", "format",
},
Params: []Param{
{Field: "bitSize", Display: "Bit Size", Type: "int", Default: "8", Description: "Bit size of the unsigned integer"},
},
Generate: func(f *Faker, m *MapParams, info *Info) (any, error) {
bitSize, err := info.GetInt(m, "bitSize")
if err != nil {
return nil, err
}
return hexUint(f, bitSize), nil
},
})
}