// Copyright 2017, 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.md file. package teststructs import ( "sync" pb "github.com/google/go-cmp/cmp/internal/testprotos" ) // This is an sanitized example of equality from a real use-case. // The original equality function was as follows: /* func equalDirt(x, y *Dirt) bool { if !reflect.DeepEqual(x.table, y.table) || !reflect.DeepEqual(x.ts, y.ts) || x.Discord != y.Discord || !pb.Equal(&x.Proto, &y.Proto) || len(x.wizard) != len(y.wizard) || len(x.sadistic) != len(y.sadistic) || x.lastTime != y.lastTime { return false } for k, vx := range x.wizard { vy, ok := y.wizard[k] if !ok || !pb.Equal(vx, vy) { return false } } for k, vx := range x.sadistic { vy, ok := y.sadistic[k] if !ok || !pb.Equal(vx, vy) { return false } } return true } */ type FakeMutex struct { sync.Locker x struct{} } type Dirt struct { table Table // Always concrete type of MockTable ts Timestamp Discord DiscordState Proto pb.Dirt wizard map[string]*pb.Wizard sadistic map[string]*pb.Sadistic lastTime int64 mu FakeMutex } type DiscordState int type Timestamp int64 func (d *Dirt) SetTable(t Table) { d.table = t } func (d *Dirt) SetTimestamp(t Timestamp) { d.ts = t } func (d *Dirt) SetWizard(m map[string]*pb.Wizard) { d.wizard = m } func (d *Dirt) SetSadistic(m map[string]*pb.Sadistic) { d.sadistic = m } func (d *Dirt) SetLastTime(t int64) { d.lastTime = t } type Table interface { Operation1() error Operation2() error Operation3() error } type MockTable struct { state []string } func CreateMockTable(s []string) *MockTable { return &MockTable{s} } func (mt *MockTable) Operation1() error { return nil } func (mt *MockTable) Operation2() error { return nil } func (mt *MockTable) Operation3() error { return nil } func (mt *MockTable) State() []string { return mt.state }