xref: /aosp_15_r20/external/go-cmp/cmp/internal/teststructs/project3.go (revision 88d15eac089d7f20c739ff1001d56b91872b21a1)
1*88d15eacSSasha Smundak// Copyright 2017, The Go Authors. All rights reserved.
2*88d15eacSSasha Smundak// Use of this source code is governed by a BSD-style
3*88d15eacSSasha Smundak// license that can be found in the LICENSE file.
4*88d15eacSSasha Smundak
5*88d15eacSSasha Smundakpackage teststructs
6*88d15eacSSasha Smundak
7*88d15eacSSasha Smundakimport (
8*88d15eacSSasha Smundak	"sync"
9*88d15eacSSasha Smundak
10*88d15eacSSasha Smundak	pb "github.com/google/go-cmp/cmp/internal/testprotos"
11*88d15eacSSasha Smundak)
12*88d15eacSSasha Smundak
13*88d15eacSSasha Smundak// This is an sanitized example of equality from a real use-case.
14*88d15eacSSasha Smundak// The original equality function was as follows:
15*88d15eacSSasha Smundak/*
16*88d15eacSSasha Smundakfunc equalDirt(x, y *Dirt) bool {
17*88d15eacSSasha Smundak	if !reflect.DeepEqual(x.table, y.table) ||
18*88d15eacSSasha Smundak		!reflect.DeepEqual(x.ts, y.ts) ||
19*88d15eacSSasha Smundak		x.Discord != y.Discord ||
20*88d15eacSSasha Smundak		!pb.Equal(&x.Proto, &y.Proto) ||
21*88d15eacSSasha Smundak		len(x.wizard) != len(y.wizard) ||
22*88d15eacSSasha Smundak		len(x.sadistic) != len(y.sadistic) ||
23*88d15eacSSasha Smundak		x.lastTime != y.lastTime {
24*88d15eacSSasha Smundak		return false
25*88d15eacSSasha Smundak	}
26*88d15eacSSasha Smundak	for k, vx := range x.wizard {
27*88d15eacSSasha Smundak		vy, ok := y.wizard[k]
28*88d15eacSSasha Smundak		if !ok || !pb.Equal(vx, vy) {
29*88d15eacSSasha Smundak			return false
30*88d15eacSSasha Smundak		}
31*88d15eacSSasha Smundak	}
32*88d15eacSSasha Smundak	for k, vx := range x.sadistic {
33*88d15eacSSasha Smundak		vy, ok := y.sadistic[k]
34*88d15eacSSasha Smundak		if !ok || !pb.Equal(vx, vy) {
35*88d15eacSSasha Smundak			return false
36*88d15eacSSasha Smundak		}
37*88d15eacSSasha Smundak	}
38*88d15eacSSasha Smundak	return true
39*88d15eacSSasha Smundak}
40*88d15eacSSasha Smundak*/
41*88d15eacSSasha Smundak
42*88d15eacSSasha Smundaktype FakeMutex struct {
43*88d15eacSSasha Smundak	sync.Locker
44*88d15eacSSasha Smundak	x struct{}
45*88d15eacSSasha Smundak}
46*88d15eacSSasha Smundak
47*88d15eacSSasha Smundaktype Dirt struct {
48*88d15eacSSasha Smundak	table    Table // Always concrete type of MockTable
49*88d15eacSSasha Smundak	ts       Timestamp
50*88d15eacSSasha Smundak	Discord  DiscordState
51*88d15eacSSasha Smundak	Proto    pb.Dirt
52*88d15eacSSasha Smundak	wizard   map[string]*pb.Wizard
53*88d15eacSSasha Smundak	sadistic map[string]*pb.Sadistic
54*88d15eacSSasha Smundak	lastTime int64
55*88d15eacSSasha Smundak	mu       FakeMutex
56*88d15eacSSasha Smundak}
57*88d15eacSSasha Smundak
58*88d15eacSSasha Smundaktype DiscordState int
59*88d15eacSSasha Smundak
60*88d15eacSSasha Smundaktype Timestamp int64
61*88d15eacSSasha Smundak
62*88d15eacSSasha Smundakfunc (d *Dirt) SetTable(t Table)                      { d.table = t }
63*88d15eacSSasha Smundakfunc (d *Dirt) SetTimestamp(t Timestamp)              { d.ts = t }
64*88d15eacSSasha Smundakfunc (d *Dirt) SetWizard(m map[string]*pb.Wizard)     { d.wizard = m }
65*88d15eacSSasha Smundakfunc (d *Dirt) SetSadistic(m map[string]*pb.Sadistic) { d.sadistic = m }
66*88d15eacSSasha Smundakfunc (d *Dirt) SetLastTime(t int64)                   { d.lastTime = t }
67*88d15eacSSasha Smundak
68*88d15eacSSasha Smundaktype Table interface {
69*88d15eacSSasha Smundak	Operation1() error
70*88d15eacSSasha Smundak	Operation2() error
71*88d15eacSSasha Smundak	Operation3() error
72*88d15eacSSasha Smundak}
73*88d15eacSSasha Smundak
74*88d15eacSSasha Smundaktype MockTable struct {
75*88d15eacSSasha Smundak	state []string
76*88d15eacSSasha Smundak}
77*88d15eacSSasha Smundak
78*88d15eacSSasha Smundakfunc CreateMockTable(s []string) *MockTable { return &MockTable{s} }
79*88d15eacSSasha Smundakfunc (mt *MockTable) Operation1() error     { return nil }
80*88d15eacSSasha Smundakfunc (mt *MockTable) Operation2() error     { return nil }
81*88d15eacSSasha Smundakfunc (mt *MockTable) Operation3() error     { return nil }
82*88d15eacSSasha Smundakfunc (mt *MockTable) State() []string       { return mt.state }
83