public static void DefaultHashCode()
{
var a1 = new ParentAttribute { Prop = 1 };
var a2 = new ParentAttribute { Prop = 42 };
var a3 = new ParentAttribute { Prop = 1 };
var d1 = new ChildAttribute { Prop = 1 };
var d2 = new ChildAttribute { Prop = 42 };
var d3 = new ChildAttribute { Prop = 1 };
var s1 = new GrandchildAttribute { Prop = 1 };
var s2 = new GrandchildAttribute { Prop = 42 };
var s3 = new GrandchildAttribute { Prop = 1 };
var f1 = new ChildAttributeWithField { Prop = 1 };
var f2 = new ChildAttributeWithField { Prop = 42 };
var f3 = new ChildAttributeWithField { Prop = 1 };
Assert.NotEqual(a1.GetHashCode(), 0);
Assert.NotEqual(a2.GetHashCode(), 0);
Assert.NotEqual(a3.GetHashCode(), 0);
Assert.NotEqual(d1.GetHashCode(), 0);
Assert.NotEqual(d2.GetHashCode(), 0);
Assert.NotEqual(d3.GetHashCode(), 0);
Assert.NotEqual(s1.GetHashCode(), 0);
Assert.NotEqual(s2.GetHashCode(), 0);
Assert.NotEqual(s3.GetHashCode(), 0);
Assert.Equal(f1.GetHashCode(), 0);
Assert.Equal(f2.GetHashCode(), 0);
Assert.Equal(f3.GetHashCode(), 0);
Assert.NotEqual(a1.GetHashCode(), a2.GetHashCode());
Assert.NotEqual(a2.GetHashCode(), a3.GetHashCode());
Assert.Equal(a1.GetHashCode(), a3.GetHashCode());
Assert.NotEqual(s1.GetHashCode(), s2.GetHashCode());
Assert.NotEqual(s2.GetHashCode(), s3.GetHashCode());
Assert.Equal(s1.GetHashCode(), s3.GetHashCode());
Assert.NotEqual(d1.GetHashCode(), d2.GetHashCode());
Assert.NotEqual(d2.GetHashCode(), d3.GetHashCode());
Assert.Equal(d1.GetHashCode(), d3.GetHashCode());
Assert.Equal(f1.GetHashCode(), f2.GetHashCode());
Assert.Equal(f2.GetHashCode(), f3.GetHashCode());
Assert.Equal(f1.GetHashCode(), f3.GetHashCode());
Assert.Equal(d1.GetHashCode(), a1.GetHashCode());
Assert.Equal(d2.GetHashCode(), a2.GetHashCode());
Assert.Equal(d3.GetHashCode(), a3.GetHashCode());
Assert.Equal(d1.GetHashCode(), a3.GetHashCode());
Assert.Equal(d3.GetHashCode(), a1.GetHashCode());
Assert.Equal(d1.GetHashCode(), s1.GetHashCode());
Assert.Equal(d2.GetHashCode(), s2.GetHashCode());
Assert.Equal(d3.GetHashCode(), s3.GetHashCode());
Assert.Equal(d1.GetHashCode(), s3.GetHashCode());
Assert.Equal(d3.GetHashCode(), s1.GetHashCode());
Assert.NotEqual(f1.GetHashCode(), a1.GetHashCode());
Assert.NotEqual(f2.GetHashCode(), a2.GetHashCode());
Assert.NotEqual(f3.GetHashCode(), a3.GetHashCode());
Assert.NotEqual(f1.GetHashCode(), a3.GetHashCode());
Assert.NotEqual(f3.GetHashCode(), a1.GetHashCode());
}