package web
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// To tell you the truth, I'm not actually sure how many of these cases are
|
|
// needed. Presumably someone with more patience than I could comb through
|
|
// http://golang.org/s/go11func and figure out what all the different cases I
|
|
// ought to test are, but I think this test includes all the cases I care about
|
|
// and is at least reasonably thorough.
|
|
|
|
func a() string {
|
|
return "A"
|
|
}
|
|
func b() string {
|
|
return "B"
|
|
}
|
|
func mkFn(s string) func() string {
|
|
return func() string {
|
|
return s
|
|
}
|
|
}
|
|
|
|
var c = mkFn("C")
|
|
var d = mkFn("D")
|
|
var e = a
|
|
var f = c
|
|
var g = mkFn("D")
|
|
|
|
type Type string
|
|
|
|
func (t *Type) String() string {
|
|
return string(*t)
|
|
}
|
|
|
|
var t1 = Type("hi")
|
|
var t2 = Type("bye")
|
|
var t1f = t1.String
|
|
var t2f = t2.String
|
|
|
|
var funcEqualTests = []struct {
|
|
a, b func() string
|
|
result bool
|
|
}{
|
|
{a, a, true},
|
|
{a, b, false},
|
|
{b, b, true},
|
|
{a, c, false},
|
|
{c, c, true},
|
|
{c, d, false},
|
|
{a, e, true},
|
|
{a, f, false},
|
|
{c, f, true},
|
|
{e, f, false},
|
|
{d, g, false},
|
|
{t1f, t1f, true},
|
|
{t1f, t2f, false},
|
|
}
|
|
|
|
func TestFuncEqual(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
for _, test := range funcEqualTests {
|
|
r := funcEqual(test.a, test.b)
|
|
if r != test.result {
|
|
t.Errorf("funcEqual(%v, %v) should have been %v",
|
|
test.a, test.b, test.result)
|
|
}
|
|
}
|
|
h := mkFn("H")
|
|
i := h
|
|
j := mkFn("H")
|
|
k := a
|
|
if !funcEqual(h, i) {
|
|
t.Errorf("h and i should have been equal")
|
|
}
|
|
if funcEqual(h, j) {
|
|
t.Errorf("h and j should not have been equal")
|
|
}
|
|
if !funcEqual(a, k) {
|
|
t.Errorf("a and k should have been equal")
|
|
}
|
|
}
|