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.0rc2/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cb/] [cb20007.a] - Diff between revs 294 and 384

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

Rev 294 Rev 384
-- CB20007.A
-- CB20007.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 can be directly propagated to
--      Check that exceptions are raised and can be directly propagated to
--      the calling unit by protected operations.
--      the calling unit by 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 propagated directly from the protected
--      The exceptions raised are to be propagated directly from the protected
--      operations to the calling unit.
--      operations to the calling unit.
--
--
--      Ensure that the exceptions are raised and correctly propagated directly
--      Ensure that the exceptions are raised and correctly propagated directly
--      to the calling unit from protected procedures and functions.
--      to the calling unit from protected procedures and functions.
--
--
--
--
-- CHANGE HISTORY:
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--      06 Dec 94   SAIC    ACVC 2.0
--
--
--!
--!
package CB20007_0 is               -- Package Semaphore.
package CB20007_0 is               -- Package Semaphore.
   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 CB20007_0;
end CB20007_0;
     --=================================================================--
     --=================================================================--
with Report;
with Report;
package body CB20007_0 is                  -- Package Semaphore.
package body CB20007_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 ("Program control not transferred by raise");
            Report.Failed ("Program control not transferred by raise");
         else
         else
            Count := Count - 1;            -- Available resources decremented.
            Count := Count - 1;            -- Available resources decremented.
         end if;
         end if;
         -- No exception handlers here, direct propagation to calling unit.
         -- No exception handlers here, direct propagation to calling unit.
      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 ("Program control not transferred by raise");
            Report.Failed ("Program control not transferred by raise");
         else
         else
            return (False);
            return (False);
         end if;
         end if;
         -- No exception handlers here, direct propagation to calling unit.
         -- No exception handlers here, direct propagation to calling unit.
      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 an
            Count := Count - 1;            -- function that raises an
                                           -- exception.
                                           -- exception.
            Report.Failed("Resource limit exceeded");
            Report.Failed("Resource limit exceeded");
         end if;
         end if;
         -- No exception handler here for exception raised in function.
         -- No exception handler here for exception raised in function.
         -- Exception will propagate directly to calling unit.
         -- Exception will propagate directly to calling unit.
      end Release;
      end Release;
   end Counting_Semaphore;
   end Counting_Semaphore;
end CB20007_0;
end CB20007_0;
     --=================================================================--
     --=================================================================--
with CB20007_0;                           -- Package Semaphore.
with CB20007_0;                           -- Package Semaphore.
with Report;
with Report;
procedure CB20007 is
procedure CB20007 is
begin
begin
   Test_Block:
   Test_Block:
   declare
   declare
      package Semaphore renames CB20007_0;
      package Semaphore renames CB20007_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
      Report.Test ("CB20007", "Check that exceptions are raised and can "   &
      Report.Test ("CB20007", "Check that exceptions are raised and can "   &
                              "be directly propagated to the calling unit " &
                              "be directly propagated to the calling unit " &
                              "by protected operations" );
                              "by protected operations" );
      Allocate_Resources:
      Allocate_Resources:
      declare
      declare
         Loop_Count : Integer := Total_Resources_Available + 1;
         Loop_Count : Integer := Total_Resources_Available + 1;
      begin                                   -- Force exception.
      begin                                   -- Force exception.
         for I in 1..Loop_Count loop
         for I in 1..Loop_Count loop
            Resources.Secure;
            Resources.Secure;
         end loop;
         end loop;
         Report.Failed ("Exception not propagated from protected " &
         Report.Failed ("Exception not propagated from protected " &
                        " operation in Allocate_Resources");
                        " operation in Allocate_Resources");
      exception
      exception
         when Semaphore.Resource_Underflow =>              -- Exception prop.
         when Semaphore.Resource_Underflow =>              -- Exception prop.
            Semaphore.Handled_In_Procedure_Caller := True; -- from protected
            Semaphore.Handled_In_Procedure_Caller := True; -- from protected
                                                           -- procedure.
                                                           -- procedure.
         when others =>
         when others =>
            Report.Failed ("Unknown exception during resource allocation");
            Report.Failed ("Unknown exception during resource allocation");
      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                                   -- Force exception.
      begin                                   -- Force exception.
         for I in 1..Loop_Count loop
         for I in 1..Loop_Count loop
            Resources.Release;
            Resources.Release;
         end loop;
         end loop;
         Report.Failed ("Exception not propagated from protected " &
         Report.Failed ("Exception not propagated from protected " &
                        "operation in Deallocate_Resources");
                        "operation in Deallocate_Resources");
      exception
      exception
         when Semaphore.Resource_Overflow =>              -- Exception prop
         when Semaphore.Resource_Overflow =>              -- Exception prop
            Semaphore.Handled_In_Function_Caller := True; -- from protected
            Semaphore.Handled_In_Function_Caller := True; -- from protected
                                                          -- function.
                                                          -- function.
         when others =>
         when others =>
            Report.Failed ("Exception raised during resource deallocation");
            Report.Failed ("Exception raised during resource deallocation");
      end Deallocate_Resources;
      end Deallocate_Resources;
      if not (Semaphore.Handled_In_Procedure_Caller and -- Incorrect exception
      if not (Semaphore.Handled_In_Procedure_Caller and -- Incorrect exception
              Semaphore.Handled_In_Function_Caller)     -- handling in
              Semaphore.Handled_In_Function_Caller)     -- handling in
      then                                              -- protected ops.
      then                                              -- protected ops.
          Report.Failed
          Report.Failed
            ("Improper exception propagation by protected operations");
            ("Improper exception propagation 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 CB20007;
end CB20007;
 
 

powered by: WebSVN 2.1.0

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