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