--
-- Copyright (C) 2008, AdaCore
--
with Ada.Exceptions;
with System.Assertions;
with AUnit.Assertions; use AUnit.Assertions;
with Stack; use Stack;
package body Operations.Binary.Gen_Test is
------------
-- Set_Up --
------------
procedure Set_Up (T : in out Test) is
begin
Set_Up (T.Op, T.Test_Op1, T.Test_Op2, T.Exp_Res);
end Set_Up;
---------------
-- Tear_Down --
---------------
procedure Tear_Down (T : in out Test) is
pragma Unreferenced (T);
begin
-- Make sure the stack is empty after each test.
while Stack.Length > 0 loop
declare
Op : constant Operands.Operand'Class := Stack.Pop;
pragma Unreferenced (Op);
begin
null;
end;
end loop;
end Tear_Down;
--------------
-- Test_Pop --
--------------
procedure Test_Pop (T : in out Test) is
begin
begin
Pop (T.Op);
Assert (False, "stack is empty, it should have raised an exception");
exception
when System.Assertions.Assert_Failure =>
-- Precondition failed. OK
null;
when E : others =>
Assert (False, "Wrong exception raised: " &
Ada.Exceptions.Exception_Name (E));
end;
Stack.Push (T.Test_Op1);
Stack.Push (T.Test_Op2);
Pop (T.Op);
Assert (Stack.Length = 0, "Wrong pop operation");
Assert (T.Op.Op1 = T.Test_Op1, "Wrong first value poped");
Assert (T.Op.Op2 = T.Test_Op2, "Wrong 2nd value poped");
end Test_Pop;
---------------
-- Test_Push --
---------------
procedure Test_Push (T : in out Test) is
begin
T.Op.Res := T.Exp_Res;
T.Op.Push;
Assert (Stack.Length = 1, "Wrong push on stack");
Assert (Stack.Top = Operands.Operand'Class (T.Exp_Res),
"Wrong value pushed");
for J in 2 .. Stack.Max_Stack_Size loop
Stack.Push (T.Test_Op1);
end loop;
begin
T.Op.Push;
Assert (False, "stack is full, it should have raised an exception");
exception
when System.Assertions.Assert_Failure =>
null; -- Expected
when E : others =>
Assert (False, "Wrong exception raised: " &
Ada.Exceptions.Exception_Name (E));
end;
end Test_Push;
------------------
-- Test_Execute --
------------------
procedure Test_Execute (T : in out Test) is
begin
T.Op.Op1 := T.Test_Op1;
T.Op.Op2 := T.Test_Op2;
T.Op.Execute;
Assert (T.Op.Res = T.Exp_Res, "Incorrect result set after Execute");
end Test_Execute;
end Operations.Binary.Gen_Test;