OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c9/] [c9a007a.ada] - Diff between revs 149 and 154

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 149 Rev 154
-- C9A007A.ADA
-- C9A007A.ADA
 
 
--                             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.
--*
--*
-- CHECK THAT A TASK MAY ABORT A TASK IT DEPENDS ON.
-- CHECK THAT A TASK MAY ABORT A TASK IT DEPENDS ON.
 
 
 
 
-- RM 5/26/82
-- RM 5/26/82
-- RM 7/02/82
-- RM 7/02/82
-- SPS 11/21/82
-- SPS 11/21/82
-- JBG 2/27/84
-- JBG 2/27/84
-- JBG 3/8/84
-- JBG 3/8/84
-- PWN 11/30/94 REMOVED PRAGMA PRIORITY INSTANCES FOR ADA 9X.
-- PWN 11/30/94 REMOVED PRAGMA PRIORITY INSTANCES FOR ADA 9X.
-- EDS 08/04/98 ENSURE THAT ABORTED TASKS HAVE TIME TO EFFECT THEIR ABORTIONS.
-- EDS 08/04/98 ENSURE THAT ABORTED TASKS HAVE TIME TO EFFECT THEIR ABORTIONS.
 
 
WITH IMPDEF;
WITH IMPDEF;
WITH REPORT; USE REPORT;
WITH REPORT; USE REPORT;
WITH SYSTEM; USE SYSTEM;
WITH SYSTEM; USE SYSTEM;
PROCEDURE  C9A007A  IS
PROCEDURE  C9A007A  IS
 
 
      TASK_NOT_ABORTED : BOOLEAN := FALSE;
      TASK_NOT_ABORTED : BOOLEAN := FALSE;
      TEST_VALID       : BOOLEAN := TRUE ;
      TEST_VALID       : BOOLEAN := TRUE ;
 
 
BEGIN
BEGIN
 
 
 
 
     -------------------------------------------------------------------
     -------------------------------------------------------------------
 
 
 
 
     TEST ( "C9A007A" , "CHECK THAT A TASK MAY ABORT A TASK" &
     TEST ( "C9A007A" , "CHECK THAT A TASK MAY ABORT A TASK" &
                        " IT DEPENDS ON"                     );
                        " IT DEPENDS ON"                     );
 
 
 
 
     DECLARE
     DECLARE
 
 
 
 
          TASK  REGISTER  IS
          TASK  REGISTER  IS
 
 
 
 
               ENTRY  BIRTHS_AND_DEATHS;
               ENTRY  BIRTHS_AND_DEATHS;
 
 
               ENTRY  SYNC1;
               ENTRY  SYNC1;
               ENTRY  SYNC2;
               ENTRY  SYNC2;
 
 
 
 
          END  REGISTER;
          END  REGISTER;
 
 
 
 
          TASK BODY  REGISTER  IS
          TASK BODY  REGISTER  IS
 
 
 
 
               TASK TYPE  SECONDARY  IS
               TASK TYPE  SECONDARY  IS
 
 
 
 
                    ENTRY  WAIT_INDEFINITELY;
                    ENTRY  WAIT_INDEFINITELY;
 
 
               END  SECONDARY;
               END  SECONDARY;
 
 
 
 
               TASK TYPE  T_TYPE1  IS
               TASK TYPE  T_TYPE1  IS
 
 
 
 
                    ENTRY  E;
                    ENTRY  E;
 
 
               END  T_TYPE1;
               END  T_TYPE1;
 
 
 
 
               TASK TYPE  T_TYPE2  IS
               TASK TYPE  T_TYPE2  IS
 
 
 
 
                    ENTRY  E;
                    ENTRY  E;
 
 
               END  T_TYPE2;
               END  T_TYPE2;
 
 
 
 
               T_OBJECT1 : T_TYPE1;
               T_OBJECT1 : T_TYPE1;
               T_OBJECT2 : T_TYPE2;
               T_OBJECT2 : T_TYPE2;
 
 
 
 
               TASK BODY  SECONDARY  IS
               TASK BODY  SECONDARY  IS
               BEGIN
               BEGIN
                    SYNC1;
                    SYNC1;
                    ABORT  T_OBJECT1;
                    ABORT  T_OBJECT1;
                    DELAY 0.0;
                    DELAY 0.0;
                    TASK_NOT_ABORTED  :=  TRUE;
                    TASK_NOT_ABORTED  :=  TRUE;
               END  SECONDARY;
               END  SECONDARY;
 
 
 
 
               TASK BODY  T_TYPE1  IS
               TASK BODY  T_TYPE1  IS
 
 
                    TYPE  ACCESS_TO_TASK  IS  ACCESS SECONDARY;
                    TYPE  ACCESS_TO_TASK  IS  ACCESS SECONDARY;
 
 
               BEGIN
               BEGIN
 
 
 
 
                    DECLARE
                    DECLARE
                         DEPENDENT_BY_ACCESS   :  ACCESS_TO_TASK  :=
                         DEPENDENT_BY_ACCESS   :  ACCESS_TO_TASK  :=
                                                  NEW  SECONDARY ;
                                                  NEW  SECONDARY ;
                    BEGIN
                    BEGIN
                         NULL;
                         NULL;
                    END;
                    END;
 
 
 
 
                    BIRTHS_AND_DEATHS;
                    BIRTHS_AND_DEATHS;
                                     -- DURING THIS SUSPENSION
                                     -- DURING THIS SUSPENSION
                                     --     MOST OF THE TASKS
                                     --     MOST OF THE TASKS
                                     --     ARE ABORTED   (FIRST
                                     --     ARE ABORTED   (FIRST
                                     --     TASK #1    -- T_OBJECT1 --
                                     --     TASK #1    -- T_OBJECT1 --
                                     --     THEN  #2 ).
                                     --     THEN  #2 ).
 
 
 
 
                    TASK_NOT_ABORTED := TRUE;
                    TASK_NOT_ABORTED := TRUE;
 
 
 
 
               END  T_TYPE1;
               END  T_TYPE1;
 
 
 
 
               TASK BODY  T_TYPE2  IS
               TASK BODY  T_TYPE2  IS
 
 
                    TASK  INNER_TASK  IS
                    TASK  INNER_TASK  IS
 
 
 
 
                         ENTRY  WAIT_INDEFINITELY;
                         ENTRY  WAIT_INDEFINITELY;
 
 
                    END  INNER_TASK;
                    END  INNER_TASK;
 
 
                    TASK BODY  INNER_TASK  IS
                    TASK BODY  INNER_TASK  IS
                    BEGIN
                    BEGIN
                         SYNC2;
                         SYNC2;
                         ABORT  T_OBJECT2;
                         ABORT  T_OBJECT2;
                         DELAY 0.0;
                         DELAY 0.0;
                         TASK_NOT_ABORTED  :=  TRUE;
                         TASK_NOT_ABORTED  :=  TRUE;
                    END  INNER_TASK;
                    END  INNER_TASK;
 
 
               BEGIN
               BEGIN
 
 
 
 
                    BIRTHS_AND_DEATHS;
                    BIRTHS_AND_DEATHS;
                                     -- DURING THIS SUSPENSION
                                     -- DURING THIS SUSPENSION
                                     --     MOST OF THE TASKS
                                     --     MOST OF THE TASKS
                                     --     ARE ABORTED   (FIRST
                                     --     ARE ABORTED   (FIRST
                                     --     TASK #1     -- T_OBJECT1 --
                                     --     TASK #1     -- T_OBJECT1 --
                                     --     THEN  #2 ).
                                     --     THEN  #2 ).
 
 
 
 
                    TASK_NOT_ABORTED := TRUE;
                    TASK_NOT_ABORTED := TRUE;
 
 
 
 
               END  T_TYPE2;
               END  T_TYPE2;
 
 
 
 
          BEGIN
          BEGIN
 
 
               DECLARE
               DECLARE
                    OLD_COUNT : INTEGER := 0;
                    OLD_COUNT : INTEGER := 0;
               BEGIN
               BEGIN
 
 
 
 
                    FOR  I  IN  1..5  LOOP
                    FOR  I  IN  1..5  LOOP
                         EXIT WHEN  BIRTHS_AND_DEATHS'COUNT = 2;
                         EXIT WHEN  BIRTHS_AND_DEATHS'COUNT = 2;
                         DELAY 10.0 * Impdef.One_Second;
                         DELAY 10.0 * Impdef.One_Second;
                    END LOOP;
                    END LOOP;
 
 
                    OLD_COUNT := BIRTHS_AND_DEATHS'COUNT;
                    OLD_COUNT := BIRTHS_AND_DEATHS'COUNT;
 
 
                    IF  OLD_COUNT = 2  THEN
                    IF  OLD_COUNT = 2  THEN
 
 
                         ACCEPT  SYNC1;   -- ALLOWING  ABORT#1
                         ACCEPT  SYNC1;   -- ALLOWING  ABORT#1
 
 
                         DELAY IMPDEF.CLEAR_READY_QUEUE;
                         DELAY IMPDEF.CLEAR_READY_QUEUE;
 
 
                         -- CHECK THAT  #1  WAS ABORTED  -  3 WAYS:
                         -- CHECK THAT  #1  WAS ABORTED  -  3 WAYS:
 
 
                         BEGIN
                         BEGIN
                              T_OBJECT1.E;
                              T_OBJECT1.E;
                              FAILED( "T_OBJECT1.E  DID NOT RAISE" &
                              FAILED( "T_OBJECT1.E  DID NOT RAISE" &
                                                   "  TASKING_ERROR" );
                                                   "  TASKING_ERROR" );
                         EXCEPTION
                         EXCEPTION
 
 
                              WHEN TASKING_ERROR  =>
                              WHEN TASKING_ERROR  =>
                                   NULL;
                                   NULL;
 
 
                              WHEN OTHERS  =>
                              WHEN OTHERS  =>
                                   FAILED("OTHER EXCEPTION RAISED - 1");
                                   FAILED("OTHER EXCEPTION RAISED - 1");
 
 
                         END;
                         END;
 
 
                         IF T_OBJECT1'CALLABLE  THEN
                         IF T_OBJECT1'CALLABLE  THEN
                              FAILED( "T_OBJECT1'CALLABLE = TRUE" );
                              FAILED( "T_OBJECT1'CALLABLE = TRUE" );
                         END IF;
                         END IF;
 
 
                         IF  OLD_COUNT - BIRTHS_AND_DEATHS'COUNT /= 1
                         IF  OLD_COUNT - BIRTHS_AND_DEATHS'COUNT /= 1
                         THEN
                         THEN
                              FAILED( "TASK#1 NOT REMOVED FROM QUEUE" );
                              FAILED( "TASK#1 NOT REMOVED FROM QUEUE" );
                         END IF;
                         END IF;
 
 
 
 
                         OLD_COUNT := BIRTHS_AND_DEATHS'COUNT;
                         OLD_COUNT := BIRTHS_AND_DEATHS'COUNT;
 
 
 
 
                         ACCEPT  SYNC2;   -- ALLOWING  ABORT#2
                         ACCEPT  SYNC2;   -- ALLOWING  ABORT#2
 
 
                         DELAY IMPDEF.CLEAR_READY_QUEUE;
                         DELAY IMPDEF.CLEAR_READY_QUEUE;
 
 
                         -- CHECK THAT  #2  WAS ABORTED  -  3 WAYS:
                         -- CHECK THAT  #2  WAS ABORTED  -  3 WAYS:
 
 
                         BEGIN
                         BEGIN
                              T_OBJECT2.E;
                              T_OBJECT2.E;
                              FAILED( "T_OBJECT2.E  DID NOT RAISE" &
                              FAILED( "T_OBJECT2.E  DID NOT RAISE" &
                                                   "  TASKING_ERROR" );
                                                   "  TASKING_ERROR" );
                         EXCEPTION
                         EXCEPTION
 
 
                              WHEN TASKING_ERROR  =>
                              WHEN TASKING_ERROR  =>
                                   NULL;
                                   NULL;
 
 
                              WHEN OTHERS  =>
                              WHEN OTHERS  =>
                                   FAILED("OTHER EXCEPTION RAISED - 2");
                                   FAILED("OTHER EXCEPTION RAISED - 2");
 
 
                         END;
                         END;
 
 
                         IF T_OBJECT2'CALLABLE  THEN
                         IF T_OBJECT2'CALLABLE  THEN
                              FAILED( "T_OBJECT2'CALLABLE = TRUE" );
                              FAILED( "T_OBJECT2'CALLABLE = TRUE" );
                         END IF;
                         END IF;
 
 
                         IF  OLD_COUNT - BIRTHS_AND_DEATHS'COUNT /= 1
                         IF  OLD_COUNT - BIRTHS_AND_DEATHS'COUNT /= 1
                         THEN
                         THEN
                              FAILED( "TASK#2 NOT REMOVED FROM QUEUE" );
                              FAILED( "TASK#2 NOT REMOVED FROM QUEUE" );
                         END IF;
                         END IF;
 
 
 
 
                         IF  BIRTHS_AND_DEATHS'COUNT /= 0  THEN
                         IF  BIRTHS_AND_DEATHS'COUNT /= 0  THEN
                              FAILED( "SOME TASKS STILL QUEUED" );
                              FAILED( "SOME TASKS STILL QUEUED" );
                         END IF;
                         END IF;
 
 
 
 
                    ELSE
                    ELSE
 
 
                         COMMENT( "LINEUP NOT COMPLETE (AFTER 50 S.)" );
                         COMMENT( "LINEUP NOT COMPLETE (AFTER 50 S.)" );
                         TEST_VALID  :=  FALSE;
                         TEST_VALID  :=  FALSE;
 
 
                    END IF;
                    END IF;
 
 
 
 
               END;
               END;
 
 
 
 
               WHILE  BIRTHS_AND_DEATHS'COUNT > 0  LOOP
               WHILE  BIRTHS_AND_DEATHS'COUNT > 0  LOOP
                    ACCEPT  BIRTHS_AND_DEATHS;
                    ACCEPT  BIRTHS_AND_DEATHS;
               END LOOP;
               END LOOP;
 
 
 
 
          END  REGISTER;
          END  REGISTER;
 
 
 
 
     BEGIN
     BEGIN
 
 
          NULL;
          NULL;
 
 
     END;
     END;
 
 
 
 
     -------------------------------------------------------------------
     -------------------------------------------------------------------
 
 
 
 
     IF  TEST_VALID  AND  TASK_NOT_ABORTED  THEN
     IF  TEST_VALID  AND  TASK_NOT_ABORTED  THEN
          FAILED( "SOME TASKS NOT ABORTED" );
          FAILED( "SOME TASKS NOT ABORTED" );
     END IF;
     END IF;
 
 
 
 
     RESULT;
     RESULT;
 
 
 
 
END  C9A007A;
END  C9A007A;
 
 

powered by: WebSVN 2.1.0

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