OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cb/] [cb20006.a] - Diff between revs 294 and 338

Only display areas with differences | Details | Blame | View Log

Rev 294 Rev 338
-- CB20006.A
-- CB20006.A
--
--
--                             Grant of Unlimited Rights
--                             Grant of Unlimited Rights
--
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
--     unlimited rights in the software and documentation contained herein.
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     this public release, the Government intends to confer upon all
--     this public release, the Government intends to confer upon all
--     recipients unlimited rights  equal to those held by the Government.
--     recipients unlimited rights  equal to those held by the Government.
--     These rights include rights to use, duplicate, release or disclose the
--     These rights include rights to use, duplicate, release or disclose the
--     released technical data and computer software in whole or in part, in
--     released technical data and computer software in whole or in part, in
--     any manner and for any purpose whatsoever, and to have or permit others
--     any manner and for any purpose whatsoever, and to have or permit others
--     to do so.
--     to do so.
--
--
--                                    DISCLAIMER
--                                    DISCLAIMER
--
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--*
--
--
-- OBJECTIVE:
-- OBJECTIVE:
--      Check that exceptions are raised and properly handled (including
--      Check that exceptions are raised and properly handled (including
--      propagation by reraise) in protected operations.
--      propagation by reraise) in protected operations.
--
--
-- TEST DESCRIPTION:
-- TEST DESCRIPTION:
--      Declare a package with a protected type, including protected operation
--      Declare a package with a protected type, including protected operation
--      declarations and private data, simulating a counting semaphore.
--      declarations and private data, simulating a counting semaphore.
--      In the main procedure, perform calls on protected operations
--      In the main procedure, perform calls on protected operations
--      of the protected object designed to induce the raising of exceptions.
--      of the protected object designed to induce the raising of exceptions.
--
--
--      The exceptions raised are to be initially handled in the protected
--      The exceptions raised are to be initially handled in the protected
--      operations, but this handling involves the reraise of the exception
--      operations, but this handling involves the reraise of the exception
--      and the propagation of the exception to the caller.
--      and the propagation of the exception to the caller.
--
--
--      Ensure that the exceptions are raised, handled / reraised successfully
--      Ensure that the exceptions are raised, handled / reraised successfully
--      in protected procedures and functions.  Use "others" handlers in the
--      in protected procedures and functions.  Use "others" handlers in the
--      protected operations.
--      protected operations.
--
--
--
--
-- CHANGE HISTORY:
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--      06 Dec 94   SAIC    ACVC 2.0
--
--
--!
--!
package CB20006_0 is               -- Package Semaphore.
package CB20006_0 is               -- Package Semaphore.
   Reraised_In_Function,
   Reraised_In_Function,
   Reraised_In_Procedure,
   Reraised_In_Procedure,
   Handled_In_Function_Caller,
   Handled_In_Function_Caller,
   Handled_In_Procedure_Caller   : Boolean := False;
   Handled_In_Procedure_Caller   : Boolean := False;
   Resource_Overflow,
   Resource_Overflow,
   Resource_Underflow            : exception;
   Resource_Underflow            : exception;
   protected type Counting_Semaphore (Max_Resources : Integer) is
   protected type Counting_Semaphore (Max_Resources : Integer) is
      procedure Secure;
      procedure Secure;
      function  Resource_Limit_Exceeded return Boolean;
      function  Resource_Limit_Exceeded return Boolean;
      procedure Release;
      procedure Release;
   private
   private
      Count : Integer := Max_Resources;
      Count : Integer := Max_Resources;
   end Counting_Semaphore;
   end Counting_Semaphore;
end CB20006_0;
end CB20006_0;
     --=================================================================--
     --=================================================================--
with Report;
with Report;
package body CB20006_0 is                 -- Package Semaphore.
package body CB20006_0 is                 -- Package Semaphore.
   protected body Counting_Semaphore is
   protected body Counting_Semaphore is
      procedure Secure is
      procedure Secure is
      begin
      begin
         if (Count = 0) then              -- No resources left to secure.
         if (Count = 0) then              -- No resources left to secure.
            raise Resource_Underflow;
            raise Resource_Underflow;
            Report.Failed
            Report.Failed
              ("Program control not transferred by raise in Procedure Secure");
              ("Program control not transferred by raise in Procedure Secure");
         else
         else
            Count := Count - 1;           -- Available resources decremented.
            Count := Count - 1;           -- Available resources decremented.
         end if;
         end if;
      exception
      exception
         when Resource_Underflow =>
         when Resource_Underflow =>
            Reraised_In_Procedure := True;
            Reraised_In_Procedure := True;
            raise;                        -- Exception propagated to caller.
            raise;                        -- Exception propagated to caller.
            Report.Failed ("Exception not propagated to caller from Secure");
            Report.Failed ("Exception not propagated to caller from Secure");
         when others =>
         when others =>
            Report.Failed ("Unexpected exception raised in Secure");
            Report.Failed ("Unexpected exception raised in Secure");
      end Secure;
      end Secure;
      function Resource_Limit_Exceeded return Boolean is
      function Resource_Limit_Exceeded return Boolean is
      begin
      begin
         if (Count > Max_Resources) then
         if (Count > Max_Resources) then
            raise Resource_Overflow;      -- Exception used as control flow
            raise Resource_Overflow;      -- Exception used as control flow
                                          -- mechanism.
                                          -- mechanism.
            Report.Failed
            Report.Failed
              ("Specific raise did not alter program control" &
              ("Specific raise did not alter program control" &
               " from Resource_Limit_Exceeded");
               " from Resource_Limit_Exceeded");
         else
         else
            return (False);
            return (False);
         end if;
         end if;
      exception
      exception
         when others =>
         when others =>
            Reraised_In_Function := True;
            Reraised_In_Function := True;
            raise;                         -- Exception propagated to caller.
            raise;                         -- Exception propagated to caller.
            Report.Failed ("Exception not propagated to caller" &
            Report.Failed ("Exception not propagated to caller" &
                           " from Resource_Limit_Exceeded");
                           " from Resource_Limit_Exceeded");
      end Resource_Limit_Exceeded;
      end Resource_Limit_Exceeded;
      procedure Release is
      procedure Release is
      begin
      begin
         Count := Count + 1;               -- Count of resources available
         Count := Count + 1;               -- Count of resources available
                                           -- incremented.
                                           -- incremented.
         if Resource_Limit_Exceeded then   -- Call to protected operation
         if Resource_Limit_Exceeded then   -- Call to protected operation
            Count := Count - 1;            -- function that raises/reraises
            Count := Count - 1;            -- function that raises/reraises
                                           -- an exception.
                                           -- an exception.
            Report.Failed("Resource limit exceeded");
            Report.Failed("Resource limit exceeded");
         end if;
         end if;
      exception
      exception
         when others =>
         when others =>
            raise;                         -- Reraised and propagated again.
            raise;                         -- Reraised and propagated again.
             Report.Failed ("Exception not reraised by procedure Release");
             Report.Failed ("Exception not reraised by procedure Release");
      end Release;
      end Release;
   end Counting_Semaphore;
   end Counting_Semaphore;
end CB20006_0;
end CB20006_0;
     --=================================================================--
     --=================================================================--
with CB20006_0;                           -- Package Semaphore.
with CB20006_0;                           -- Package Semaphore.
with Report;
with Report;
procedure CB20006 is
procedure CB20006 is
begin
begin
   Report.Test ("CB20006", "Check that exceptions are raised and " &
   Report.Test ("CB20006", "Check that exceptions are raised and " &
                           "handled / reraised and propagated "    &
                           "handled / reraised and propagated "    &
                           "correctly by protected operations" );
                           "correctly by protected operations" );
   Test_Block:
   Test_Block:
   declare
   declare
      package Semaphore renames CB20006_0;
      package Semaphore renames CB20006_0;
      Total_Resources_Available : constant := 1;
      Total_Resources_Available : constant := 1;
      Resources : Semaphore.Counting_Semaphore (Total_Resources_Available);
      Resources : Semaphore.Counting_Semaphore (Total_Resources_Available);
                                             -- An object of protected type.
                                             -- An object of protected type.
   begin
   begin
      Allocate_Resources:
      Allocate_Resources:
      declare
      declare
         Loop_Count : Integer := Total_Resources_Available + 1;
         Loop_Count : Integer := Total_Resources_Available + 1;
      begin
      begin
         for I in 1..Loop_Count loop -- Force exception
         for I in 1..Loop_Count loop -- Force exception
            Resources.Secure;
            Resources.Secure;
         end loop;
         end loop;
         Report.Failed
         Report.Failed
           ("Exception not propagated from protected operation Secure");
           ("Exception not propagated from protected operation Secure");
      exception
      exception
         when Semaphore.Resource_Underflow =>        -- Exception propagated
         when Semaphore.Resource_Underflow =>        -- Exception propagated
           Semaphore.Handled_In_Procedure_Caller := True;  -- from protected
           Semaphore.Handled_In_Procedure_Caller := True;  -- from protected
         when others =>                                    -- procedure.
         when others =>                                    -- procedure.
           Semaphore.Handled_In_Procedure_Caller := False;
           Semaphore.Handled_In_Procedure_Caller := False;
      end Allocate_Resources;
      end Allocate_Resources;
      Deallocate_Resources:
      Deallocate_Resources:
      declare
      declare
         Loop_Count : Integer := Total_Resources_Available + 1;
         Loop_Count : Integer := Total_Resources_Available + 1;
      begin
      begin
         for I in 1..Loop_Count loop -- Force exception
         for I in 1..Loop_Count loop -- Force exception
            Resources.Release;
            Resources.Release;
         end loop;
         end loop;
         Report.Failed
         Report.Failed
           ("Exception not propagated from protected operation Release");
           ("Exception not propagated from protected operation Release");
      exception
      exception
         when Semaphore.Resource_Overflow =>        -- Exception propagated
         when Semaphore.Resource_Overflow =>        -- Exception propagated
            Semaphore.Handled_In_Function_Caller := True; -- from protected
            Semaphore.Handled_In_Function_Caller := True; -- from protected
         when others =>                                   -- function.
         when others =>                                   -- function.
            Semaphore.Handled_In_Function_Caller := False;
            Semaphore.Handled_In_Function_Caller := False;
      end Deallocate_Resources;
      end Deallocate_Resources;
      if not (Semaphore.Reraised_In_Procedure and
      if not (Semaphore.Reraised_In_Procedure and
              Semaphore.Reraised_In_Function  and
              Semaphore.Reraised_In_Function  and
              Semaphore.Handled_In_Procedure_Caller and
              Semaphore.Handled_In_Procedure_Caller and
              Semaphore.Handled_In_Function_Caller)
              Semaphore.Handled_In_Function_Caller)
      then                                       -- Incorrect excpt. handling
      then                                       -- Incorrect excpt. handling
         Report.Failed                           -- in protected operations.
         Report.Failed                           -- in protected operations.
           ("Improper exception handling/reraising by protected operations");
           ("Improper exception handling/reraising by protected operations");
      end if;
      end if;
   exception
   exception
      when others =>
      when others =>
         Report.Failed ("Unexpected exception " &
         Report.Failed ("Unexpected exception " &
                        " raised and propagated in test");
                        " raised and propagated in test");
   end Test_Block;
   end Test_Block;
   Report.Result;
   Report.Result;
end CB20006;
end CB20006;
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.