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/] [c954026.a] - Diff between revs 154 and 816

Only display areas with differences | Details | Blame | View Log

Rev 154 Rev 816
-- C954026.A
-- C954026.A
--
--
--                             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.
--*
--*
--
--
-- OBJECTIVE:
-- OBJECTIVE:
--      Check that if the original protected entry call was a conditional
--      Check that if the original protected entry call was a conditional
--      entry call, the call is cancelled if a requeue-with-abort of the
--      entry call, the call is cancelled if a requeue-with-abort of the
--      call is not selected immediately.
--      call is not selected immediately.
--      Check that if the original protected entry call was a timed entry
--      Check that if the original protected entry call was a timed entry
--      call, the expiration time for a requeue-with-abort is the original
--      call, the expiration time for a requeue-with-abort is the original
--      expiration time.
--      expiration time.
--
--
-- TEST DESCRIPTION:
-- TEST DESCRIPTION:
--      In this test the main task makes a variety of calls to the protected
--      In this test the main task makes a variety of calls to the protected
--      object Initial_PO.  These calls include a simple call, a conditional
--      object Initial_PO.  These calls include a simple call, a conditional
--      call, and a timed call.  The timed calls include calls with enough
--      call, and a timed call.  The timed calls include calls with enough
--      time and those with less than the needed amount of time to get through
--      time and those with less than the needed amount of time to get through
--      the requeue performed by Initial_PO.
--      the requeue performed by Initial_PO.
--      Initial_PO requeues its entry call to Final_PO.
--      Initial_PO requeues its entry call to Final_PO.
--      Final_PO does not accept the requeued call until the protected
--      Final_PO does not accept the requeued call until the protected
--      procedure Ok_To_Take_Requeue is called.
--      procedure Ok_To_Take_Requeue is called.
--      A separate task, Delayed_Opener, is used to call Ok_To_Take_Requeue
--      A separate task, Delayed_Opener, is used to call Ok_To_Take_Requeue
--      after a delay amount specified by the main task has expired.
--      after a delay amount specified by the main task has expired.
--
--
--
--
-- CHANGE HISTORY:
-- CHANGE HISTORY:
--      15 DEC 95   SAIC    ACVC 2.1
--      15 DEC 95   SAIC    ACVC 2.1
--      10 JUL 96   SAIC    Incorporated reviewer comments.
--      10 JUL 96   SAIC    Incorporated reviewer comments.
--      10 OCT 96   SAIC    Incorporated fix provided by vendor.
--      10 OCT 96   SAIC    Incorporated fix provided by vendor.
--
--
--!
--!
with Calendar;
with Calendar;
use type Calendar.Time;
use type Calendar.Time;
with Report;
with Report;
with Impdef;
with Impdef;
procedure C954026 is
procedure C954026 is
    Verbose : constant Boolean := False;
    Verbose : constant Boolean := False;
    Final_Po_Reached : Boolean := False;
    Final_Po_Reached : Boolean := False;
    Allowed_Time : constant Duration := 2.0 * Impdef.One_Long_Second;
    Allowed_Time : constant Duration := 2.0 * Impdef.One_Long_Second;
    Plenty_Of_Time : constant Duration :=
    Plenty_Of_Time : constant Duration :=
       Allowed_Time + Impdef.Clear_Ready_Queue + 1.0 * Impdef.One_Long_Second;
       Allowed_Time + Impdef.Clear_Ready_Queue + 1.0 * Impdef.One_Long_Second;
    Not_Enough_Time : constant Duration := Allowed_Time - 0.5 * Impdef.One_Long_Second;
    Not_Enough_Time : constant Duration := Allowed_Time - 0.5 * Impdef.One_Long_Second;
begin
begin
    Report.Test ("C954026",
    Report.Test ("C954026",
                 "Check that if the original entry" &
                 "Check that if the original entry" &
                    " call was a conditional or timed entry call," &
                    " call was a conditional or timed entry call," &
                    " the expiration time for a requeue with" &
                    " the expiration time for a requeue with" &
                    " abort to a protected" &
                    " abort to a protected" &
                    " entry is the original expiration time");
                    " entry is the original expiration time");
    declare
    declare
        protected Initial_Po is
        protected Initial_Po is
            entry Start_Here;
            entry Start_Here;
        end Initial_Po;
        end Initial_Po;
        protected Final_Po is
        protected Final_Po is
            entry Requeue_Target;
            entry Requeue_Target;
            procedure Ok_To_Take_Requeue;
            procedure Ok_To_Take_Requeue;
            procedure Close_Requeue;
            procedure Close_Requeue;
        private
        private
            Open : Boolean := False;
            Open : Boolean := False;
        end Final_Po;
        end Final_Po;
        -- the Delayed_Opener task is used to notify Final_PO that it can
        -- the Delayed_Opener task is used to notify Final_PO that it can
        -- accept the Requeue_Target entry.
        -- accept the Requeue_Target entry.
        task Delayed_Opener is
        task Delayed_Opener is
            entry Start_Timer (Amt : Duration);
            entry Start_Timer (Amt : Duration);
            entry Cancel_Timer;
            entry Cancel_Timer;
        end Delayed_Opener;
        end Delayed_Opener;
        task body Delayed_Opener is
        task body Delayed_Opener is
            Wait_Amt : Duration;
            Wait_Amt : Duration;
        begin
        begin
            loop
            loop
                accept Start_Timer (Amt : Duration) do
                accept Start_Timer (Amt : Duration) do
                    Wait_Amt := Amt;
                    Wait_Amt := Amt;
                end Start_Timer;
                end Start_Timer;
                exit when Wait_Amt < 0.0;
                exit when Wait_Amt < 0.0;
                if Verbose then
                if Verbose then
                    Report.Comment ("Timer started");
                    Report.Comment ("Timer started");
                end if;
                end if;
                select
                select
                    accept Cancel_Timer do
                    accept Cancel_Timer do
                        Final_Po.Close_Requeue;
                        Final_Po.Close_Requeue;
                    end Cancel_Timer;
                    end Cancel_Timer;
                or
                or
                    delay Wait_Amt;
                    delay Wait_Amt;
                    Final_Po.Ok_To_Take_Requeue;
                    Final_Po.Ok_To_Take_Requeue;
                    accept Cancel_Timer do
                    accept Cancel_Timer do
                        Final_Po.Close_Requeue;
                        Final_Po.Close_Requeue;
                    end Cancel_Timer;
                    end Cancel_Timer;
                end select;
                end select;
            end loop;
            end loop;
        exception
        exception
            when others =>
            when others =>
                Report.Failed ("exception in Delayed_Opener");
                Report.Failed ("exception in Delayed_Opener");
        end Delayed_Opener;
        end Delayed_Opener;
        protected body Initial_Po is
        protected body Initial_Po is
            entry Start_Here when True is
            entry Start_Here when True is
            begin
            begin
                Final_Po_Reached := False;
                Final_Po_Reached := False;
                requeue Final_Po.Requeue_Target with abort;
                requeue Final_Po.Requeue_Target with abort;
            end Start_Here;
            end Start_Here;
        end Initial_Po;
        end Initial_Po;
        protected body Final_Po is
        protected body Final_Po is
            entry Requeue_Target when Open is
            entry Requeue_Target when Open is
            begin
            begin
                Open := False;
                Open := False;
                Final_Po_Reached := True;
                Final_Po_Reached := True;
            end Requeue_Target;
            end Requeue_Target;
            procedure Ok_To_Take_Requeue is
            procedure Ok_To_Take_Requeue is
            begin
            begin
                Open := True;
                Open := True;
            end Ok_To_Take_Requeue;
            end Ok_To_Take_Requeue;
            procedure Close_Requeue is
            procedure Close_Requeue is
            begin
            begin
                Open := False;
                Open := False;
            end Close_Requeue;
            end Close_Requeue;
        end Final_Po;
        end Final_Po;
    begin   -- test encapsulation
    begin   -- test encapsulation
        -- unconditional entry call to check the simple case
        -- unconditional entry call to check the simple case
        Delayed_Opener.Start_Timer (0.0);
        Delayed_Opener.Start_Timer (0.0);
        Initial_Po.Start_Here;
        Initial_Po.Start_Here;
        if Final_Po_Reached then
        if Final_Po_Reached then
            if Verbose then
            if Verbose then
                Report.Comment ("simple case passed");
                Report.Comment ("simple case passed");
            end if;
            end if;
        else
        else
            Report.Failed ("simple case");
            Report.Failed ("simple case");
        end if;
        end if;
        Delayed_Opener.Cancel_Timer;
        Delayed_Opener.Cancel_Timer;
        -- timed but with plenty of time - delay relative
        -- timed but with plenty of time - delay relative
        Delayed_Opener.Start_Timer (Allowed_Time);
        Delayed_Opener.Start_Timer (Allowed_Time);
        select
        select
            Initial_Po.Start_Here;
            Initial_Po.Start_Here;
        or
        or
            delay Plenty_Of_Time;
            delay Plenty_Of_Time;
            Report.Failed ("plenty of time timed out (1)");
            Report.Failed ("plenty of time timed out (1)");
            if Final_Po_Reached then
            if Final_Po_Reached then
                Report.Failed (
                Report.Failed (
                   "plenty of time timed out after accept (1)");
                   "plenty of time timed out after accept (1)");
            end if;
            end if;
        end select;
        end select;
        if Final_Po_Reached then
        if Final_Po_Reached then
            if Verbose then
            if Verbose then
                Report.Comment ("plenty of time case passed (1)");
                Report.Comment ("plenty of time case passed (1)");
            end if;
            end if;
        else
        else
            Report.Failed ("plenty of time (1)");
            Report.Failed ("plenty of time (1)");
        end if;
        end if;
        Delayed_Opener.Cancel_Timer;
        Delayed_Opener.Cancel_Timer;
        -- timed but with plenty of time  -- delay until
        -- timed but with plenty of time  -- delay until
        Delayed_Opener.Start_Timer (Allowed_Time);
        Delayed_Opener.Start_Timer (Allowed_Time);
        select
        select
            Initial_Po.Start_Here;
            Initial_Po.Start_Here;
        or
        or
            delay until Calendar.Clock + Plenty_Of_Time;
            delay until Calendar.Clock + Plenty_Of_Time;
            Report.Failed ("plenty of time timed out (2)");
            Report.Failed ("plenty of time timed out (2)");
            if Final_Po_Reached then
            if Final_Po_Reached then
                Report.Failed (
                Report.Failed (
                  "plenty of time timed out after accept(2)");
                  "plenty of time timed out after accept(2)");
            end if;
            end if;
        end select;
        end select;
        if Final_Po_Reached then
        if Final_Po_Reached then
            if Verbose then
            if Verbose then
                Report.Comment ("plenty of time case passed (2)");
                Report.Comment ("plenty of time case passed (2)");
            end if;
            end if;
        else
        else
            Report.Failed ("plenty of time (2)");
            Report.Failed ("plenty of time (2)");
        end if;
        end if;
        Delayed_Opener.Cancel_Timer;
        Delayed_Opener.Cancel_Timer;
        -- timed without enough time - delay relative
        -- timed without enough time - delay relative
        Delayed_Opener.Start_Timer (Allowed_Time);
        Delayed_Opener.Start_Timer (Allowed_Time);
        select
        select
            Initial_Po.Start_Here;
            Initial_Po.Start_Here;
            Report.Failed ("not enough time completed accept (1)");
            Report.Failed ("not enough time completed accept (1)");
        or
        or
            delay Not_Enough_Time;
            delay Not_Enough_Time;
        end select;
        end select;
        if Final_Po_Reached then
        if Final_Po_Reached then
            Report.Failed ("not enough time (1)");
            Report.Failed ("not enough time (1)");
        else
        else
            if Verbose then
            if Verbose then
                Report.Comment ("not enough time case passed (1)");
                Report.Comment ("not enough time case passed (1)");
            end if;
            end if;
        end if;
        end if;
        Delayed_Opener.Cancel_Timer;
        Delayed_Opener.Cancel_Timer;
        -- timed without enough time - delay until
        -- timed without enough time - delay until
        Delayed_Opener.Start_Timer (Allowed_Time);
        Delayed_Opener.Start_Timer (Allowed_Time);
        select
        select
            Initial_Po.Start_Here;
            Initial_Po.Start_Here;
            Report.Failed ("not enough time completed accept (2)");
            Report.Failed ("not enough time completed accept (2)");
        or
        or
            delay until Calendar.Clock + Not_Enough_Time;
            delay until Calendar.Clock + Not_Enough_Time;
        end select;
        end select;
        if Final_Po_Reached then
        if Final_Po_Reached then
            Report.Failed ("not enough time (2)");
            Report.Failed ("not enough time (2)");
        else
        else
            if Verbose then
            if Verbose then
                Report.Comment ("not enough time case passed (2)");
                Report.Comment ("not enough time case passed (2)");
            end if;
            end if;
        end if;
        end if;
        Delayed_Opener.Cancel_Timer;
        Delayed_Opener.Cancel_Timer;
        -- conditional case
        -- conditional case
        Delayed_Opener.Start_Timer (Allowed_Time);
        Delayed_Opener.Start_Timer (Allowed_Time);
        select
        select
            Initial_Po.Start_Here;
            Initial_Po.Start_Here;
            Report.Failed ("no time completed accept");
            Report.Failed ("no time completed accept");
        else
        else
            if Verbose then
            if Verbose then
                Report.Comment ("conditional case - else taken");
                Report.Comment ("conditional case - else taken");
            end if;
            end if;
        end select;
        end select;
        if Final_Po_Reached then
        if Final_Po_Reached then
            Report.Failed ("no time");
            Report.Failed ("no time");
        else
        else
            if Verbose then
            if Verbose then
                Report.Comment ("no time case passed");
                Report.Comment ("no time case passed");
            end if;
            end if;
        end if;
        end if;
        Delayed_Opener.Cancel_Timer;
        Delayed_Opener.Cancel_Timer;
        -- kill off the Delayed_Opener task
        -- kill off the Delayed_Opener task
        Delayed_Opener.Start_Timer (-10.0);
        Delayed_Opener.Start_Timer (-10.0);
    exception
    exception
        when others =>
        when others =>
            Report.Failed ("exception in main");
            Report.Failed ("exception in main");
    end;
    end;
    Report.Result;
    Report.Result;
end C954026;
end C954026;
 
 

powered by: WebSVN 2.1.0

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