with Ada.Assertions; use Ada.Assertions; with Ada.Text_IO; with Chests.Ring_Buffers; with Chests.Stacks; procedure Test_Chests is begin declare package Integer_Stacks is new Chests.Stacks (Element_Type => Integer, Capacity => 3); use Integer_Stacks; S : Stack; I : Integer; begin Clear (S); Assert (Is_Empty (S), "Stack.Clear did not"); Push (S, 1); Assert (not Is_Empty (S), "Not empty after pushing to stack"); Assert (Length (S) = 1, "Incorrect Length after push"); Push (S, 2); Push (S, 3); Assert (Is_Full (S), "Stack was not full after writing Capacity times"); Pop (S, I); Assert (I = 3, "First item Popped out of stack was incorrect"); Pop (S, I); Assert (I = 2, "Second Pop was incorrect"); Assert (not Is_Empty (S) and not Is_Full (S), "Partial stack state was incorrect"); I := Pop (S); Assert (I = 1, "Final Pop was incorrect"); Assert (Is_Empty (S), "Stack not empty after popping all items"); end; declare package Integer_Ring_Buffers is new Chests.Ring_Buffers (Element_Type => Integer, Capacity => 3); use Integer_Ring_Buffers; RB : Ring_Buffer; begin Clear (RB); Assert (Is_Empty (RB), "Ring not empty after Clear"); Append (RB, 1); Assert (not Is_Empty (RB) and not Is_Full (RB), "Partially full Ring returned incorrect state"); Prepend (RB, 2); Append (RB, 3); Assert (Last_Element (RB) = 3, "Last_Element returned incorrect value"); Assert (First_Element (RB) = 2, "First_Element returned incorrect value"); Assert (Is_Full (RB), "Is_Full returned incorrect value"); Assert (Length (RB) = 3, "Length of full ring was incorrect"); Delete_First (RB); Assert (Length (RB) = 2, "Length did not decrease after Delete_First"); Assert (First_Element (RB) = 1, "First element was incorrect after Delete_First"); Delete_Last (RB); Assert (Last_Element (RB) = 1, "Last element was incorrect after Delete_Last"); Delete_Last (RB); Assert (Is_Empty (RB), "Ring was not empty after deleting all items"); end; Ada.Text_IO.Put_Line ("PASS"); end Test_Chests;