c980002.a
来自「用于进行gcc测试」· A 代码 · 共 166 行
A
166 行
-- C980002.A---- Grant of Unlimited Rights---- 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 -- unlimited rights in the software and documentation contained herein.-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making -- this public release, the Government intends to confer upon all -- recipients unlimited rights equal to those held by the Government. -- These rights include rights to use, duplicate, release or disclose the -- 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 -- to do so.---- DISCLAIMER---- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A-- PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:-- Check that aborts are deferred during protected actions.---- TEST DESCRIPTION:-- This test uses an asynchronous transfer of control to attempt-- to abort a protected operation. The protected operation-- includes several requeues to check that the requeue does not-- allow the abort to occur.------ CHANGE HISTORY:-- 30 OCT 95 SAIC ACVC 2.1----!with Report;procedure C980002 is Max_Checkpoints : constant := 7; type Checkpoint_ID is range 1..Max_Checkpoints; type Points_Array is array (Checkpoint_ID) of Boolean;begin Report.Test ("C980002", "Check that aborts are deferred during a protected action" & " including requeues"); declare -- test encapsulation protected Checkpoint is procedure Got_Here (Id : Checkpoint_ID); function Results return Points_Array; private Reached_Points : Points_Array := (others => False); end Checkpoint; protected body Checkpoint is procedure Got_Here (Id : Checkpoint_ID) is begin Reached_Points (Id) := True; end Got_Here; function Results return Points_Array is begin return Reached_Points; end Results; end Checkpoint; protected Start_Here is entry AST_Waits_Here; entry Start_PO; private Open : Boolean := False; entry First_Stop; end Start_Here; protected Middle_PO is entry Stop_1; entry Stop_2; end Middle_PO; protected Final_PO is entry Final_Stop; end Final_PO; protected body Start_Here is entry AST_Waits_Here when Open is begin null; end AST_Waits_Here; entry Start_PO when True is begin Open := True; Checkpoint.Got_Here (1); requeue First_Stop; end Start_PO; -- make sure the AST has been accepted before continuing entry First_Stop when AST_Waits_Here'Count = 0 is begin Checkpoint.Got_Here (2); requeue Middle_PO.Stop_1; end First_Stop; end Start_Here; protected body Middle_PO is entry Stop_1 when True is begin Checkpoint.Got_Here (3); requeue Stop_2; end Stop_1; entry Stop_2 when True is begin Checkpoint.Got_Here (4); requeue Final_PO.Final_Stop; end Stop_2; end Middle_PO; protected body Final_PO is entry Final_Stop when True is begin Checkpoint.Got_Here (5); end Final_Stop; end Final_PO; begin -- test encapsulation select Start_Here.AST_Waits_Here; Checkpoint.Got_Here (6); then abort Start_Here.Start_PO; delay 0.0; -- abort completion point Checkpoint.Got_Here (7); end select; Check_The_Results: declare Chk : constant Points_Array := Checkpoint.Results; Expected : constant Points_Array := (1..6 => True, 7 => False); begin for I in Checkpoint_ID loop if Chk (I) /= Expected (I) then Report.Failed ("checkpoint error" & Checkpoint_ID'Image (I) & " actual is " & Boolean'Image (Chk(I))); end if; end loop; end Check_The_Results; exception when others => Report.Failed ("unexpected exception"); end; -- test encapsulation Report.Result;end C980002;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?