public void PlaceAfterWithUnknownTargetThrows()
        {
            IDualLinkNode <int> testNode    = TestObject.AddFirst(TestInt);
            DualLinkNode <int>  unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.PlaceAfter(testNode, unknownNode);
        }
        public void PlaceBeforeWithUnknownSourceThrows()
        {
            IDualLinkNode <int> testNode    = TestObject.AddFirst(TestInt);
            DualLinkNode <int>  unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.PlaceBefore(unknownNode, testNode);
        }
        private void VerifyTestObjectOrdering(int expectedNodes, List <IDualLinkNode <int> > nodeReference)
        {
            Assert.AreEqual(expectedNodes, TestObject.Count);

            IDualLinkNode <int> currentNode = TestObject.First;

            for (int i = 0; i < expectedNodes; i++)
            {
                if (i == 0)
                {
                    Assert.IsNull(currentNode.Previous);
                }
                else
                {
                    Assert.AreSame(nodeReference[i - 1], currentNode.Previous);
                }

                Assert.AreEqual(i, currentNode.Value);

                if (i == expectedNodes - 1)
                {
                    Assert.IsNull(currentNode.Next);
                }
                else
                {
                    Assert.AreSame(nodeReference[i + 1], currentNode.Next);
                }

                currentNode = currentNode.Next;
            }
        }
        public void AddBeforeReturnsNodeWithValue()
        {
            IDualLinkNode <int> first = TestObject.AddFirst(TestInt);

            IDualLinkNode <int> actual = TestObject.AddBefore(first, TestInt);

            Assert.AreEqual(TestInt, actual.Value);
        }
        public void RemoveReturnsNodeValue()
        {
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            int actual = TestObject.Remove(testNode);

            Assert.AreEqual(TestInt, actual);
        }
        public void AddAfterRemovedNodeThrows()
        {
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.Remove(testNode);

            TestObject.AddAfter(testNode, TestInt);
        }
        public void RemoveDecrementsCount()
        {
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.Remove(testNode);

            Assert.AreEqual(0, TestObject.Count);
        }
        public void PlaceAfterSetsFirst()
        {
            IDualLinkNode <int> last     = TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.PlaceAfter(last, testNode);

            Assert.AreSame(last, TestObject.First);
        }
        public void RemoveLastSetsNewLast()
        {
            IDualLinkNode <int> last     = TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddLast(TestInt);

            TestObject.Remove(testNode);

            Assert.AreSame(last, TestObject.Last);
        }
        public void PlaceLastSetsNewFirst()
        {
            IDualLinkNode <int> newFirst = TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.PlaceLast(testNode);

            Assert.AreSame(newFirst, TestObject.First);
        }
        public void PlaceLastSetsNodeAsLast()
        {
            TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.PlaceLast(testNode);

            Assert.AreSame(testNode, TestObject.Last);
        }
        public void PlaceBeforeSetsLast()
        {
            IDualLinkNode <int> first    = TestObject.AddFirst(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddLast(TestInt);

            TestObject.PlaceBefore(first, testNode);

            Assert.AreSame(first, TestObject.Last);
        }
        public void PlaceAfterRemovedNodeThrows()
        {
            IDualLinkNode <int> testNode    = TestObject.AddFirst(TestInt);
            IDualLinkNode <int> removedNode = TestObject.AddFirst(TestInt);

            TestObject.Remove(removedNode);

            TestObject.PlaceAfter(removedNode, testNode);
        }
        public void AddFirstAttachesBeforeCurrentFirst()
        {
            IDualLinkNode <int> original = TestObject.AddFirst(TestInt);

            IDualLinkNode <int> actual = TestObject.AddFirst(TestInt);

            Assert.AreSame(original, actual.Next);
            Assert.AreSame(actual, original.Previous);
        }
        public void AddLastSetsFirstToFirstElement()
        {
            IDualLinkNode <int> original = TestObject.AddLast(TestInt);

            IDualLinkNode <int> actual = TestObject.AddLast(TestInt);

            Assert.AreSame(TestObject.First, original);
            Assert.AreSame(TestObject.Last, actual);
        }
        public void RemoveFirstSetsNewFirst()
        {
            IDualLinkNode <int> first    = TestObject.AddFirst(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.Remove(testNode);

            Assert.AreSame(first, TestObject.First);
        }
Beispiel #17
0
        public void PlaceBefore(IDualLinkNode <TEntity> sourceNode, IDualLinkNode <TEntity> targetNode)
        {
            DualLinkNode <TEntity> source = FindNode(sourceNode);
            DualLinkNode <TEntity> target = FindNode(targetNode);

            if (source != target)
            {
                target.AttachBefore(source);
                RealignEnds();
            }
        }
Beispiel #18
0
 private void RealignEnds()
 {
     while (First?.Previous != null)
     {
         First = First.Previous;
     }
     while (Last?.Next != null)
     {
         Last = Last.Next;
     }
 }
        public void PlaceLastMaintainsLinks()
        {
            IDualLinkNode <int> newFirst = TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddFirst(TestInt);

            TestObject.PlaceLast(testNode);

            Assert.IsNull(newFirst.Previous);
            Assert.AreSame(testNode, newFirst.Next);
            Assert.AreSame(newFirst, testNode.Previous);
            Assert.IsNull(testNode.Next);
        }
Beispiel #20
0
 private DualLinkNode <TEntity> FindNode(IDualLinkNode <TEntity> suppliedNode)
 {
     if (suppliedNode != null)
     {
         if (!Nodes.TryGetValue(suppliedNode, out DualLinkNode <TEntity> foundNode))
         {
             throw new InvalidOperationException("Unknown node supplied");
         }
         return(foundNode);
     }
     return(null);
 }
        public void AddAfterIncrementsCount(int entities)
        {
            IDualLinkNode <int> startNode = TestObject.AddLast(TestInt);

            for (int i = 1; i <= entities; i++)
            {
                TestObject.AddAfter(startNode, i);
                Assert.AreEqual(i + 1, TestObject.Count);
            }

            Assert.AreEqual(entities + 1, TestObject.Count);
        }
        public void RemoveNullsNodeRelationships()
        {
            TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddLast(TestInt);

            TestObject.AddLast(TestInt);

            TestObject.Remove(testNode);

            Assert.IsNull(testNode.Previous);
            Assert.IsNull(testNode.Next);
        }
Beispiel #23
0
        public IDualLinkNode <TEntity> AddAfter(IDualLinkNode <TEntity> suppliedNode, TEntity entity)
        {
            DualLinkNode <TEntity> sourceNode = FindNode(suppliedNode);
            DualLinkNode <TEntity> newNode    = new DualLinkNode <TEntity>(this, entity);

            if (sourceNode != null)
            {
                newNode.AttachAfter(sourceNode);
            }
            AddElement(newNode);

            return(newNode);
        }
Beispiel #24
0
 private void AddElement(DualLinkNode <TEntity> node)
 {
     Nodes.Add(node, node);
     if (First == null)
     {
         First = node;
     }
     if (Last == null)
     {
         Last = node;
     }
     RealignEnds();
 }
        public void PlaceAfterMaintainsLinks()
        {
            IDualLinkNode <int> first    = TestObject.AddFirst(TestInt);
            IDualLinkNode <int> last     = TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddBefore(first, TestInt);

            TestObject.PlaceAfter(first, testNode);

            Assert.AreSame(testNode, first.Next);
            Assert.AreSame(first, testNode.Previous);
            Assert.AreSame(last, testNode.Next);
            Assert.AreSame(testNode, last.Previous);
        }
        public void RemoveConnectsNulledRelationships()
        {
            IDualLinkNode <int> first    = TestObject.AddLast(TestInt);
            IDualLinkNode <int> testNode = TestObject.AddLast(TestInt);
            IDualLinkNode <int> last     = TestObject.AddLast(TestInt);

            TestObject.Remove(testNode);

            Assert.IsNull(first.Previous);
            Assert.AreSame(last, first.Next);
            Assert.AreSame(first, last.Previous);
            Assert.IsNull(last.Next);
        }
        public void AddBeforePreservesLinking(int entities)
        {
            List <IDualLinkNode <int> > nodeReference = new List <IDualLinkNode <int> >();
            IDualLinkNode <int>         startNode     = TestObject.AddFirst(entities);

            for (int i = 0; i < entities; i++)
            {
                nodeReference.Add(
                    TestObject.AddBefore(startNode, i));
            }
            nodeReference.Add(startNode);

            VerifyTestObjectOrdering(entities + 1, nodeReference);
        }
Beispiel #28
0
        /// <summary>
        /// Fetches the node before another one (e.g. the node before the fourth is the third)
        /// </summary>
        /// <param name="node">the node that has a previous</param>
        /// <returns></returns>
        private IDualLinkNode <T> NodeBefore(IDualLinkNode <T> node)
        {
            if (FirstNode == null || node == FirstNode)
            {
                return(null);
            }
            var currentNode = FirstNode;

            while (currentNode.Next != node)
            {
                currentNode = currentNode.Next;
            }
            return(currentNode);
        }
        public void AddAfterPreservesLinking(int entities)
        {
            List <IDualLinkNode <int> > nodeReference = new List <IDualLinkNode <int> >();
            IDualLinkNode <int>         startNode     = TestObject.AddFirst(0);

            for (int i = entities; i > 0; i--)
            {
                nodeReference.Add(
                    TestObject.AddAfter(startNode, i));
            }
            nodeReference.Add(startNode);
            nodeReference.Reverse();

            VerifyTestObjectOrdering(entities + 1, nodeReference);
        }
        public void TrimAfterSetsTrimNodeAsLast(int nodeCount, int trimIndex)
        {
            IDualLinkNode <int> trimNode = null;

            for (int i = 0; i < nodeCount; i++)
            {
                IDualLinkNode <int> testNode = TestObject.AddLast(i);
                if (i == trimIndex)
                {
                    trimNode = testNode;
                }
            }

            TestObject.TrimAfter(trimNode);

            Assert.AreSame(trimNode, TestObject.Last);
        }