URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c9/] [c974006.a] - Rev 720
Compare with Previous | Blame | View Log
-- C974006.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 executed if the triggering-- statement is a protected entry call, and the entry is accepted-- immediately. Check that the corresponding entry body is executed-- before the sequence of statements of the triggering alternative.-- Check that the abortable part is not executed.---- 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. Force the-- entry call to be accepted immediately by calling this protected-- procedure prior to the asynchronous select. Since the entry call-- is accepted immediately, the abortable part should never start. When-- entry call completes, the sequence of statements of the triggering-- alternative should execute.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!package C974006_0 is -- Automated teller machine abstraction.-- Flag for testing purposes:Entry_Body_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 C974006_0;--==================================================================--with Report;package body C974006_0 isprotected body ATM_Keyboard_Protected isentry Cancel_Pressed when (Last_Key_Pressed = Cancel) isbeginEntry_Body_Executed := True;end Cancel_Pressed;procedure Read_Key isbegin-- Simulate a procedure which processes 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) isbeginReport.Failed ("Abortable part executed");end Validate_Card;procedure Perform_Transaction (Card : in ATM_Card_Type) isbeginReport.Failed ("Triggering alternative sequence of statements " &"not fully executed");end Perform_Transaction;end C974006_0;--==================================================================--with Report;with C974006_0; -- Automated teller machine abstraction.use C974006_0;procedure C974006 isCard_Data : ATM_Card_Type;beginReport.Test ("C974006", "ATC: trigger is protected entry call" &" and completes first");Read_Card (Card_Data);declareKeyboard : C974006_0.ATM_Keyboard_Protected;begin-- Simulate the situation where the user hits cancel before the-- validation process can start:Keyboard.Read_Key; -- Force Keyboard.Cancel_Pressed to-- be accepted immediately.-- ---- Asynchronous select is tested here ---- --selectKeyboard.Cancel_Pressed; -- Entry call is accepted immediately,-- so abortable part does NOT start.if not Entry_Body_Executed then -- Executes after entry completes.Report.Failed ("Triggering alternative sequence of statements " &"executed before triggering statement complete");end if;raise Transaction_Canceled; -- Control passes to exception-- handler.then abortValidate_Card (Card_Data); -- Should not be executed.end select;Perform_Transaction (Card_Data); -- Should not be reached.exceptionwhen Transaction_Canceled =>null;end;Report.Result;end C974006;
