diff options
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c9/c940002.a')
-rw-r--r-- | gcc/testsuite/ada/acats/tests/c9/c940002.a | 309 |
1 files changed, 0 insertions, 309 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c9/c940002.a b/gcc/testsuite/ada/acats/tests/c9/c940002.a deleted file mode 100644 index 420f54440ed..00000000000 --- a/gcc/testsuite/ada/acats/tests/c9/c940002.a +++ /dev/null @@ -1,309 +0,0 @@ --- C940002.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 a protected object provides coordinated access to shared --- data. Check that it can implement a semaphore-like construct using a --- parameterless procedure which allows a specific maximum number of tasks --- to run and excludes all others --- --- TEST DESCRIPTION: --- Implement a counting semaphore type that can be initialized to a --- specific number of available resources. Declare an entry for --- requesting a resource and a procedure for releasing it. Declare an --- object of this type, initialized to two resources. Declare and start --- three tasks each of which asks for a resource. Verify that only two --- resources are granted and that the last task in is queued. --- --- --- CHANGE HISTORY: --- 06 Dec 94 SAIC ACVC 2.0 --- ---! - - -package C940002_0 is - -- Semaphores - - protected type Semaphore_Type (Resources_Available : Integer :=1) is - entry Request; - procedure Release; - function Available return Integer; - private - Currently_Available : Integer := Resources_Available; - end Semaphore_Type; - - Max_Resources : constant Integer := 2; - Resource : Semaphore_Type (Max_Resources); - -end C940002_0; - -- Semaphores; - - - --========================================================-- - - -package body C940002_0 is - -- Semaphores - - protected body Semaphore_Type is - - entry Request when Currently_Available >0 is -- when granted, secures - begin -- a resource - Currently_Available := Currently_Available - 1; - end Request; - - procedure Release is -- when called, releases - begin -- a resource - Currently_Available := Currently_Available + 1; - end Release; - - function Available return Integer is -- returns number of - begin -- available resources - return Currently_Available; - end Available; - - end Semaphore_Type; - -end C940002_0; - -- Semaphores; - - - --========================================================-- - - -package C940002_1 is - -- Task_Pkg - - task type Requesting_Task is - entry Done; -- call on Done instructs the task - end Requesting_Task; -- to release resource - - type Task_Ptr is access Requesting_Task; - - protected Counter is - procedure Increment; - procedure Decrement; - function Number return integer; - private - Count : Integer := 0; - end Counter; - - protected Hold_Lock is - procedure Lock; - procedure Unlock; - function Locked return Boolean; - private - Lock_State : Boolean := true; -- starts out locked - end Hold_Lock; - - -end C940002_1; - -- Task_Pkg - - - --========================================================-- - - -with Report; -with C940002_0; - -- Semaphores; - -package body C940002_1 is - -- Task_Pkg is - - protected body Counter is - - procedure Increment is - begin - Count := Count + 1; - end Increment; - - procedure Decrement is - begin - Count := Count - 1; - end Decrement; - - function Number return Integer is - begin - return Count; - end Number; - - end Counter; - - - protected body Hold_Lock is - - procedure Lock is - begin - Lock_State := true; - end Lock; - - procedure Unlock is - begin - Lock_State := false; - end Unlock; - - function Locked return Boolean is - begin - return Lock_State; - end Locked; - - end Hold_Lock; - - - task body Requesting_Task is - begin - C940002_0.Resource.Request; -- request a resource - -- if resource is not available, - -- task will be queued to wait - Counter.Increment; -- add to count of resources obtained - Hold_Lock.Unlock; -- and unlock Lock - system is stable; - -- status may now be queried - - accept Done do -- hold resource until Done is called - C940002_0.Resource.Release; -- release the resource and - Counter.Decrement; -- note release - end Done; - - exception - when others => Report.Failed ("Unexpected Exception in Requesting_Task"); - end Requesting_Task; - -end C940002_1; - -- Task_Pkg; - - - --========================================================-- - - -with Report; -with ImpDef; -with C940002_0, - -- Semaphores, - C940002_1; - -- Task_Pkg; - -procedure C940002 is - - package Semaphores renames C940002_0; - package Task_Pkg renames C940002_1; - - Ptr1, - Ptr2, - Ptr3 : Task_Pkg.Task_Ptr; - Num : Integer; - - procedure Spinlock is - begin - -- loop until unlocked - while Task_Pkg.Hold_Lock.Locked loop - delay ImpDef.Minimum_Task_Switch; - end loop; - Task_Pkg.Hold_Lock.Lock; - end Spinlock; - -begin - - Report.Test ("C940002", "Check that a protected record can be used to " & - "control access to resources"); - - if (Task_Pkg.Counter.Number /=0) - or (Semaphores.Resource.Available /= 2) then - Report.Failed ("Wrong initial conditions"); - end if; - - Ptr1 := new Task_Pkg.Requesting_Task; -- newly allocated task requests - -- resource; request for resource should - -- be granted - Spinlock; -- ensure that task obtains resource - - -- Task 1 waiting for call to Done - -- One resource assigned to task 1 - -- One resource still available - if (Task_Pkg.Counter.Number /= 1) - or (Semaphores.Resource.Available /= 1) then - Report.Failed ("Resource not assigned to task 1"); - end if; - - Ptr2 := new Task_Pkg.Requesting_Task; -- newly allocated task requests - -- resource; request for resource should - -- be granted - Spinlock; -- ensure that task obtains resource - - -- Task 1 waiting for call to Done - -- Task 2 waiting for call to Done - -- Resources held by tasks 1 and 2 - -- No resources available - if (Task_Pkg.Counter.Number /= 2) - or (Semaphores.Resource.Available /= 0) then - Report.Failed ("Resource not assigned to task 2"); - end if; - - Ptr3 := new Task_Pkg.Requesting_Task; -- newly allocated task requests - -- resource; request for resource should - -- be denied and task queued to wait for - -- next available resource - - - Ptr1.all.Done; -- Task 1 releases resource and lock - -- Resource should be given to queued task - Spinlock; -- ensure that resource is released - - - -- Task 1 holds no resource - -- One resource still assigned to task 2 - -- One resource assigned to task 3 - -- No resources available - if (Task_Pkg.Counter.Number /= 2) - or (Semaphores.Resource.Available /= 0) then - Report.Failed ("Resource not properly released/assigned to task 3"); - end if; - - Ptr2.all.Done; -- Task 2 releases resource and lock - -- No outstanding request for resource - - -- Tasks 1 and 2 hold no resources - -- One resource assigned to task 3 - -- One resource available - if (Task_Pkg.Counter.Number /= 1) - or (Semaphores.Resource.Available /= 1) then - Report.Failed ("Resource not properly released from task 2"); - end if; - - Ptr3.all.Done; -- Task 3 releases resource and lock - - -- All resources released - -- All tasks terminated (or close) - -- Two resources available - if (Task_Pkg.Counter.Number /=0) - or (Semaphores.Resource.Available /= 2) then - Report.Failed ("Resource not properly released from task 3"); - end if; - - Report.Result; - -end C940002; |