Ejemplo n.º 1
0
        public void NodeCompareToEquivalentLiterals3()
        {
            Graph        g         = new Graph();
            ILiteralNode canonical = (1d).ToLiteral(g);
            ILiteralNode alternate = g.CreateLiteralNode("1.00000", UriFactory.Create(XmlSpecsHelper.XmlSchemaDataTypeDouble));

            List <INode> ns = new List <INode>()
            {
                canonical,
                alternate
            };

            Assert.NotEqual(canonical, alternate);
            Assert.Equal(0, canonical.CompareTo(alternate));

            this.ShowOrdering(ns);
            this.CheckCombinations(ns);
            this.CheckCombinations <ILiteralNode>(ns.OfType <ILiteralNode>().ToList());
            this.CheckCombinations(ns, new FastNodeComparer());
        }
Ejemplo n.º 2
0
        public void NodeCompareToEquivalentLiterals2()
        {
            Graph g = new Graph();
            ILiteralNode canonical = (true).ToLiteral(g);
            ILiteralNode alternate = g.CreateLiteralNode("TRUE", UriFactory.Create(XmlSpecsHelper.XmlSchemaDataTypeBoolean));

            List<INode> ns = new List<INode>()
            {
                canonical,
                alternate                
            };

            Assert.AreNotEqual(canonical, alternate, "Alternate lexical forms should not be equal");
            Assert.AreEqual(0, canonical.CompareTo(alternate), "Comparison should compare alternate lexical forms as equal");

            this.ShowOrdering(ns);
            this.CheckCombinations(ns);
            this.CheckCombinations<ILiteralNode>(ns.OfType<ILiteralNode>().ToList());
            this.CheckCombinations(ns, new FastNodeComparer());
        }
Ejemplo n.º 3
0
        public void NodeCompareToMixedNodes2()
        {
            Graph         g = new Graph();
            IBlankNode    b = g.CreateBlankNode();
            ILiteralNode  l = g.CreateLiteralNode("literal", "en");
            IUriNode      u = g.CreateUriNode(new Uri("http://example.org"));
            IVariableNode v = g.CreateVariableNode("var");

            int c = b.CompareTo(l);

            Assert.Equal(c * -1, l.CompareTo(b));
            c = b.CompareTo(u);
            Assert.Equal(c * -1, u.CompareTo(b));
            c = b.CompareTo(v);
            Assert.Equal(c * -1, v.CompareTo(b));

            c = l.CompareTo(b);
            Assert.Equal(c * -1, b.CompareTo(l));
            c = l.CompareTo(u);
            Assert.Equal(c * -1, u.CompareTo(l));
            c = l.CompareTo(v);
            Assert.Equal(c * -1, v.CompareTo(l));

            c = u.CompareTo(b);
            Assert.Equal(c * -1, b.CompareTo(u));
            c = u.CompareTo(l);
            Assert.Equal(c * -1, l.CompareTo(u));
            c = u.CompareTo(v);
            Assert.Equal(c * -1, v.CompareTo(u));

            c = v.CompareTo(b);
            Assert.Equal(c * -1, b.CompareTo(v));
            c = v.CompareTo(l);
            Assert.Equal(c * -1, l.CompareTo(v));
            c = v.CompareTo(u);
            Assert.Equal(c * -1, u.CompareTo(v));
        }
Ejemplo n.º 4
0
        public void NodeCompareToMixedNodes2()
        {
            Graph         g = new Graph();
            IBlankNode    b = g.CreateBlankNode();
            ILiteralNode  l = g.CreateLiteralNode("literal", "en");
            IUriNode      u = g.CreateUriNode(new Uri("http://example.org"));
            IVariableNode v = g.CreateVariableNode("var");

            int c = b.CompareTo(l);

            Assert.AreEqual(c * -1, l.CompareTo(b), "Expected l compareTo b to be inverse of b compareTo l");
            c = b.CompareTo(u);
            Assert.AreEqual(c * -1, u.CompareTo(b), "Expected l compareTo u to be inverse of u compareTo l");
            c = b.CompareTo(v);
            Assert.AreEqual(c * -1, v.CompareTo(b), "Expected l compareTo v to be inverse of v compareTo l");

            c = l.CompareTo(b);
            Assert.AreEqual(c * -1, b.CompareTo(l), "Expected b compareTo l to be inverse of l compareTo b");
            c = l.CompareTo(u);
            Assert.AreEqual(c * -1, u.CompareTo(l), "Expected u compareTo l to be inverse of l compareTo u");
            c = l.CompareTo(v);
            Assert.AreEqual(c * -1, v.CompareTo(l), "Expected v compareTo l to be inverse of l compareTo v");

            c = u.CompareTo(b);
            Assert.AreEqual(c * -1, b.CompareTo(u), "Expected b compareTo u to be inverse of u compareTo b");
            c = u.CompareTo(l);
            Assert.AreEqual(c * -1, l.CompareTo(u), "Expected l compareTo u to be inverse of u compareTo l");
            c = u.CompareTo(v);
            Assert.AreEqual(c * -1, v.CompareTo(u), "Expected v compareTo u to be inverse of u compareTo v");

            c = v.CompareTo(b);
            Assert.AreEqual(c * -1, b.CompareTo(v), "Expected b compareTo v to be inverse of v compareTo b");
            c = v.CompareTo(l);
            Assert.AreEqual(c * -1, l.CompareTo(v), "Expected l compareTo v to be inverse of v compareTo l");
            c = v.CompareTo(u);
            Assert.AreEqual(c * -1, u.CompareTo(v), "Expected u compareTo v to be inverse of v compareTo u");
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Determines whether two Literals are equal.
        /// </summary>
        /// <param name="a">First Literal.</param>
        /// <param name="b">Second Literal.</param>
        /// <returns></returns>
        public static bool AreLiteralsEqual(ILiteralNode a, ILiteralNode b)
        {
            if (ReferenceEquals(a, b))
            {
                return(true);
            }
            if (a == null)
            {
                if (b == null)
                {
                    return(true);
                }
                return(false);
            }
            else if (b == null)
            {
                return(false);
            }

            // Language Tags must be equal (if present)
            // If they don't have language tags then they'll both be set to String.Empty which will give true
            if (a.Language.Equals(b.Language, StringComparison.OrdinalIgnoreCase))
            {
                // Datatypes must be equal (if present)
                // If they don't have Data Types then they'll both be null
                // Otherwise the URIs must be equal
                if (a.DataType == null && b.DataType == null)
                {
                    // Use String equality to get the result
                    return(a.Value.Equals(b.Value, StringComparison.Ordinal));
                }
                else if (a.DataType == null)
                {
                    // We have a Null DataType but the other Node doesn't so can't be equal
                    return(false);
                }
                else if (b.DataType == null)
                {
                    // The other Node has a Null DataType but we don't so can't be equal
                    return(false);
                }
                else if (AreUrisEqual(a.DataType, b.DataType))
                {
                    // We have equal DataTypes so use String Equality to evaluate
                    if (Options.LiteralEqualityMode == LiteralEqualityMode.Strict)
                    {
                        // Strict Equality Mode uses Ordinal Lexical Comparison for Equality as per W3C RDF Spec
                        return(a.Value.Equals(b.Value, StringComparison.Ordinal));
                    }
                    else
                    {
                        // Loose Equality Mode uses Value Based Comparison for Equality of Typed Nodes
                        return(a.CompareTo(b) == 0);
                    }
                }
                else
                {
                    // Data Types didn't match
                    return(false);
                }
            }
            else
            {
                // Language Tags didn't match
                return(false);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Determines whether two Literals are equal
        /// </summary>
        /// <param name="a">First Literal</param>
        /// <param name="b">Second Literal</param>
        /// <returns></returns>
        public static bool AreLiteralsEqual(ILiteralNode a, ILiteralNode b)
        {
            if (ReferenceEquals(a, b)) return true;
            if (a == null)
            {
                if (b == null) return true;
                return false;
            }
            else if (b == null)
            {
                return false;
            }

            //Language Tags must be equal (if present)
            //If they don't have language tags then they'll both be set to String.Empty which will give true
            if (a.Language.Equals(b.Language, StringComparison.OrdinalIgnoreCase))
            {
                //Datatypes must be equal (if present)
                //If they don't have Data Types then they'll both be null
                //Otherwise the URIs must be equal
                if (a.DataType == null && b.DataType == null)
                {
                    //Use String equality to get the result
                    return a.Value.Equals(b.Value, StringComparison.Ordinal);
                }
                else if (a.DataType == null)
                {
                    //We have a Null DataType but the other Node doesn't so can't be equal
                    return false;
                }
                else if (b.DataType == null)
                {
                    //The other Node has a Null DataType but we don't so can't be equal
                    return false;
                }
                else if (EqualityHelper.AreUrisEqual(a.DataType, b.DataType))
                {
                    //We have equal DataTypes so use String Equality to evaluate
                    if (Options.LiteralEqualityMode == LiteralEqualityMode.Strict)
                    {
                        //Strict Equality Mode uses Ordinal Lexical Comparison for Equality as per W3C RDF Spec
                        return a.Value.Equals(b.Value, StringComparison.Ordinal);
                    }
                    else
                    {
                        //Loose Equality Mode uses Value Based Comparison for Equality of Typed Nodes
                        return (a.CompareTo(b) == 0);
                    }
                }
                else
                {
                    //Data Types didn't match
                    return false;
                }
            }
            else
            {
                //Language Tags didn't match
                return false;
            }
        }