/*
 * Copyright (c) 2013 Dave Collins <dave@davec.name>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

/*
Test Summary:
NOTE: For each test, a nil pointer, a single pointer and double pointer to the
base test element are also tested to ensure proper indirection across all types.

- Max int8, int16, int32, int64, int
- Max uint8, uint16, uint32, uint64, uint
- Boolean true and false
- Standard complex64 and complex128
- Array containing standard ints
- Array containing type with custom formatter on pointer receiver only
- Array containing interfaces
- Slice containing standard float32 values
- Slice containing type with custom formatter on pointer receiver only
- Slice containing interfaces
- Nil slice
- Standard string
- Nil interface
- Sub-interface
- Map with string keys and int vals
- Map with custom formatter type on pointer receiver only keys and vals
- Map with interface keys and values
- Map with nil interface value
- Struct with primitives
- Struct that contains another struct
- Struct that contains custom type with Stringer pointer interface via both
  exported and unexported fields
- Struct that contains embedded struct and field to same struct
- Uintptr to 0 (null pointer)
- Uintptr address of real variable
- Unsafe.Pointer to 0 (null pointer)
- Unsafe.Pointer to address of real variable
- Nil channel
- Standard int channel
- Function with no params and no returns
- Function with param and no returns
- Function with multiple params and multiple returns
- Struct that is circular through self referencing
- Structs that are circular through cross referencing
- Structs that are indirectly circular
- Type that panics in its Stringer interface
- Type that has a custom Error interface
- %x passthrough with uint
- %#x passthrough with uint
- %f passthrough with precision
- %f passthrough with width and precision
- %d passthrough with width
- %q passthrough with string
*/

package spew_test

import (
	"bytes"
	"fmt"
	"testing"
	"unsafe"

	"github.com/davecgh/go-spew/spew"
)

// formatterTest is used to describe a test to be perfomed against NewFormatter.
type formatterTest struct {
	format string
	in     interface{}
	wants  []string
}

// formatterTests houses all of the tests to be performed against NewFormatter.
var formatterTests = make([]formatterTest, 0)

// addFormatterTest is a helper method to append the passed input and desired
// result to formatterTests.
func addFormatterTest(format string, in interface{}, wants ...string) {
	test := formatterTest{format, in, wants}
	formatterTests = append(formatterTests, test)
}

func addIntFormatterTests() {
	// Max int8.
	v := int8(127)
	nv := (*int8)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "int8"
	vs := "127"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Max int16.
	v2 := int16(32767)
	nv2 := (*int16)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "int16"
	v2s := "32767"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Max int32.
	v3 := int32(2147483647)
	nv3 := (*int32)(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "int32"
	v3s := "2147483647"
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s)
	addFormatterTest("%v", &pv3, "<**>"+v3s)
	addFormatterTest("%v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")

	// Max int64.
	v4 := int64(9223372036854775807)
	nv4 := (*int64)(nil)
	pv4 := &v4
	v4Addr := fmt.Sprintf("%p", pv4)
	pv4Addr := fmt.Sprintf("%p", &pv4)
	v4t := "int64"
	v4s := "9223372036854775807"
	addFormatterTest("%v", v4, v4s)
	addFormatterTest("%v", pv4, "<*>"+v4s)
	addFormatterTest("%v", &pv4, "<**>"+v4s)
	addFormatterTest("%v", nv4, "<nil>")
	addFormatterTest("%+v", v4, v4s)
	addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s)
	addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%#v", v4, "("+v4t+")"+v4s)
	addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s)
	addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s)
	addFormatterTest("%#v", nv4, "(*"+v4t+")"+"<nil>")
	addFormatterTest("%#+v", v4, "("+v4t+")"+v4s)
	addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s)
	addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"<nil>")

	// Max int.
	v5 := int(2147483647)
	nv5 := (*int)(nil)
	pv5 := &v5
	v5Addr := fmt.Sprintf("%p", pv5)
	pv5Addr := fmt.Sprintf("%p", &pv5)
	v5t := "int"
	v5s := "2147483647"
	addFormatterTest("%v", v5, v5s)
	addFormatterTest("%v", pv5, "<*>"+v5s)
	addFormatterTest("%v", &pv5, "<**>"+v5s)
	addFormatterTest("%v", nv5, "<nil>")
	addFormatterTest("%+v", v5, v5s)
	addFormatterTest("%+v", pv5, "<*>("+v5Addr+")"+v5s)
	addFormatterTest("%+v", &pv5, "<**>("+pv5Addr+"->"+v5Addr+")"+v5s)
	addFormatterTest("%+v", nv5, "<nil>")
	addFormatterTest("%#v", v5, "("+v5t+")"+v5s)
	addFormatterTest("%#v", pv5, "(*"+v5t+")"+v5s)
	addFormatterTest("%#v", &pv5, "(**"+v5t+")"+v5s)
	addFormatterTest("%#v", nv5, "(*"+v5t+")"+"<nil>")
	addFormatterTest("%#+v", v5, "("+v5t+")"+v5s)
	addFormatterTest("%#+v", pv5, "(*"+v5t+")("+v5Addr+")"+v5s)
	addFormatterTest("%#+v", &pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")"+v5s)
	addFormatterTest("%#+v", nv5, "(*"+v5t+")"+"<nil>")
}

func addUintFormatterTests() {
	// Max uint8.
	v := uint8(255)
	nv := (*uint8)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "uint8"
	vs := "255"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Max uint16.
	v2 := uint16(65535)
	nv2 := (*uint16)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "uint16"
	v2s := "65535"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Max uint32.
	v3 := uint32(4294967295)
	nv3 := (*uint32)(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "uint32"
	v3s := "4294967295"
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s)
	addFormatterTest("%v", &pv3, "<**>"+v3s)
	addFormatterTest("%v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")

	// Max uint64.
	v4 := uint64(18446744073709551615)
	nv4 := (*uint64)(nil)
	pv4 := &v4
	v4Addr := fmt.Sprintf("%p", pv4)
	pv4Addr := fmt.Sprintf("%p", &pv4)
	v4t := "uint64"
	v4s := "18446744073709551615"
	addFormatterTest("%v", v4, v4s)
	addFormatterTest("%v", pv4, "<*>"+v4s)
	addFormatterTest("%v", &pv4, "<**>"+v4s)
	addFormatterTest("%v", nv4, "<nil>")
	addFormatterTest("%+v", v4, v4s)
	addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s)
	addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%#v", v4, "("+v4t+")"+v4s)
	addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s)
	addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s)
	addFormatterTest("%#v", nv4, "(*"+v4t+")"+"<nil>")
	addFormatterTest("%#+v", v4, "("+v4t+")"+v4s)
	addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s)
	addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"<nil>")

	// Max uint.
	v5 := uint(4294967295)
	nv5 := (*uint)(nil)
	pv5 := &v5
	v5Addr := fmt.Sprintf("%p", pv5)
	pv5Addr := fmt.Sprintf("%p", &pv5)
	v5t := "uint"
	v5s := "4294967295"
	addFormatterTest("%v", v5, v5s)
	addFormatterTest("%v", pv5, "<*>"+v5s)
	addFormatterTest("%v", &pv5, "<**>"+v5s)
	addFormatterTest("%v", nv5, "<nil>")
	addFormatterTest("%+v", v5, v5s)
	addFormatterTest("%+v", pv5, "<*>("+v5Addr+")"+v5s)
	addFormatterTest("%+v", &pv5, "<**>("+pv5Addr+"->"+v5Addr+")"+v5s)
	addFormatterTest("%+v", nv5, "<nil>")
	addFormatterTest("%#v", v5, "("+v5t+")"+v5s)
	addFormatterTest("%#v", pv5, "(*"+v5t+")"+v5s)
	addFormatterTest("%#v", &pv5, "(**"+v5t+")"+v5s)
	addFormatterTest("%#v", nv5, "(*"+v5t+")"+"<nil>")
	addFormatterTest("%#+v", v5, "("+v5t+")"+v5s)
	addFormatterTest("%#+v", pv5, "(*"+v5t+")("+v5Addr+")"+v5s)
	addFormatterTest("%#+v", &pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")"+v5s)
	addFormatterTest("%#v", nv5, "(*"+v5t+")"+"<nil>")
}

func addBoolFormatterTests() {
	// Boolean true.
	v := bool(true)
	nv := (*bool)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "bool"
	vs := "true"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Boolean false.
	v2 := bool(false)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "bool"
	v2s := "false"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
}

func addFloatFormatterTests() {
	// Standard float32.
	v := float32(3.1415)
	nv := (*float32)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "float32"
	vs := "3.1415"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Standard float64.
	v2 := float64(3.1415926)
	nv2 := (*float64)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "float64"
	v2s := "3.1415926"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")
}

func addComplexFormatterTests() {
	// Standard complex64.
	v := complex(float32(6), -2)
	nv := (*complex64)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "complex64"
	vs := "(6-2i)"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Standard complex128.
	v2 := complex(float64(-6), 2)
	nv2 := (*complex128)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "complex128"
	v2s := "(-6+2i)"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")
}

func addArrayFormatterTests() {
	// Array containing standard ints.
	v := [3]int{1, 2, 3}
	nv := (*[3]int)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "[3]int"
	vs := "[1 2 3]"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Array containing type with custom formatter on pointer receiver only.
	v2 := [3]pstringer{"1", "2", "3"}
	nv2 := (*[3]pstringer)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "[3]spew_test.pstringer"
	v2sp := "[stringer 1 stringer 2 stringer 3]"
	v2s := v2sp
	if spew.UnsafeDisabled {
		v2s = "[1 2 3]"
	}
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2sp)
	addFormatterTest("%v", &pv2, "<**>"+v2sp)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2sp)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2sp)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2sp)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2sp)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2sp)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2sp)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Array containing interfaces.
	v3 := [3]interface{}{"one", int(2), uint(3)}
	nv3 := (*[3]interface{})(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "[3]interface {}"
	v3t2 := "string"
	v3t3 := "int"
	v3t4 := "uint"
	v3s := "[one 2 3]"
	v3s2 := "[(" + v3t2 + ")one (" + v3t3 + ")2 (" + v3t4 + ")3]"
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s)
	addFormatterTest("%v", &pv3, "<**>"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s2)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s2)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s2)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s2)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s2)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s2)
	addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"<nil>")
}

func addSliceFormatterTests() {
	// Slice containing standard float32 values.
	v := []float32{3.14, 6.28, 12.56}
	nv := (*[]float32)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "[]float32"
	vs := "[3.14 6.28 12.56]"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Slice containing type with custom formatter on pointer receiver only.
	v2 := []pstringer{"1", "2", "3"}
	nv2 := (*[]pstringer)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "[]spew_test.pstringer"
	v2s := "[stringer 1 stringer 2 stringer 3]"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Slice containing interfaces.
	v3 := []interface{}{"one", int(2), uint(3), nil}
	nv3 := (*[]interface{})(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "[]interface {}"
	v3t2 := "string"
	v3t3 := "int"
	v3t4 := "uint"
	v3t5 := "interface {}"
	v3s := "[one 2 3 <nil>]"
	v3s2 := "[(" + v3t2 + ")one (" + v3t3 + ")2 (" + v3t4 + ")3 (" + v3t5 +
		")<nil>]"
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s)
	addFormatterTest("%v", &pv3, "<**>"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s2)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s2)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s2)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s2)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s2)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s2)
	addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"<nil>")

	// Nil slice.
	var v4 []int
	nv4 := (*[]int)(nil)
	pv4 := &v4
	v4Addr := fmt.Sprintf("%p", pv4)
	pv4Addr := fmt.Sprintf("%p", &pv4)
	v4t := "[]int"
	v4s := "<nil>"
	addFormatterTest("%v", v4, v4s)
	addFormatterTest("%v", pv4, "<*>"+v4s)
	addFormatterTest("%v", &pv4, "<**>"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%+v", v4, v4s)
	addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s)
	addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%#v", v4, "("+v4t+")"+v4s)
	addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s)
	addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s)
	addFormatterTest("%#v", nv4, "(*"+v4t+")"+"<nil>")
	addFormatterTest("%#+v", v4, "("+v4t+")"+v4s)
	addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s)
	addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"<nil>")
}

func addStringFormatterTests() {
	// Standard string.
	v := "test"
	nv := (*string)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "string"
	vs := "test"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")
}

func addInterfaceFormatterTests() {
	// Nil interface.
	var v interface{}
	nv := (*interface{})(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "interface {}"
	vs := "<nil>"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Sub-interface.
	v2 := interface{}(uint16(65535))
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "uint16"
	v2s := "65535"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
}

func addMapFormatterTests() {
	// Map with string keys and int vals.
	v := map[string]int{"one": 1, "two": 2}
	nilMap := map[string]int(nil)
	nv := (*map[string]int)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "map[string]int"
	vs := "map[one:1 two:2]"
	vs2 := "map[two:2 one:1]"
	addFormatterTest("%v", v, vs, vs2)
	addFormatterTest("%v", pv, "<*>"+vs, "<*>"+vs2)
	addFormatterTest("%v", &pv, "<**>"+vs, "<**>"+vs2)
	addFormatterTest("%+v", nilMap, "<nil>")
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs, vs2)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs, "<*>("+vAddr+")"+vs2)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs,
		"<**>("+pvAddr+"->"+vAddr+")"+vs2)
	addFormatterTest("%+v", nilMap, "<nil>")
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs, "("+vt+")"+vs2)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs, "(*"+vt+")"+vs2)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs, "(**"+vt+")"+vs2)
	addFormatterTest("%#v", nilMap, "("+vt+")"+"<nil>")
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs, "("+vt+")"+vs2)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs,
		"(*"+vt+")("+vAddr+")"+vs2)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs,
		"(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs2)
	addFormatterTest("%#+v", nilMap, "("+vt+")"+"<nil>")
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Map with custom formatter type on pointer receiver only keys and vals.
	v2 := map[pstringer]pstringer{"one": "1"}
	nv2 := (*map[pstringer]pstringer)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "map[spew_test.pstringer]spew_test.pstringer"
	v2s := "map[stringer one:stringer 1]"
	if spew.UnsafeDisabled {
		v2s = "map[one:1]"
	}
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Map with interface keys and values.
	v3 := map[interface{}]interface{}{"one": 1}
	nv3 := (*map[interface{}]interface{})(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "map[interface {}]interface {}"
	v3t1 := "string"
	v3t2 := "int"
	v3s := "map[one:1]"
	v3s2 := "map[(" + v3t1 + ")one:(" + v3t2 + ")1]"
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s)
	addFormatterTest("%v", &pv3, "<**>"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s2)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s2)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s2)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s2)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s2)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s2)
	addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"<nil>")

	// Map with nil interface value
	v4 := map[string]interface{}{"nil": nil}
	nv4 := (*map[string]interface{})(nil)
	pv4 := &v4
	v4Addr := fmt.Sprintf("%p", pv4)
	pv4Addr := fmt.Sprintf("%p", &pv4)
	v4t := "map[string]interface {}"
	v4t1 := "interface {}"
	v4s := "map[nil:<nil>]"
	v4s2 := "map[nil:(" + v4t1 + ")<nil>]"
	addFormatterTest("%v", v4, v4s)
	addFormatterTest("%v", pv4, "<*>"+v4s)
	addFormatterTest("%v", &pv4, "<**>"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%+v", v4, v4s)
	addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s)
	addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%#v", v4, "("+v4t+")"+v4s2)
	addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s2)
	addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s2)
	addFormatterTest("%#v", nv4, "(*"+v4t+")"+"<nil>")
	addFormatterTest("%#+v", v4, "("+v4t+")"+v4s2)
	addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s2)
	addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s2)
	addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"<nil>")
}

func addStructFormatterTests() {
	// Struct with primitives.
	type s1 struct {
		a int8
		b uint8
	}
	v := s1{127, 255}
	nv := (*s1)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "spew_test.s1"
	vt2 := "int8"
	vt3 := "uint8"
	vs := "{127 255}"
	vs2 := "{a:127 b:255}"
	vs3 := "{a:(" + vt2 + ")127 b:(" + vt3 + ")255}"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs2)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs2)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs2)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs3)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs3)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs3)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs3)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs3)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs3)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Struct that contains another struct.
	type s2 struct {
		s1 s1
		b  bool
	}
	v2 := s2{s1{127, 255}, true}
	nv2 := (*s2)(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "spew_test.s2"
	v2t2 := "spew_test.s1"
	v2t3 := "int8"
	v2t4 := "uint8"
	v2t5 := "bool"
	v2s := "{{127 255} true}"
	v2s2 := "{s1:{a:127 b:255} b:true}"
	v2s3 := "{s1:(" + v2t2 + "){a:(" + v2t3 + ")127 b:(" + v2t4 + ")255} b:(" +
		v2t5 + ")true}"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s2)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s2)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s2)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s3)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s3)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s3)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s3)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s3)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s3)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Struct that contains custom type with Stringer pointer interface via both
	// exported and unexported fields.
	type s3 struct {
		s pstringer
		S pstringer
	}
	v3 := s3{"test", "test2"}
	nv3 := (*s3)(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "spew_test.s3"
	v3t2 := "spew_test.pstringer"
	v3s := "{stringer test stringer test2}"
	v3sp := v3s
	v3s2 := "{s:stringer test S:stringer test2}"
	v3s2p := v3s2
	v3s3 := "{s:(" + v3t2 + ")stringer test S:(" + v3t2 + ")stringer test2}"
	v3s3p := v3s3
	if spew.UnsafeDisabled {
		v3s = "{test test2}"
		v3sp = "{test stringer test2}"
		v3s2 = "{s:test S:test2}"
		v3s2p = "{s:test S:stringer test2}"
		v3s3 = "{s:(" + v3t2 + ")test S:(" + v3t2 + ")test2}"
		v3s3p = "{s:(" + v3t2 + ")test S:(" + v3t2 + ")stringer test2}"
	}
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3sp)
	addFormatterTest("%v", &pv3, "<**>"+v3sp)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s2)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s2p)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s2p)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s3)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s3p)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s3p)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s3)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s3p)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s3p)
	addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"<nil>")

	// Struct that contains embedded struct and field to same struct.
	e := embed{"embedstr"}
	v4 := embedwrap{embed: &e, e: &e}
	nv4 := (*embedwrap)(nil)
	pv4 := &v4
	eAddr := fmt.Sprintf("%p", &e)
	v4Addr := fmt.Sprintf("%p", pv4)
	pv4Addr := fmt.Sprintf("%p", &pv4)
	v4t := "spew_test.embedwrap"
	v4t2 := "spew_test.embed"
	v4t3 := "string"
	v4s := "{<*>{embedstr} <*>{embedstr}}"
	v4s2 := "{embed:<*>(" + eAddr + "){a:embedstr} e:<*>(" + eAddr +
		"){a:embedstr}}"
	v4s3 := "{embed:(*" + v4t2 + "){a:(" + v4t3 + ")embedstr} e:(*" + v4t2 +
		"){a:(" + v4t3 + ")embedstr}}"
	v4s4 := "{embed:(*" + v4t2 + ")(" + eAddr + "){a:(" + v4t3 +
		")embedstr} e:(*" + v4t2 + ")(" + eAddr + "){a:(" + v4t3 + ")embedstr}}"
	addFormatterTest("%v", v4, v4s)
	addFormatterTest("%v", pv4, "<*>"+v4s)
	addFormatterTest("%v", &pv4, "<**>"+v4s)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%+v", v4, v4s2)
	addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s2)
	addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s2)
	addFormatterTest("%+v", nv4, "<nil>")
	addFormatterTest("%#v", v4, "("+v4t+")"+v4s3)
	addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s3)
	addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s3)
	addFormatterTest("%#v", nv4, "(*"+v4t+")"+"<nil>")
	addFormatterTest("%#+v", v4, "("+v4t+")"+v4s4)
	addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s4)
	addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s4)
	addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"<nil>")
}

func addUintptrFormatterTests() {
	// Null pointer.
	v := uintptr(0)
	nv := (*uintptr)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "uintptr"
	vs := "<nil>"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Address of real variable.
	i := 1
	v2 := uintptr(unsafe.Pointer(&i))
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "uintptr"
	v2s := fmt.Sprintf("%p", &i)
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
}

func addUnsafePointerFormatterTests() {
	// Null pointer.
	v := unsafe.Pointer(uintptr(0))
	nv := (*unsafe.Pointer)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "unsafe.Pointer"
	vs := "<nil>"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Address of real variable.
	i := 1
	v2 := unsafe.Pointer(&i)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "unsafe.Pointer"
	v2s := fmt.Sprintf("%p", &i)
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
}

func addChanFormatterTests() {
	// Nil channel.
	var v chan int
	pv := &v
	nv := (*chan int)(nil)
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "chan int"
	vs := "<nil>"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Real channel.
	v2 := make(chan int)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "chan int"
	v2s := fmt.Sprintf("%p", v2)
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
}

func addFuncFormatterTests() {
	// Function with no params and no returns.
	v := addIntFormatterTests
	nv := (*func())(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "func()"
	vs := fmt.Sprintf("%p", v)
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")

	// Function with param and no returns.
	v2 := TestFormatter
	nv2 := (*func(*testing.T))(nil)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "func(*testing.T)"
	v2s := fmt.Sprintf("%p", v2)
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s)
	addFormatterTest("%v", &pv2, "<**>"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%+v", v2, v2s)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%+v", nv2, "<nil>")
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s)
	addFormatterTest("%#v", nv2, "(*"+v2t+")"+"<nil>")
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s)
	addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"<nil>")

	// Function with multiple params and multiple returns.
	var v3 = func(i int, s string) (b bool, err error) {
		return true, nil
	}
	nv3 := (*func(int, string) (bool, error))(nil)
	pv3 := &v3
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "func(int, string) (bool, error)"
	v3s := fmt.Sprintf("%p", v3)
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s)
	addFormatterTest("%v", &pv3, "<**>"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%+v", v3, v3s)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%+v", nv3, "<nil>")
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s)
	addFormatterTest("%#v", nv3, "(*"+v3t+")"+"<nil>")
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s)
	addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"<nil>")
}

func addCircularFormatterTests() {
	// Struct that is circular through self referencing.
	type circular struct {
		c *circular
	}
	v := circular{nil}
	v.c = &v
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "spew_test.circular"
	vs := "{<*>{<*><shown>}}"
	vs2 := "{<*><shown>}"
	vs3 := "{c:<*>(" + vAddr + "){c:<*>(" + vAddr + ")<shown>}}"
	vs4 := "{c:<*>(" + vAddr + ")<shown>}"
	vs5 := "{c:(*" + vt + "){c:(*" + vt + ")<shown>}}"
	vs6 := "{c:(*" + vt + ")<shown>}"
	vs7 := "{c:(*" + vt + ")(" + vAddr + "){c:(*" + vt + ")(" + vAddr +
		")<shown>}}"
	vs8 := "{c:(*" + vt + ")(" + vAddr + ")<shown>}"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs2)
	addFormatterTest("%v", &pv, "<**>"+vs2)
	addFormatterTest("%+v", v, vs3)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs4)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs4)
	addFormatterTest("%#v", v, "("+vt+")"+vs5)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs6)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs6)
	addFormatterTest("%#+v", v, "("+vt+")"+vs7)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs8)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs8)

	// Structs that are circular through cross referencing.
	v2 := xref1{nil}
	ts2 := xref2{&v2}
	v2.ps2 = &ts2
	pv2 := &v2
	ts2Addr := fmt.Sprintf("%p", &ts2)
	v2Addr := fmt.Sprintf("%p", pv2)
	pv2Addr := fmt.Sprintf("%p", &pv2)
	v2t := "spew_test.xref1"
	v2t2 := "spew_test.xref2"
	v2s := "{<*>{<*>{<*><shown>}}}"
	v2s2 := "{<*>{<*><shown>}}"
	v2s3 := "{ps2:<*>(" + ts2Addr + "){ps1:<*>(" + v2Addr + "){ps2:<*>(" +
		ts2Addr + ")<shown>}}}"
	v2s4 := "{ps2:<*>(" + ts2Addr + "){ps1:<*>(" + v2Addr + ")<shown>}}"
	v2s5 := "{ps2:(*" + v2t2 + "){ps1:(*" + v2t + "){ps2:(*" + v2t2 +
		")<shown>}}}"
	v2s6 := "{ps2:(*" + v2t2 + "){ps1:(*" + v2t + ")<shown>}}"
	v2s7 := "{ps2:(*" + v2t2 + ")(" + ts2Addr + "){ps1:(*" + v2t +
		")(" + v2Addr + "){ps2:(*" + v2t2 + ")(" + ts2Addr +
		")<shown>}}}"
	v2s8 := "{ps2:(*" + v2t2 + ")(" + ts2Addr + "){ps1:(*" + v2t +
		")(" + v2Addr + ")<shown>}}"
	addFormatterTest("%v", v2, v2s)
	addFormatterTest("%v", pv2, "<*>"+v2s2)
	addFormatterTest("%v", &pv2, "<**>"+v2s2)
	addFormatterTest("%+v", v2, v2s3)
	addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s4)
	addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s4)
	addFormatterTest("%#v", v2, "("+v2t+")"+v2s5)
	addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s6)
	addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s6)
	addFormatterTest("%#+v", v2, "("+v2t+")"+v2s7)
	addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s8)
	addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s8)

	// Structs that are indirectly circular.
	v3 := indirCir1{nil}
	tic2 := indirCir2{nil}
	tic3 := indirCir3{&v3}
	tic2.ps3 = &tic3
	v3.ps2 = &tic2
	pv3 := &v3
	tic2Addr := fmt.Sprintf("%p", &tic2)
	tic3Addr := fmt.Sprintf("%p", &tic3)
	v3Addr := fmt.Sprintf("%p", pv3)
	pv3Addr := fmt.Sprintf("%p", &pv3)
	v3t := "spew_test.indirCir1"
	v3t2 := "spew_test.indirCir2"
	v3t3 := "spew_test.indirCir3"
	v3s := "{<*>{<*>{<*>{<*><shown>}}}}"
	v3s2 := "{<*>{<*>{<*><shown>}}}"
	v3s3 := "{ps2:<*>(" + tic2Addr + "){ps3:<*>(" + tic3Addr + "){ps1:<*>(" +
		v3Addr + "){ps2:<*>(" + tic2Addr + ")<shown>}}}}"
	v3s4 := "{ps2:<*>(" + tic2Addr + "){ps3:<*>(" + tic3Addr + "){ps1:<*>(" +
		v3Addr + ")<shown>}}}"
	v3s5 := "{ps2:(*" + v3t2 + "){ps3:(*" + v3t3 + "){ps1:(*" + v3t +
		"){ps2:(*" + v3t2 + ")<shown>}}}}"
	v3s6 := "{ps2:(*" + v3t2 + "){ps3:(*" + v3t3 + "){ps1:(*" + v3t +
		")<shown>}}}"
	v3s7 := "{ps2:(*" + v3t2 + ")(" + tic2Addr + "){ps3:(*" + v3t3 + ")(" +
		tic3Addr + "){ps1:(*" + v3t + ")(" + v3Addr + "){ps2:(*" + v3t2 +
		")(" + tic2Addr + ")<shown>}}}}"
	v3s8 := "{ps2:(*" + v3t2 + ")(" + tic2Addr + "){ps3:(*" + v3t3 + ")(" +
		tic3Addr + "){ps1:(*" + v3t + ")(" + v3Addr + ")<shown>}}}"
	addFormatterTest("%v", v3, v3s)
	addFormatterTest("%v", pv3, "<*>"+v3s2)
	addFormatterTest("%v", &pv3, "<**>"+v3s2)
	addFormatterTest("%+v", v3, v3s3)
	addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s4)
	addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s4)
	addFormatterTest("%#v", v3, "("+v3t+")"+v3s5)
	addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s6)
	addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s6)
	addFormatterTest("%#+v", v3, "("+v3t+")"+v3s7)
	addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s8)
	addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s8)
}

func addPanicFormatterTests() {
	// Type that panics in its Stringer interface.
	v := panicer(127)
	nv := (*panicer)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "spew_test.panicer"
	vs := "(PANIC=test panic)127"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")
}

func addErrorFormatterTests() {
	// Type that has a custom Error interface.
	v := customError(127)
	nv := (*customError)(nil)
	pv := &v
	vAddr := fmt.Sprintf("%p", pv)
	pvAddr := fmt.Sprintf("%p", &pv)
	vt := "spew_test.customError"
	vs := "error: 127"
	addFormatterTest("%v", v, vs)
	addFormatterTest("%v", pv, "<*>"+vs)
	addFormatterTest("%v", &pv, "<**>"+vs)
	addFormatterTest("%v", nv, "<nil>")
	addFormatterTest("%+v", v, vs)
	addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs)
	addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%+v", nv, "<nil>")
	addFormatterTest("%#v", v, "("+vt+")"+vs)
	addFormatterTest("%#v", pv, "(*"+vt+")"+vs)
	addFormatterTest("%#v", &pv, "(**"+vt+")"+vs)
	addFormatterTest("%#v", nv, "(*"+vt+")"+"<nil>")
	addFormatterTest("%#+v", v, "("+vt+")"+vs)
	addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs)
	addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs)
	addFormatterTest("%#+v", nv, "(*"+vt+")"+"<nil>")
}

func addPassthroughFormatterTests() {
	// %x passthrough with uint.
	v := uint(4294967295)
	pv := &v
	vAddr := fmt.Sprintf("%x", pv)
	pvAddr := fmt.Sprintf("%x", &pv)
	vs := "ffffffff"
	addFormatterTest("%x", v, vs)
	addFormatterTest("%x", pv, vAddr)
	addFormatterTest("%x", &pv, pvAddr)

	// %#x passthrough with uint.
	v2 := int(2147483647)
	pv2 := &v2
	v2Addr := fmt.Sprintf("%#x", pv2)
	pv2Addr := fmt.Sprintf("%#x", &pv2)
	v2s := "0x7fffffff"
	addFormatterTest("%#x", v2, v2s)
	addFormatterTest("%#x", pv2, v2Addr)
	addFormatterTest("%#x", &pv2, pv2Addr)

	// %f passthrough with precision.
	addFormatterTest("%.2f", 3.1415, "3.14")
	addFormatterTest("%.3f", 3.1415, "3.142")
	addFormatterTest("%.4f", 3.1415, "3.1415")

	// %f passthrough with width and precision.
	addFormatterTest("%5.2f", 3.1415, " 3.14")
	addFormatterTest("%6.3f", 3.1415, " 3.142")
	addFormatterTest("%7.4f", 3.1415, " 3.1415")

	// %d passthrough with width.
	addFormatterTest("%3d", 127, "127")
	addFormatterTest("%4d", 127, " 127")
	addFormatterTest("%5d", 127, "  127")

	// %q passthrough with string.
	addFormatterTest("%q", "test", "\"test\"")
}

// TestFormatter executes all of the tests described by formatterTests.
func TestFormatter(t *testing.T) {
	// Setup tests.
	addIntFormatterTests()
	addUintFormatterTests()
	addBoolFormatterTests()
	addFloatFormatterTests()
	addComplexFormatterTests()
	addArrayFormatterTests()
	addSliceFormatterTests()
	addStringFormatterTests()
	addInterfaceFormatterTests()
	addMapFormatterTests()
	addStructFormatterTests()
	addUintptrFormatterTests()
	addUnsafePointerFormatterTests()
	addChanFormatterTests()
	addFuncFormatterTests()
	addCircularFormatterTests()
	addPanicFormatterTests()
	addErrorFormatterTests()
	addPassthroughFormatterTests()

	t.Logf("Running %d tests", len(formatterTests))
	for i, test := range formatterTests {
		buf := new(bytes.Buffer)
		spew.Fprintf(buf, test.format, test.in)
		s := buf.String()
		if testFailed(s, test.wants) {
			t.Errorf("Formatter #%d format: %s got: %s %s", i, test.format, s,
				stringizeWants(test.wants))
			continue
		}
	}
}

type testStruct struct {
	x int
}

func (ts testStruct) String() string {
	return fmt.Sprintf("ts.%d", ts.x)
}

type testStructP struct {
	x int
}

func (ts *testStructP) String() string {
	return fmt.Sprintf("ts.%d", ts.x)
}

func TestPrintSortedKeys(t *testing.T) {
	cfg := spew.ConfigState{SortKeys: true}
	s := cfg.Sprint(map[int]string{1: "1", 3: "3", 2: "2"})
	expected := "map[1:1 2:2 3:3]"
	if s != expected {
		t.Errorf("Sorted keys mismatch 1:\n  %v %v", s, expected)
	}

	s = cfg.Sprint(map[stringer]int{"1": 1, "3": 3, "2": 2})
	expected = "map[stringer 1:1 stringer 2:2 stringer 3:3]"
	if s != expected {
		t.Errorf("Sorted keys mismatch 2:\n  %v %v", s, expected)
	}

	s = cfg.Sprint(map[pstringer]int{pstringer("1"): 1, pstringer("3"): 3, pstringer("2"): 2})
	expected = "map[stringer 1:1 stringer 2:2 stringer 3:3]"
	if spew.UnsafeDisabled {
		expected = "map[1:1 2:2 3:3]"
	}
	if s != expected {
		t.Errorf("Sorted keys mismatch 3:\n  %v %v", s, expected)
	}

	s = cfg.Sprint(map[testStruct]int{testStruct{1}: 1, testStruct{3}: 3, testStruct{2}: 2})
	expected = "map[ts.1:1 ts.2:2 ts.3:3]"
	if s != expected {
		t.Errorf("Sorted keys mismatch 4:\n  %v %v", s, expected)
	}

	if !spew.UnsafeDisabled {
		s = cfg.Sprint(map[testStructP]int{testStructP{1}: 1, testStructP{3}: 3, testStructP{2}: 2})
		expected = "map[ts.1:1 ts.2:2 ts.3:3]"
		if s != expected {
			t.Errorf("Sorted keys mismatch 5:\n  %v %v", s, expected)
		}
	}

	s = cfg.Sprint(map[customError]int{customError(1): 1, customError(3): 3, customError(2): 2})
	expected = "map[error: 1:1 error: 2:2 error: 3:3]"
	if s != expected {
		t.Errorf("Sorted keys mismatch 6:\n  %v %v", s, expected)
	}
}
