public void CanCompareForEquality()
        {
            var aAlias = TestEnum.A;    // Resolve compiler warning

            Assert.True(TestEnum.A.Equals(TestEnum.A));
            Assert.True(TestEnum.A.Equals((object)TestEnum.A));
            Assert.True(aAlias == TestEnum.A);
            Assert.False(aAlias != TestEnum.A);

            Assert.False(TestEnum.A.Equals(TestEnum.B));
            Assert.False(TestEnum.A.Equals((object)TestEnum.B));
            Assert.False(TestEnum.A == TestEnum.B);
            Assert.True(TestEnum.A != TestEnum.B);

            Assert.False(TestEnum.A.Equals(TestEnum.Create("c")));
            Assert.False(TestEnum.A.Equals((object)TestEnum.Create("c")));
            Assert.False(TestEnum.A == TestEnum.Create("c"));
            Assert.True(TestEnum.A != TestEnum.Create("c"));

            Assert.True(TestEnum.Create("a").Equals(TestEnum.A));
            Assert.True(TestEnum.Create("a").Equals((object)TestEnum.A));
            Assert.True(TestEnum.Create("a") == TestEnum.A);
            Assert.False(TestEnum.Create("a") != TestEnum.A);

            Assert.True(TestEnum.Special(TestEnum.A).Equals(TestEnum.Special(TestEnum.A)));
            Assert.True(TestEnum.Special(TestEnum.A).Equals((object)TestEnum.Special(TestEnum.A)));
            Assert.True(TestEnum.Special(TestEnum.A) == TestEnum.Special(TestEnum.A));
            Assert.False(TestEnum.Special(TestEnum.A) != TestEnum.Special(TestEnum.A));

            Assert.False(TestEnum.Special(TestEnum.A).Equals(TestEnum.Special(TestEnum.B)));
            Assert.False(TestEnum.Special(TestEnum.A).Equals((object)TestEnum.Special(TestEnum.B)));
            Assert.False(TestEnum.Special(TestEnum.A) == TestEnum.Special(TestEnum.B));
            Assert.True(TestEnum.Special(TestEnum.A) != TestEnum.Special(TestEnum.B));
        }