--- /dev/null
+// 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 testprotos
+
+func Equal(x, y Message) bool {
+ if x == nil || y == nil {
+ return x == nil && y == nil
+ }
+ return x.String() == y.String()
+}
+
+type Message interface {
+ Proto()
+ String() string
+}
+
+type proto interface {
+ Proto()
+}
+
+type notComparable struct {
+ unexportedField func()
+}
+
+type Stringer struct{ X string }
+
+func (s *Stringer) String() string { return s.X }
+
+// Project1 protocol buffers
+type (
+ Eagle_States int
+ Eagle_MissingCalls int
+ Dreamer_States int
+ Dreamer_MissingCalls int
+ Slap_States int
+ Goat_States int
+ Donkey_States int
+ SummerType int
+
+ Eagle struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Dreamer struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Slap struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Goat struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Donkey struct {
+ proto
+ notComparable
+ Stringer
+ }
+)
+
+// Project2 protocol buffers
+type (
+ Germ struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Dish struct {
+ proto
+ notComparable
+ Stringer
+ }
+)
+
+// Project3 protocol buffers
+type (
+ Dirt struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Wizard struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Sadistic struct {
+ proto
+ notComparable
+ Stringer
+ }
+)
+
+// Project4 protocol buffers
+type (
+ HoneyStatus int
+ PoisonType int
+ MetaData struct {
+ proto
+ notComparable
+ Stringer
+ }
+ Restrictions struct {
+ proto
+ notComparable
+ Stringer
+ }
+)