public void Construction()
        {
            var tag = new TestObject(1);

            // Value type
            CheckTaggedEdge(new STaggedUndirectedEdge <int, TestObject>(1, 2, null), 1, 2, (TestObject)null);
            CheckTaggedEdge(new STaggedUndirectedEdge <int, TestObject>(1, 1, null), 1, 1, (TestObject)null);
            CheckTaggedEdge(default(STaggedUndirectedEdge <int, TestObject>), 0, 0, (TestObject)null);
            CheckTaggedEdge(new STaggedUndirectedEdge <int, TestObject>(1, 2, tag), 1, 2, tag);

            // Reference type
            var v1 = new ComparableTestVertex("v1");
            var v2 = new ComparableTestVertex("v2");

            CheckTaggedEdge(new STaggedUndirectedEdge <ComparableTestVertex, TestObject>(v1, v2, null), v1, v2, (TestObject)null);
            CheckTaggedEdge(new STaggedUndirectedEdge <ComparableTestVertex, TestObject>(v1, v1, null), v1, v1, (TestObject)null);
            CheckStructTaggedEdge(default(STaggedUndirectedEdge <ComparableTestVertex, TestObject>), (ComparableTestVertex)null, null, (TestObject)null);
            CheckTaggedEdge(new STaggedUndirectedEdge <ComparableTestVertex, TestObject>(v1, v2, tag), v1, v2, tag);

            // Struct break the contract with their implicit default constructor
            // Non struct edge should be preferred
            var defaultEdge = default(STaggedUndirectedEdge <ComparableTestVertex, int>);

            Assert.IsNull(defaultEdge.Source);
            // ReSharper disable once HeuristicUnreachableCode
            // Justification: Since struct has implicit default constructor it allows initialization of invalid edge
            Assert.IsNull(defaultEdge.Target);
        }
Esempio n. 2
0
        public void Construction()
        {
            // Value type
            CheckEdge(new UndirectedEdge <int>(1, 2), 1, 2);
            CheckEdge(new UndirectedEdge <int>(1, 1), 1, 1);

            // Reference type
            var v1 = new ComparableTestVertex("v1");
            var v2 = new ComparableTestVertex("v2");

            CheckEdge(new UndirectedEdge <ComparableTestVertex>(v1, v2), v1, v2);
            CheckEdge(new UndirectedEdge <ComparableTestVertex>(v1, v1), v1, v1);
        }
        public void Construction()
        {
            var tag = new TestObject(1);

            // Value type
            CheckTaggedEdge(new TaggedUndirectedEdge <int, TestObject>(1, 2, null), 1, 2, (TestObject)null);
            CheckTaggedEdge(new TaggedUndirectedEdge <int, TestObject>(1, 1, null), 1, 1, (TestObject)null);
            CheckTaggedEdge(new TaggedUndirectedEdge <int, TestObject>(1, 2, tag), 1, 2, tag);

            // Reference type
            var v1 = new ComparableTestVertex("v1");
            var v2 = new ComparableTestVertex("v2");

            CheckTaggedEdge(new TaggedUndirectedEdge <ComparableTestVertex, TestObject>(v1, v2, null), v1, v2, (TestObject)null);
            CheckTaggedEdge(new TaggedUndirectedEdge <ComparableTestVertex, TestObject>(v1, v1, null), v1, v1, (TestObject)null);
            CheckTaggedEdge(new TaggedUndirectedEdge <ComparableTestVertex, TestObject>(v1, v2, tag), v1, v2, tag);
        }
        public void Construction_Throws()
        {
            // ReSharper disable ObjectCreationAsStatement
            // ReSharper disable AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => new STaggedUndirectedEdge <TestVertex, TestObject>(null, new TestVertex("v1"), null));
            Assert.Throws <ArgumentNullException>(() => new STaggedUndirectedEdge <TestVertex, TestObject>(new TestVertex("v1"), null, null));
            Assert.Throws <ArgumentNullException>(() => new STaggedUndirectedEdge <TestVertex, TestObject>(null, null, null));
            // ReSharper restore AssignNullToNotNullAttribute

            Assert.Throws <ArgumentException>(() => new STaggedUndirectedEdge <int, TestObject>(2, 1, null));

            // Not comparable
            var v1 = new TestVertex("v1");
            var v2 = new TestVertex("v2");

            Assert.Throws <ArgumentException>(() => new STaggedUndirectedEdge <TestVertex, TestObject>(v1, v2, null));

            var comparableV1 = new ComparableTestVertex("v1");
            var comparableV2 = new ComparableTestVertex("v2");

            Assert.Throws <ArgumentException>(() => new STaggedUndirectedEdge <ComparableTestVertex, TestObject>(comparableV2, comparableV1, null));
            // ReSharper restore ObjectCreationAsStatement
        }