URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c9/] [c974007.a] - Rev 720
Compare with Previous | Blame | View Log
-- C974007.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 the sequence of statements of the triggering alternative-- of an asynchronous select statement is not executed if the triggering-- statement is a protected entry call, and the entry is not accepted-- before the abortable part completes. Check that execution continues-- immediately following the asynchronous select.---- TEST DESCRIPTION:-- Declare a main procedure containing an asynchronous select with a-- protected entry call as triggering statement. Declare a protected-- procedure which sets the protected entry's barrier true. Ensure-- that the entry call is never accepted by not calling the protected-- procedure; the barrier remains false, and the entry call from-- asynchronous select is queued. Since the abortable part will complete-- before the entry is accepted, the sequence of statements of the-- triggering alternative is never executed.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!package C974007_0 is -- Automated teller machine abstraction.-- Flags for testing purposes:--Abortable_Part_Executed : Boolean := False;Perform_Transaction_Executed : Boolean := False;Triggering_Statement_Executed : Boolean := False;type Key_Enum is (None, Cancel, Deposit, Withdraw);type Card_Number_Type is private;type Card_PIN_Type is private;type ATM_Card_Type is private;Transaction_Canceled : exception;protected type ATM_Keyboard_Protected isentry Cancel_Pressed;procedure Read_Key;privateLast_Key_Pressed : Key_Enum := None;end ATM_Keyboard_Protected;procedure Read_Card (Card : in out ATM_Card_Type);procedure Validate_Card (Card : in ATM_Card_Type);procedure Perform_Transaction (Card : in ATM_Card_Type);privatetype Card_Number_Type is range 1 .. 9999;type Card_PIN_Type is range 100 .. 999;type ATM_Card_Type is recordNumber : Card_Number_Type;PIN : Card_PIN_Type;end record;end C974007_0;--==================================================================--with Report;package body C974007_0 isprotected body ATM_Keyboard_Protected is-- Barrier is false for the live of the testentry Cancel_Pressed when (Last_Key_Pressed = Cancel) isbeginTriggering_Statement_Executed := true; -- Test has failed-- (Note: cannot call Report.Failed in the protected entry body]end Cancel_Pressed;procedure Read_Key is -- Neverbegin -- called.-- Simulate a procedure which reads user keyboard input, and-- which is called by some interrupt handler.Last_Key_Pressed := Cancel;end Read_Key;end ATM_Keyboard_Protected;procedure Read_Card (Card : in out ATM_Card_Type) isbeginCard.Number := 9999;Card.PIN := 111;end Read_Card;procedure Validate_Card (Card : in ATM_Card_Type) isbeginAbortable_Part_Executed := True;end Validate_Card;procedure Perform_Transaction (Card : in ATM_Card_Type) isbeginPerform_Transaction_Executed := True;end Perform_Transaction;end C974007_0;--==================================================================--with Report;with C974007_0; -- Automated teller machine abstraction.use C974007_0;procedure C974007 isCard_Data : ATM_Card_Type;beginReport.Test ("C974007", "ATC: trigger is protected entry call" &" and abortable part completes first");Read_Card (Card_Data);declareKeyboard : C974007_0.ATM_Keyboard_Protected;begin-- ---- Asynchronous select is tested here ---- --selectKeyboard.Cancel_Pressed; -- Barrier is never set true, so-- entry call is queued and never-- accepted.raise Transaction_Canceled; -- Should not be executed.then abortValidate_Card (Card_Data); -- This call completes before-- Keyboard.Cancel_Pressed can be-- accepted.end select;Perform_Transaction (Card_Data); -- Execution proceeds here after-- Validate_Card completes.exceptionwhen Transaction_Canceled =>Report.Failed ("Triggering alternative sequence of statements " &"executed");end;if Triggering_Statement_Executed thenReport.Failed ("Triggering statement was executed");end if;if not Abortable_Part_Executed thenReport.Failed ("Abortable part not executed");end if;if not Perform_Transaction_Executed thenReport.Failed ("Statements following asynchronous select not " &"executed");end if;Report.Result;end C974007;
