}
func TestFuzz(t *testing.T) {
- testRoundtrip := func(block *Block) bool {
+ testRoundtrip := func(block Block) bool {
for key := range block.Headers {
if strings.Contains(key, ":") {
// Keys with colons cannot be encoded.
}
var buf bytes.Buffer
- err := Encode(&buf, block)
+ err := Encode(&buf, &block)
decoded, rest := Decode(buf.Bytes())
switch {
case err != nil:
- t.Errorf("Encode of %#v resulted in error: %s", block, err)
- case !reflect.DeepEqual(block, decoded):
- t.Errorf("Encode of %#v decoded as %#v", block, decoded)
+ t.Errorf("Encode of %#v resulted in error: %s", &block, err)
+ case !reflect.DeepEqual(&block, decoded):
+ t.Errorf("Encode of %#v decoded as %#v", &block, decoded)
case len(rest) != 0:
t.Errorf("Encode of %#v decoded correctly, but with %x left over", block, rest)
default:
}
// Explicitly test the empty block.
- if !testRoundtrip(&Block{
+ if !testRoundtrip(Block{
Type: "EMPTY",
Headers: make(map[string]string),
Bytes: []byte{},
v.SetMapIndex(key, value)
}
case reflect.Ptr:
- elem, ok := Value(concrete.Elem(), rand)
- if !ok {
- return reflect.Value{}, false
+ if rand.Intn(complexSize) == 0 {
+ v.Set(reflect.Zero(concrete)) // Generate nil pointer.
+ } else {
+ elem, ok := Value(concrete.Elem(), rand)
+ if !ok {
+ return reflect.Value{}, false
+ }
+ v.Set(reflect.New(concrete.Elem()))
+ v.Elem().Set(elem)
}
- v.Set(reflect.New(concrete.Elem()))
- v.Elem().Set(elem)
case reflect.Slice:
numElems := rand.Intn(complexSize)
v.Set(reflect.MakeSlice(concrete, numElems, numElems))
func fMapAlias(a TestMapAlias) TestMapAlias { return a }
func fPtr(a *int) *int {
+ if a == nil {
+ return nil
+ }
b := *a
return &b
}
t.Errorf("#3 Error was not a SetupError: %s", err)
}
}
+
+// The following test didn't terminate because nil pointers were not
+// generated.
+// Issue 8818.
+func TestNilPointers(t *testing.T) {
+ type Recursive struct {
+ Next *Recursive
+ }
+
+ f := func(rec Recursive) bool {
+ return true
+ }
+ Check(f, nil)
+}