public void PopTest()
        {
            var arr = UnsafeStack.Allocate <int>(10);

            for (int i = 1; i <= 10; i++)
            {
                UnsafeStack.Push(arr, i);
            }

            Assert.AreEqual(10, UnsafeStack.GetCount(arr));

            var val = UnsafeStack.Pop <int>(arr);

            Assert.AreEqual(10, val);
            Assert.AreEqual(9, UnsafeStack.GetCount(arr));

            // Reverse stack-iteration
            for (int i = 9; i > 0; i--)
            {
                var num = UnsafeStack.Pop <int>(arr);
                Assert.AreEqual(i, num);
            }

            Assert.AreEqual(0, UnsafeStack.GetCount(arr));
        }
        public void MutateTest()
        {
            var arr = UnsafeStack.Allocate <int>(10);

            for (int i = 0; i < 10; i++)
            {
                UnsafeStack.Push(arr, i);
            }

            for (int i = 9; i >= 0; i--)
            {
                Assert.AreEqual(i, UnsafeStack.Pop <int>(arr));
            }

            UnsafeStack.Free(arr);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Project is working with UnsafeStackAndLinkedList.dll\n");

            // Working with unsafe code, implemented in class "UnsafeStack"
            Console.WriteLine("_______Working with unsafe Stack_______\n");

            UnsafeStack stack = new UnsafeStack();

            stack.Init();

            for (int i = 0; i < 13; i++)
            {
                stack.PushBack(i * i);
            }

            stack.ShowCurrent();

            Console.WriteLine("Popping top elements: ");
            for (int i = 0; i < 14; i++)
            {
                int temp = stack.Pop();
                Console.Write(temp.ToString() + " ");
            }

            Console.WriteLine("Adding few more elements...");
            for (int i = 0; i < 20; i++)
            {
                stack.PushBack(i * i * i);
            }

            stack.ShowCurrent();

            // Show all elements without deleting
            stack.ExtractAllStack();



            // Working with DoublyLinkedList
            Console.WriteLine("\n\n_______Working with DoublyLinkedList_______\n");

            DoublyLinkedList linkedList = new DoublyLinkedList();


            Random rand = new Random(12);

            for (int i = 0; i < 5; i++)
            {
                linkedList.InsertAtHead(rand.Next(0, 10));
            }

            // few more elements
            linkedList.InsertAtHead(1000);
            linkedList.InsertAtHead(1200);
            linkedList.InsertAtHead(333);
            linkedList.InsertAtHead(2);
            linkedList.InsertAtHead(124);
            linkedList.InsertAtHead(34);
            linkedList.InsertAtHead(424);
            linkedList.InsertAtHead(1);

            linkedList.Print();
            linkedList.PrintReverse();

            Console.WriteLine("\nDeleting few elements...\n");
            linkedList.Delete(1000);
            linkedList.Delete(333);
            linkedList.Delete(34);
            linkedList.Delete(124);

            // Printing
            Console.WriteLine();
            linkedList.Print();
            linkedList.PrintReverse();
        }
 public T Pop()
 {
     return(UnsafeStack.Pop <T>(m_inner));
 }