diff --git a/matrix.go b/matrix.go index 45f89ba..4a71ec3 100644 --- a/matrix.go +++ b/matrix.go @@ -107,7 +107,7 @@ func (g *generator[T]) elem() T { ftype := field.Type() val := g.dims[i][g.n[i]] - if ftype.Kind() == reflect.Pointer { + if ftype.Kind() == reflect.Pointer && !val.IsNil() { ptr := reflect.New(val.Type().Elem()) ptr.Elem().Set(val.Elem()) field.Set(ptr) diff --git a/matrix_test.go b/matrix_test.go index 39c681f..4371883 100644 --- a/matrix_test.go +++ b/matrix_test.go @@ -122,3 +122,23 @@ func TestSeq_UnexportedField(t *testing.T) { tm.AssertExpectations(t) } + +func TestNilPointers(t *testing.T) { + t.Parallel() + + type tcase struct { + Y *int + } + + expected := []tcase{ + {Y: nil}, + {Y: ptrTo(1)}, + } + generated := slices.Collect(Generate(t, tcase{}, + []*int{nil, ptrTo(1)})) + + if !reflect.DeepEqual(expected, generated) { + t.Logf("Expected: %v, got: %v", expected, generated) + t.Fail() + } +}