public void TestComparingEdmBinaryTypeReference()
        {
            var binaryTypeWithDefaultValue = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), true);
            var binaryType = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), true, false, null);
            Assert.IsTrue(binaryType.IsEquivalentTo(binaryTypeWithDefaultValue));

            var primitiveType = new EdmPrimitiveTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), true);
            Assert.IsFalse(binaryType.IsEquivalentTo(primitiveType));
        }
        public void EqualityBinaryReferenceTypeTest()
        {
            var simpleBaseline = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false);
            var simpleDifferentNullibility = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), true);
            var simpleDifferentPrimitiveType = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Stream), false);
            var simpleDifferentReferenceType = new EdmStringTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), true);
            var simpleMatch = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false);

            this.VerifyThrowsException(typeof(ArgumentNullException), () => new EdmBinaryTypeReference(null, false));
            Assert.IsTrue(simpleBaseline.IsEquivalentTo(simpleMatch), "Is the same.");
            Assert.IsFalse(simpleBaseline.IsEquivalentTo(simpleDifferentNullibility), "Different nullibility.");
            Assert.IsFalse(simpleBaseline.IsEquivalentTo(simpleDifferentPrimitiveType), "Different primitive type.");

            Assert.IsTrue(simpleDifferentPrimitiveType.IsBad(), "simpleDifferentReferenceType is bad");
            Assert.IsFalse(simpleBaseline.IsEquivalentTo(simpleDifferentReferenceType));

            var baseline = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false, false, 3);
            var match = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false, false, 3);
            var differentMaxLength = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false, false, 2);
            var nullMaxLength = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false, false, null);
            var differentIsUnbounded = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false, true, null);
            var differentNullibility = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), true, false, 3);

            var differentPrimitiveType = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Int32), false, false, 3);
            var differentTypeReference = new EdmStringTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false);

            this.VerifyThrowsException(typeof(InvalidOperationException), () => new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Binary), false, true, 3));
            this.VerifyThrowsException(typeof(ArgumentNullException), () => new EdmBinaryTypeReference(null, false, false, 3));
            Assert.IsTrue(baseline.IsEquivalentTo(match), "Is the same.");
            Assert.IsFalse(baseline.IsEquivalentTo(differentMaxLength), "Different MaxLength.");
            Assert.IsFalse(baseline.IsEquivalentTo(nullMaxLength), "Null MaxLength.");
            Assert.IsFalse(baseline.IsEquivalentTo(differentIsUnbounded), "Different IsUnbound.");
            Assert.IsFalse(baseline.IsEquivalentTo(differentNullibility), "Different nullibility.");
            Assert.IsFalse(baseline.IsEquivalentTo(differentPrimitiveType), "Different primtive type.");

            Assert.IsTrue(differentTypeReference.IsBad(), "differentTypeReference is bad");
            Assert.IsFalse(baseline.IsEquivalentTo(differentTypeReference));
        }
        public static IEdmModel InterfaceCriticalKindValueMismatchOnlyUsingBinaryTypeReferenceModel()
        {
            var model = new EdmModel();

            var badTypeRef = new EdmBinaryTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.String), true);
            var valueTerm = new EdmTerm("NS", "Note", badTypeRef);
            model.AddElement(valueTerm);

            return model;
        }