with Ada.Text_IO; use Ada.Text_IO; package body Unit_Tests is function Run_Test (To_Run : in Test; Verbose : in Verbosity := Weak) return Test_Result is Result : Test_Result; begin if Verbose = Strong then Put ("Running test " & (-To_Run.Name) & "..."); end if; Result := To_Run.Func.all; if Verbose = Strong then if Result = Pass then Put_Line (" Pass"); else Put_Line (" Fail"); end if; elsif Verbose = Weak and Result = Fail then Put_Line ("Failed test " & (-To_Run.Name)); end if; return Result; end Run_Test; procedure Run_Test (To_Run : in Test; Verbose : in Verbosity := Weak) is Result : Test_Result; begin Result := Run_Test (To_Run, Verbose); end Run_Test; function Run_Tests (To_Run : in Test_Array; Verbose : in Verbosity := Weak) return Test_Result_Array is Total_Count : Natural := To_Run'Length; Pass_Count : Natural := 0; Results : Test_Result_Array (To_Run'Range); begin for R in To_Run'Range loop Results (R) := Run_Test (To_Run (R), Verbose); if Results (R) = Pass then Pass_Count := Pass_Count + 1; end if; end loop; if Verbose /= None then Put_Line ("Test results" & Integer'Image (Pass_Count) & " out of" & Integer'Image (Total_Count)); end if; return Results; end Run_Tests; procedure Run_Tests (To_Run : in Test_Array; Verbose : in Verbosity := Weak) is Total_Count : Natural := To_Run'Length; Pass_Count : Natural := 0; begin for T of To_Run loop if Run_Test (T, Verbose) = Pass then Pass_Count := Pass_Count + 1; end if; end loop; if Verbose /= None then Put_Line ("Test results" & Integer'Image (Pass_Count) & " out of" & Integer'Image (Total_Count)); end if; end Run_Tests; end Unit_Tests;