public static void DefaultEquality()
{
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, a2);
Assert.NotEqual(a2, a3);
Assert.Equal(a1, a3);
Assert.NotEqual(d1, d2);
Assert.NotEqual(d2, d3);
Assert.Equal(d1, d3);
Assert.NotEqual(s1, s2);
Assert.NotEqual(s2, s3);
Assert.Equal(s1, s3);
Assert.NotEqual(f1, f2);
Assert.NotEqual(f2, f3);
Assert.Equal(f1, f3);
Assert.NotEqual(d1, a1);
Assert.NotEqual(d2, a2);
Assert.NotEqual(d3, a3);
Assert.NotEqual(d1, a3);
Assert.NotEqual(d3, a1);
Assert.NotEqual(d1, s1);
Assert.NotEqual(d2, s2);
Assert.NotEqual(d3, s3);
Assert.NotEqual(d1, s3);
Assert.NotEqual(d3, s1);
Assert.NotEqual(f1, a1);
Assert.NotEqual(f2, a2);
Assert.NotEqual(f3, a3);
Assert.NotEqual(f1, a3);
Assert.NotEqual(f3, a1);
}