| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | 
							- // Copyright 2009 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 reflect
 
- import (
 
- 	"testing"
 
- )
 
- func TestEqualities(t *testing.T) {
 
- 	e := Equalities{}
 
- 	type Bar struct {
 
- 		X int
 
- 	}
 
- 	type Baz struct {
 
- 		Y Bar
 
- 	}
 
- 	err := e.AddFuncs(
 
- 		func(a, b int) bool {
 
- 			return a+1 == b
 
- 		},
 
- 		func(a, b Bar) bool {
 
- 			return a.X*10 == b.X
 
- 		},
 
- 	)
 
- 	if err != nil {
 
- 		t.Fatalf("Unexpected: %v", err)
 
- 	}
 
- 	type Foo struct {
 
- 		X int
 
- 	}
 
- 	table := []struct {
 
- 		a, b  interface{}
 
- 		equal bool
 
- 	}{
 
- 		{1, 2, true},
 
- 		{2, 1, false},
 
- 		{"foo", "fo", false},
 
- 		{"foo", "foo", true},
 
- 		{"foo", "foobar", false},
 
- 		{Foo{1}, Foo{2}, true},
 
- 		{Foo{2}, Foo{1}, false},
 
- 		{Bar{1}, Bar{10}, true},
 
- 		{&Bar{1}, &Bar{10}, true},
 
- 		{Baz{Bar{1}}, Baz{Bar{10}}, true},
 
- 		{[...]string{}, [...]string{"1", "2", "3"}, false},
 
- 		{[...]string{"1"}, [...]string{"1", "2", "3"}, false},
 
- 		{[...]string{"1", "2", "3"}, [...]string{}, false},
 
- 		{[...]string{"1", "2", "3"}, [...]string{"1", "2", "3"}, true},
 
- 		{map[string]int{"foo": 1}, map[string]int{}, false},
 
- 		{map[string]int{"foo": 1}, map[string]int{"foo": 2}, true},
 
- 		{map[string]int{"foo": 2}, map[string]int{"foo": 1}, false},
 
- 		{map[string]int{"foo": 1}, map[string]int{"foo": 2, "bar": 6}, false},
 
- 		{map[string]int{"foo": 1, "bar": 6}, map[string]int{"foo": 2}, false},
 
- 		{map[string]int{}, map[string]int(nil), true},
 
- 		{[]string(nil), []string(nil), true},
 
- 		{[]string{}, []string(nil), true},
 
- 		{[]string(nil), []string{}, true},
 
- 		{[]string{"1"}, []string(nil), false},
 
- 		{[]string{}, []string{"1", "2", "3"}, false},
 
- 		{[]string{"1"}, []string{"1", "2", "3"}, false},
 
- 		{[]string{"1", "2", "3"}, []string{}, false},
 
- 	}
 
- 	for _, item := range table {
 
- 		if e, a := item.equal, e.DeepEqual(item.a, item.b); e != a {
 
- 			t.Errorf("Expected (%+v == %+v) == %v, but got %v", item.a, item.b, e, a)
 
- 		}
 
- 	}
 
- }
 
- func TestDerivates(t *testing.T) {
 
- 	e := Equalities{}
 
- 	type Bar struct {
 
- 		X int
 
- 	}
 
- 	type Baz struct {
 
- 		Y Bar
 
- 	}
 
- 	err := e.AddFuncs(
 
- 		func(a, b int) bool {
 
- 			return a+1 == b
 
- 		},
 
- 		func(a, b Bar) bool {
 
- 			return a.X*10 == b.X
 
- 		},
 
- 	)
 
- 	if err != nil {
 
- 		t.Fatalf("Unexpected: %v", err)
 
- 	}
 
- 	type Foo struct {
 
- 		X int
 
- 	}
 
- 	table := []struct {
 
- 		a, b  interface{}
 
- 		equal bool
 
- 	}{
 
- 		{1, 2, true},
 
- 		{2, 1, false},
 
- 		{"foo", "fo", false},
 
- 		{"foo", "foo", true},
 
- 		{"foo", "foobar", false},
 
- 		{Foo{1}, Foo{2}, true},
 
- 		{Foo{2}, Foo{1}, false},
 
- 		{Bar{1}, Bar{10}, true},
 
- 		{&Bar{1}, &Bar{10}, true},
 
- 		{Baz{Bar{1}}, Baz{Bar{10}}, true},
 
- 		{[...]string{}, [...]string{"1", "2", "3"}, false},
 
- 		{[...]string{"1"}, [...]string{"1", "2", "3"}, false},
 
- 		{[...]string{"1", "2", "3"}, [...]string{}, false},
 
- 		{[...]string{"1", "2", "3"}, [...]string{"1", "2", "3"}, true},
 
- 		{map[string]int{"foo": 1}, map[string]int{}, false},
 
- 		{map[string]int{"foo": 1}, map[string]int{"foo": 2}, true},
 
- 		{map[string]int{"foo": 2}, map[string]int{"foo": 1}, false},
 
- 		{map[string]int{"foo": 1}, map[string]int{"foo": 2, "bar": 6}, true},
 
- 		{map[string]int{"foo": 1, "bar": 6}, map[string]int{"foo": 2}, false},
 
- 		{map[string]int{}, map[string]int(nil), true},
 
- 		{[]string(nil), []string(nil), true},
 
- 		{[]string{}, []string(nil), true},
 
- 		{[]string(nil), []string{}, true},
 
- 		{[]string{"1"}, []string(nil), false},
 
- 		{[]string{}, []string{"1", "2", "3"}, true},
 
- 		{[]string{"1"}, []string{"1", "2", "3"}, true},
 
- 		{[]string{"1", "2", "3"}, []string{}, false},
 
- 	}
 
- 	for _, item := range table {
 
- 		if e, a := item.equal, e.DeepDerivative(item.a, item.b); e != a {
 
- 			t.Errorf("Expected (%+v ~ %+v) == %v, but got %v", item.a, item.b, e, a)
 
- 		}
 
- 	}
 
- }
 
 
  |