// TODO: The following produces a stack overflow. That's OK for now, peekPersisted is rarely
        //		 used and users can control behaviour with the depth parameter.
        //
        //		LinkedList peeked = (LinkedList) db().ext().peekPersisted(head, Integer.MAX_VALUE, true);
        //		assertListIsComplete(peeked);
        private void AssertListIsComplete(LongLinkedListTestCase.LinkedList head)
        {
            int count = 1;

            LongLinkedListTestCase.LinkedList tail = head._next;
            while (tail != head)
            {
                count++;
                tail = tail._next;
            }
            Assert.AreEqual(Count, count);
        }
 private static LongLinkedListTestCase.LinkedList NewLongCircularList()
 {
     LongLinkedListTestCase.LinkedList head = new LongLinkedListTestCase.LinkedList();
     LongLinkedListTestCase.LinkedList tail = head;
     for (int i = 1; i < Count; i++)
     {
         tail._next  = new LongLinkedListTestCase.LinkedList();
         tail        = tail._next;
         tail._depth = i;
     }
     tail._next = head;
     return(head);
 }
		private static LongLinkedListTestCase.LinkedList NewLongCircularList()
		{
			LongLinkedListTestCase.LinkedList head = new LongLinkedListTestCase.LinkedList();
			LongLinkedListTestCase.LinkedList tail = head;
			for (int i = 1; i < Count; i++)
			{
				tail._next = new LongLinkedListTestCase.LinkedList();
				tail = tail._next;
				tail._depth = i;
			}
			tail._next = head;
			return head;
		}
        public virtual void Test()
        {
            IQuery q = NewQuery(typeof(LongLinkedListTestCase.LinkedList));

            q.Descend("_depth").Constrain(0);
            IObjectSet objectSet = q.Execute();

            Assert.AreEqual(1, objectSet.Count);
            LongLinkedListTestCase.LinkedList head = (LongLinkedListTestCase.LinkedList)objectSet
                                                     .Next();
            Db().Activate(head, int.MaxValue);
            AssertListIsComplete(head);
            Db().Deactivate(head, int.MaxValue);
            Db().Activate(head, int.MaxValue);
            AssertListIsComplete(head);
            Db().Deactivate(head, int.MaxValue);
            Db().Refresh(head, int.MaxValue);
            AssertListIsComplete(head);
        }