--- /dev/null
+// Copyright 2019, The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package value
+
+import (
+ "archive/tar"
+ "math"
+ "reflect"
+ "testing"
+)
+
+func TestIsZero(t *testing.T) {
+ tests := []struct {
+ in interface{}
+ want bool
+ }{
+ {0, true},
+ {1, false},
+ {"", true},
+ {"foo", false},
+ {[]byte(nil), true},
+ {[]byte{}, false},
+ {map[string]bool(nil), true},
+ {map[string]bool{}, false},
+ {tar.Header{}, true},
+ {&tar.Header{}, false},
+ {tar.Header{Name: "foo"}, false},
+ {(chan bool)(nil), true},
+ {make(chan bool), false},
+ {(func(*testing.T))(nil), true},
+ {TestIsZero, false},
+ {[...]int{0, 0, 0}, true},
+ {[...]int{0, 1, 0}, false},
+ {math.Copysign(0, +1), true},
+ {math.Copysign(0, -1), false},
+ {complex(math.Copysign(0, +1), math.Copysign(0, +1)), true},
+ {complex(math.Copysign(0, -1), math.Copysign(0, +1)), false},
+ {complex(math.Copysign(0, +1), math.Copysign(0, -1)), false},
+ {complex(math.Copysign(0, -1), math.Copysign(0, -1)), false},
+ }
+
+ for _, tt := range tests {
+ t.Run("", func(t *testing.T) {
+ got := IsZero(reflect.ValueOf(tt.in))
+ if got != tt.want {
+ t.Errorf("IsZero(%v) = %v, want %v", tt.in, got, tt.want)
+ }
+ })
+ }
+}