# TODO(jayconrod): support shared memory on more platforms.
[!darwin] [!linux] [!windows] skip

[short] skip

# When running seed inputs, T.Parallel should let multiple inputs run in
# parallel.
go test -run=FuzzSeed

# When fuzzing, T.Parallel should be safe to call, but it should have no effect.
# We just check that it doesn't hang, which would be the most obvious
# failure mode.
# TODO(jayconrod): check for the string "after T.Parallel". It's not printed
# by 'go test', so we can't distinguish that crasher from some other panic.
! go test -run=FuzzMutate -fuzz=FuzzMutate
exists testdata/fuzz/FuzzMutate

-- go.mod --
module fuzz_parallel

go 1.17
-- fuzz_parallel_test.go --
package fuzz_parallel

import (
	"sort"
	"sync"
	"testing"
)

func FuzzSeed(f *testing.F) {
	for _, v := range [][]byte{{'a'}, {'b'}, {'c'}} {
		f.Add(v)
	}

	var mu sync.Mutex
	var before, after []byte
	f.Cleanup(func() {
		sort.Slice(after, func(i, j int) bool { return after[i] < after[j] })
		got := string(before) + string(after)
		want := "abcabc"
		if got != want {
			f.Fatalf("got %q; want %q", got, want)
		}
	})

	f.Fuzz(func(t *testing.T, b []byte) {
		before = append(before, b...)
		t.Parallel()
		mu.Lock()
		after = append(after, b...)
		mu.Unlock()
	})
}

func FuzzMutate(f *testing.F) {
	f.Fuzz(func(t *testing.T, _ []byte) {
		t.Parallel()
		t.Error("after T.Parallel")
	})
}
