forked from leanovate/gopter
/
arbitraries.go
41 lines (35 loc) · 1.04 KB
/
arbitraries.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package arbitrary
import (
"reflect"
"time"
"github.com/leanovate/gopter"
"github.com/leanovate/gopter/gen"
)
// Arbitraries defines a context to generate arbitrary values of any kind.
// Values are generated by either providing a generator for a specific type
// or by creating a generator on the fly using golang reflection.
type Arbitraries struct {
generators map[reflect.Type]gopter.Gen
}
// DefaultArbitraries creates a default arbitrary context with the widest
// possible ranges for all types.
func DefaultArbitraries() *Arbitraries {
return &Arbitraries{
generators: map[reflect.Type]gopter.Gen{
reflect.TypeOf(time.Now()): gen.Time(),
},
}
}
// GenForType gets a generator for a generator for a type
func (a *Arbitraries) GenForType(rt reflect.Type) gopter.Gen {
if gen, ok := a.generators[rt]; ok {
return gen
}
return a.genForKind(rt)
}
// RegisterGen registers a generator
func (a *Arbitraries) RegisterGen(gen gopter.Gen) {
result := gen(gopter.DefaultGenParameters())
rt := result.ResultType
a.generators[rt] = gen
}