1// Copyright 2017, The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package teststructs
6
7import (
8	"time"
9
10	pb "github.com/google/go-cmp/cmp/internal/testprotos"
11)
12
13// This is an sanitized example of equality from a real use-case.
14// The original equality function was as follows:
15/*
16func equalBatch(b1, b2 *GermBatch) bool {
17	for _, b := range []*GermBatch{b1, b2} {
18		for _, l := range b.DirtyGerms {
19			sort.Slice(l, func(i, j int) bool { return l[i].String() < l[j].String() })
20		}
21		for _, l := range b.CleanGerms {
22			sort.Slice(l, func(i, j int) bool { return l[i].String() < l[j].String() })
23		}
24	}
25	if !pb.DeepEqual(b1.DirtyGerms, b2.DirtyGerms) ||
26		!pb.DeepEqual(b1.CleanGerms, b2.CleanGerms) ||
27		!pb.DeepEqual(b1.GermMap, b2.GermMap) {
28		return false
29	}
30	if len(b1.DishMap) != len(b2.DishMap) {
31		return false
32	}
33	for id := range b1.DishMap {
34		kpb1, err1 := b1.DishMap[id].Proto()
35		kpb2, err2 := b2.DishMap[id].Proto()
36		if !pb.Equal(kpb1, kpb2) || !reflect.DeepEqual(err1, err2) {
37			return false
38		}
39	}
40	return b1.HasPreviousResult == b2.HasPreviousResult &&
41		b1.DirtyID == b2.DirtyID &&
42		b1.CleanID == b2.CleanID &&
43		b1.GermStrain == b2.GermStrain &&
44		b1.TotalDirtyGerms == b2.TotalDirtyGerms &&
45		b1.InfectedAt.Equal(b2.InfectedAt)
46}
47*/
48
49type GermBatch struct {
50	DirtyGerms, CleanGerms map[int32][]*pb.Germ
51	GermMap                map[int32]*pb.Germ
52	DishMap                map[int32]*Dish
53	HasPreviousResult      bool
54	DirtyID, CleanID       int32
55	GermStrain             int32
56	TotalDirtyGerms        int
57	InfectedAt             time.Time
58}
59
60type Dish struct {
61	pb  *pb.Dish
62	err error
63}
64
65func CreateDish(m *pb.Dish, err error) *Dish {
66	return &Dish{pb: m, err: err}
67}
68
69func (d *Dish) Proto() (*pb.Dish, error) {
70	if d.err != nil {
71		return nil, d.err
72	}
73	return d.pb, nil
74}
75