random

package
v0.109.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2022 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Charset added in v0.83.0

func Charset() string

func CharsetASCII added in v0.83.0

func CharsetASCII() string

func CharsetAlpha added in v0.83.0

func CharsetAlpha() string

func CharsetDigit added in v0.105.0

func CharsetDigit() string

func MakeMap added in v0.102.0

func MakeMap[K comparable, V any](rnd *Random, length int) map[K]V
Example
package main

import (
	"github.com/adamluzsi/testcase/pp"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(random.CryptoSeed{})

	pp.PP(random.MakeMap[string, int](rnd, 3)) // map[string]int slice with 3 key-value pairs
}
Output:

func MakeSlice added in v0.102.0

func MakeSlice[T any](rnd *Random, length int) []T
Example
package main

import (
	"github.com/adamluzsi/testcase/pp"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(random.CryptoSeed{})

	pp.PP(random.MakeSlice[int](rnd, 3)) // []int slice with 3 values
}
Output:

Types

type CryptoSeed

type CryptoSeed struct{}

func (CryptoSeed) Int63

func (c CryptoSeed) Int63() int64

Int63 returns a non-negative pseudo-random 63-bit integer as an int64.

func (CryptoSeed) Seed

func (c CryptoSeed) Seed(seed int64)

Seed should use the provided seed value to initialize the generator to a deterministic state, but in CryptoSeed, the value is ignored.

func (CryptoSeed) Uint64

func (c CryptoSeed) Uint64() uint64

type Factory added in v0.73.0

type Factory struct {
	// contains filtered or unexported fields
}

func (*Factory) Make added in v0.73.0

func (f *Factory) Make(rnd *Random, T any) (_T any)

func (*Factory) RegisterType added in v0.73.0

func (f *Factory) RegisterType(T any, ff typeFunc)

type Random

type Random struct {
	Source  rand.Source
	Factory Factory
	// contains filtered or unexported fields
}

A Random is a source of random numbers. It is safe to be used in from multiple goroutines.

Example (CryptoSeed)
package main

import (
	"github.com/adamluzsi/testcase/random"
)

func main() {
	random.New(random.CryptoSeed{})
}
Output:

Example (MathRand)
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	seed := time.Now().UnixNano()
	source := rand.NewSource(seed)
	random.New(source)
}
Output:

func New

func New(s rand.Source) *Random
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	_ = random.New(rand.NewSource(time.Now().Unix()))
}
Output:

func (*Random) Bool

func (r *Random) Bool() bool
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.Bool() // returns a random bool
}
Output:

func (*Random) ElementFromSlice

func (r *Random) ElementFromSlice(slice interface{}) interface{}
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	// returns a random element from the given slice
	_ = rnd.ElementFromSlice([]string{`foo`, `bar`, `baz`}).(string)
}
Output:

func (*Random) Error added in v0.90.0

func (r *Random) Error() error
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	err := rnd.Error()
	_ = err
}
Output:

func (*Random) Float32

func (r *Random) Float32() float32

Float32 returns, as a float32, a pseudo-random number in [0.0,1.0).

Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.Float32()
}
Output:

func (*Random) Float64

func (r *Random) Float64() float64

Float64 returns, as a float64, a pseudo-random number in [0.0,1.0).

Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.Float64()
}
Output:

func (*Random) Int

func (r *Random) Int() int

Int returns a non-negative pseudo-random int.

Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.Int()
}
Output:

func (*Random) IntB added in v0.71.0

func (r *Random) IntB(min, max int) int

IntB returns, as an int, a non-negative pseudo-random number based on the received int range's [min,max].

func (*Random) IntBetween

func (r *Random) IntBetween(min, max int) int

IntBetween returns, as an int, a non-negative pseudo-random number based on the received int range's [min,max].

Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.IntBetween(24, 42)
}
Output:

func (*Random) IntN

func (r *Random) IntN(n int) int

IntN returns, as an int, a non-negative pseudo-random number in [0,n). It panics if n <= 0.

Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.IntN(42)
}
Output:

func (*Random) KeyFromMap

func (r *Random) KeyFromMap(anyMap interface{}) interface{}
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.KeyFromMap(map[string]struct{}{
		`foo`: {},
		`bar`: {},
		`baz`: {},
	}).(string)
}
Output:

func (*Random) Make added in v0.73.0

func (r *Random) Make(T any) any
Example
package main

import (
	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(random.CryptoSeed{})

	type ExampleStruct struct {
		Foo string
		Bar int
		Baz *int
	}

	_ = rnd.Make(&ExampleStruct{}).(*ExampleStruct) // returns a populated struct
}
Output:

func (*Random) Read added in v0.90.0

func (r *Random) Read(p []byte) (n int, err error)
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	p := make([]byte, 42)
	n, err := rnd.Read(p)

	_, _ = n, err
}
Output:

func (*Random) String

func (r *Random) String() string
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.String()
}
Output:

func (*Random) StringN

func (r *Random) StringN(length int) string
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.StringN(42)
}
Output:

func (*Random) StringNC added in v0.82.0

func (r *Random) StringNC(length int, charset string) string
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))
	rnd.StringNC(42, random.Charset())
	rnd.StringNC(42, random.CharsetASCII())
	rnd.StringNC(42, random.CharsetAlpha())
	rnd.StringNC(42, "ABC")
}
Output:

func (*Random) StringNWithCharset

func (r *Random) StringNWithCharset(length int, charset string) string
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))
	rnd.StringNWithCharset(42, random.Charset())
	rnd.StringNWithCharset(42, random.CharsetASCII())
	rnd.StringNWithCharset(42, random.CharsetAlpha())
	rnd.StringNWithCharset(42, "ABC")
}
Output:

func (*Random) Time

func (r *Random) Time() time.Time
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.Time()
}
Output:

func (*Random) TimeB added in v0.71.0

func (r *Random) TimeB(from, to time.Time) time.Time

TimeB returns, as an time.Time, a non-negative pseudo-random time in [from,to].

func (*Random) TimeBetween

func (r *Random) TimeBetween(from, to time.Time) time.Time

TimeBetween returns, as an time.Time, a non-negative pseudo-random time in [from,to].

Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))

	_ = rnd.TimeBetween(time.Now(), time.Now().Add(time.Hour))
}
Output:

func (*Random) TimeN added in v0.54.0

func (r *Random) TimeN(from time.Time, years, months, days int) time.Time
Example
package main

import (
	"math/rand"
	"time"

	"github.com/adamluzsi/testcase/random"
)

func main() {
	rnd := random.New(rand.NewSource(time.Now().Unix()))
	var (
		years  = 0
		months = 4
		days   = 2
	)
	_ = rnd.TimeN(time.Now(), years, months, days)
}
Output:

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL