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); }
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 }