gopter icon indicating copy to clipboard operation
gopter copied to clipboard

Not able to generate slice of pointers

Open Higan opened this issue 5 years ago • 1 comments

Hi,

I got an error when trying to generating a slice of pointers using the code below:

package main

import (
	"github.com/leanovate/gopter"
	"github.com/leanovate/gopter/gen"
	"github.com/leanovate/gopter/prop"
	"reflect"
)

type Empty struct {
	ID uint
}

func main() {
	properties := gopter.NewProperties(nil)

	properties.Property("just test pointer", prop.ForAll(
		func(nodes []*Empty) bool {
			return true
		},
		gen.SliceOf(gen.Struct(reflect.TypeOf(&Empty{}), map[string]gopter.Gen{
			"ID": gen.UInt(),
		})),
	))
	properties.Run(gopter.ConsoleReporter(false))

}

The error was:

! just test pointer: Error on property evaluation after 0 passed tests:
   Check paniced: reflect: Call using []main.Empty as type []*main.Empty
ARG_0: []

I think reflect.TypeOf(&Empty{}) returns *main.Empty instead of main.Empty, but according to the error messages, the generated type is []main.Empty; so I just wonder whether there's something wrong with my code here.

Higan avatar Apr 29 '20 06:04 Higan

At the moment you have to use "gen.StructPtr" instead of "gen.Struct" to generate pointers of structs rather than the struct itself.

I'm not sure if it would be a good idea to change the behavior of "gen.Struct" depending on the type you put in.

untoldwind avatar Apr 29 '20 14:04 untoldwind