| // Copyright 2011 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 deepequal_test |
| |
| import ( |
| "testing" |
| "google3/spam/archer/frontend/deepequal" |
| ) |
| |
| func TestTwoNilValues(t *testing.T) { |
| if err := deepequal.Check(nil, nil); err != nil { |
| t.Errorf("expected nil, saw %v", err) |
| } |
| } |
| |
| type Foo struct { |
| bar *Bar |
| bang *Bar |
| } |
| |
| type Bar struct { |
| baz *Baz |
| foo []*Foo |
| } |
| |
| type Baz struct { |
| entries map[int]interface{} |
| whatever string |
| } |
| |
| func newFoo() (*Foo) { |
| return &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| 42: &Foo{}, |
| 21: &Bar{}, |
| 11: &Baz{ whatever: "it's just a test" }}}}, |
| bang: &Bar{foo: []*Foo{ |
| &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| 43: &Foo{}, |
| 22: &Bar{}, |
| 13: &Baz{ whatever: "this is nuts" }}}}, |
| bang: &Bar{foo: []*Foo{ |
| &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| 61: &Foo{}, |
| 71: &Bar{}, |
| 11: &Baz{ whatever: "no, it's Go" }}}}, |
| bang: &Bar{foo: []*Foo{ |
| &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| 0: &Foo{}, |
| -2: &Bar{}, |
| -11: &Baz{ whatever: "we need to go deeper" }}}}, |
| bang: &Bar{foo: []*Foo{ |
| &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| -2: &Foo{}, |
| -5: &Bar{}, |
| -7: &Baz{ whatever: "are you serious?" }}}}, |
| bang: &Bar{foo: []*Foo{}}}, |
| &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| -100: &Foo{}, |
| 50: &Bar{}, |
| 20: &Baz{ whatever: "na, not really ..." }}}}, |
| bang: &Bar{foo: []*Foo{}}}}}}}}}, |
| &Foo{bar: &Bar{ baz: &Baz{ |
| entries: map[int]interface{}{ |
| 2: &Foo{}, |
| 1: &Bar{}, |
| -1: &Baz{ whatever: "... it's just a test." }}}}, |
| bang: &Bar{foo: []*Foo{}}}}}}}}} |
| } |
| |
| func TestElaborate(t *testing.T) { |
| a := newFoo() |
| b := newFoo() |
| |
| if err := deepequal.Check(a, b); err != nil { |
| t.Errorf("expected nil, saw %v", err) |
| } |
| } |