URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c9/] [c974013.a] - Rev 720
Compare with Previous | Blame | View Log
-- C974013.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 abortable part of an asynchronous select statement-- is aborted if it does not complete before the triggering statement-- completes, where the triggering statement is a delay_until-- statement.---- Check that the sequence of statements of the triggering alternative-- is executed after the abortable part is left.---- TEST DESCRIPTION:-- Declare a task with an accept statement containing an asynchronous-- select with a delay_until triggering statement. Parameterize-- the accept statement with the amount of time to be added to the-- current time to be used for the delay. Simulate a time-consuming-- calculation by declaring a procedure containing an infinite loop.-- Call this procedure in the abortable part.---- The delay will expire before the abortable part completes, at which-- time the abortable part is aborted, and the sequence of statements-- following the triggering statement is executed.---- Main test logic is identical to c974001 which uses simple delay------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0-- 28 Nov 95 SAIC Fixed problems for ACVC 2.0.1.----!with Report;with ImpDef;with Ada.Calendar;procedure C974013 is--========================================================--function "+" (Left : Ada.Calendar.Time; Right: Duration)return Ada.Calendar.Time renames Ada.Calendar."+";Allotted_Time : constant Duration := ImpDef.Switch_To_New_Task;Calculation_Canceled : exception;Count : Integer := 1234;procedure Lengthy_Calculation isbegin-- Simulate a non-converging calculation.loop -- Infinite loop.Count := (Count + 1) mod 10;exit when not Report.Equal (Count, Count); -- Condition always false.delay 0.0; -- abort completion pointend loop;end Lengthy_Calculation;--========================================================--task type Timed_Calculation isentry Calculation (Time_Limit : in Duration);end Timed_Calculation;task body Timed_Calculation isDelay_Time : Ada.Calendar.Time;beginloopselectaccept Calculation (Time_Limit : in Duration) do-- We have to construct an "until" time artificially-- as we have no control over when the test will be run--Delay_Time := Ada.Calendar.Clock + Time_Limit;-- ---- Asynchronous select is tested here ---- --selectdelay until Delay_Time; -- Time not reached yet, so-- Lengthy_Calculation starts.raise Calculation_Canceled; -- This is executed after-- Lengthy_Calculation aborted.then abortLengthy_Calculation; -- Delay expires before complete,-- so this call is aborted.-- Check that the whole of the abortable part is aborted,-- not just the statement in the abortable part that was-- executing at the timeReport.Failed ("Abortable part not aborted");end select;Report.Failed ("Triggering alternative sequence of " &"statements not executed");exception -- New Ada 9x: handler within acceptwhen Calculation_Canceled =>if Count = 1234 thenReport.Failed ("Abortable part did not execute");end if;end Calculation;orterminate;end select;end loop;exceptionwhen others =>Report.Failed ("Unexpected exception in Timed_Calculation task");end Timed_Calculation;--========================================================--begin -- Main program.Report.Test ("C974013", "Asynchronous Select: Trigger is delay_until " &"which completes before abortable part");declareTimed : Timed_Calculation; -- Task.beginTimed.Calculation (Time_Limit => Allotted_Time); -- Asynchronous select-- inside accept block.exceptionwhen Calculation_Canceled =>Report.Failed ("wrong exception handler used");end;Report.Result;end C974013;
