randomness

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Sep 22, 2021 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

Package Randomness provides the ability to generate random integers. It has the ability to be collision-free (set `excludePorts`), also - in this case, to limit the amount of retry (set `maxRetry`).

Examples:

See `example_test.go` or the Example section of the GoDoc documention.

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	ErrFailedToGenerateRangeSaturated = customerror.NewFailedToError("to generate, range saturated", "", nil)
	ErrFailedToGenerateReacedMaxRetry = customerror.NewFailedToError("to generate, reached max retry", "", nil)
	ErrInvalidMinBiggerThanMax        = customerror.NewInvalidError("param. Min can't be bigger than max", "", nil)
	ErrInvalidMinOrMaxLessThanZero    = customerror.NewInvalidError("params. `min`, and `max` need to be bigger than zero", "", nil)
)

Functions

This section is empty.

Types

type Randomness

type Randomness struct {
	CollisionFree bool

	Max int
	Min int
	// contains filtered or unexported fields
}

func New

func New(min, max, maxRetry int, collisionFree bool) (*Randomness, error)
Example (Generate)

Demonstrates how to generate a random number (integer)

r, err := New(0, 5, 0, false)
if err != nil {
	log.Fatalln(err)
}

n, err := r.Generate()
if err != nil {
	log.Fatalln(err)
}

fmt.Println(n < 0 && n > 5)
Output:
false
Example (Generate_collisionFree)

Demonstrates how to generate a random number (integer) - with the collision-free option, and no collision.

errMsgs := []error{}

r, err := New(1, 10, 0, true)
if err != nil {
	log.Fatalln(err)
}

for i := 0; i < 3; i++ {
	_, err := r.Generate()

	if err != nil {
		errMsgs = append(errMsgs, err)
	}
}

saturated := false

for _, err := range errMsgs {
	if errors.Is(err, ErrFailedToGenerateRangeSaturated) {
		saturated = true
	}
}

fmt.Println(saturated)
Output:
false
Example (Generate_collisionFreeError)

Demonstrates how to generate a random number (integer) - with the collision-free option, but causing collision.

errMsgs := []error{}

r, err := New(1, 3, 0, true)
if err != nil {
	log.Fatalln(err)
}

for i := 0; i < 10; i++ {
	_, err := r.Generate()

	if err != nil {
		errMsgs = append(errMsgs, err)
	}
}

saturated := false

for _, err := range errMsgs {
	if errors.Is(err, ErrFailedToGenerateRangeSaturated) {
		saturated = true
	}
}

fmt.Println(saturated)
Output:
true
Example (Generate_collisionFreeMaxRetry)

Demonstrates how to generate a random number (integer) - with the collision-free option, no collision, and with maxRetry.

errMsgs := []error{}

r, err := New(1, 10, 100, true)
if err != nil {
	log.Fatalln(err)
}

for i := 0; i < 3; i++ {
	_, err := r.Generate()

	if err != nil {
		errMsgs = append(errMsgs, err)
	}
}

saturated := false
reachedMaxRetries := false

for _, err := range errMsgs {
	if errors.Is(err, ErrFailedToGenerateRangeSaturated) {
		saturated = true
	}

	if errors.Is(err, ErrFailedToGenerateReacedMaxRetry) {
		reachedMaxRetries = true
	}
}

fmt.Println(saturated)
fmt.Println(reachedMaxRetries)
Output:
false
false
Example (MustGenerate)

Demonstrates how to generate a random number (integer)

r, err := New(0, 5, 0, false)
if err != nil {
	log.Fatalln(err)
}

n := r.MustGenerate()

fmt.Println(n < 0 && n > 5)
Output:
false

func (*Randomness) Generate

func (r *Randomness) Generate() (int, error)

func (*Randomness) MustGenerate

func (r *Randomness) MustGenerate() int

MustGenerate is like `RandomPortGenerator`, but will panic in case of any error.

Jump to

Keyboard shortcuts

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