aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c9/c940a03.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c9/c940a03.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c9/c940a03.a350
1 files changed, 0 insertions, 350 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c9/c940a03.a b/gcc/testsuite/ada/acats/tests/c9/c940a03.a
deleted file mode 100644
index 22876d26b18..00000000000
--- a/gcc/testsuite/ada/acats/tests/c9/c940a03.a
+++ /dev/null
@@ -1,350 +0,0 @@
--- C940A03.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
--- controlling access to shared data through procedure parameters to
--- allow a specific maximum number of tasks to run and exclude all
--- others.
---
--- TEST DESCRIPTION:
--- Declare a resource descriptor tagged type. Extend the type and
--- use the extended type in a protected data structure.
--- Implement a counting semaphore type that can be initialized to a
--- specific number of available resources. Declare an entry for
--- requesting a specific resource and an procedure for releasing the
--- same resource it. Declare an object of this (protected) 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.
---
--- This test models a multi-user operating system that allows a limited
--- number of logins. Users requesting login are modeled by tasks.
---
---
--- TEST FILES:
--- This test depends on the following foundation code:
---
--- F940A00
---
---
--- CHANGE HISTORY:
--- 06 Dec 94 SAIC ACVC 2.0
--- 13 Nov 95 SAIC Fixed bugs for ACVC 2.0.1
---
---!
-
-package C940A03_0 is
- --Resource_Pkg
-
- -- General type declarations that will be extended to model available
- -- logins
-
- type Resource_ID_Type is range 0..10;
- type Resource_Type is tagged record
- Id : Resource_ID_Type := 0;
- end record;
-
-end C940A03_0;
- --Resource_Pkg
-
---======================================--
--- no body for C940A3_0
---======================================--
-
-with F940A00; -- Interlock_Foundation
-with C940A03_0; -- Resource_Pkg;
-
-package C940A03_1 is
- -- Semaphores
-
- -- Models a counting semaphore that will allow up to a specific
- -- number of logins
- -- Users (tasks) request a login slot by calling the Request_Login
- -- entry and logout by calling the Release_Login procedure
-
- Max_Logins : constant Integer := 2;
-
-
- type Key_Type is range 0..100;
- -- When a user requests a login, an
- -- identifying key will be returned
- Init_Key : constant Key_Type := 0;
-
- type Login_Record_Type is new C940A03_0.Resource_Type with record
- Key : Key_Type := Init_Key;
- end record;
-
-
- protected type Login_Semaphore_Type (Resources_Available : Integer :=1) is
-
- entry Request_Login (Resource_Key : in out Login_Record_Type);
- procedure Release_Login;
- function Available return Integer; -- how many logins are available?
- private
- Logins_Avail : Integer := Resources_Available;
- Next_Key : Key_Type := Init_Key;
-
- end Login_Semaphore_Type;
-
- Login_Semaphore : Login_Semaphore_Type (Max_Logins);
-
- --====== machinery for the test, not the model =====--
- TC_Control_Message : F940A00.Interlock_Type;
- function TC_Key_Val (Login_Rec : Login_Record_Type) return Integer;
-
-
-end C940A03_1;
- -- Semaphores;
-
---=========================================================--
-
-package body C940A03_1 is
- -- Semaphores is
-
- protected body Login_Semaphore_Type is
-
- entry Request_Login (Resource_Key : in out Login_Record_Type)
- when Logins_Avail > 0 is
- begin
- Next_Key := Next_Key + 1; -- login process returns a key
- Resource_Key.Key := Next_Key; -- to the requesting user
- Logins_Avail := Logins_Avail - 1;
- end Request_Login;
-
- procedure Release_Login is
- begin
- Logins_Avail := Logins_Avail + 1;
- end Release_Login;
-
- function Available return Integer is
- begin
- return Logins_Avail;
- end Available;
-
- end Login_Semaphore_Type;
-
- function TC_Key_Val (Login_Rec : Login_Record_Type) return Integer is
- begin
- return Integer (Login_Rec.Key);
- end TC_Key_Val;
-
-end C940A03_1;
- -- Semaphores;
-
---=========================================================--
-
-with C940A03_0; -- Resource_Pkg,
-with C940A03_1; -- Semaphores;
-
-package C940A03_2 is
- -- Task_Pkg
-
- package Semaphores renames C940A03_1;
-
- task type User_Task_Type is
-
- entry Login (user_id : C940A03_0.Resource_Id_Type);
- -- instructs the task to ask for a login
- entry Logout; -- instructs the task to release the login
- --=======================--
- -- this entry is used to get information to verify test operation
- entry Get_Status (User_Record : out Semaphores.Login_Record_Type);
-
- end User_Task_Type;
-
-end C940A03_2;
- -- Task_Pkg
-
---=========================================================--
-
-with Report;
-with C940A03_0; -- Resource_Pkg,
-with C940A03_1; -- Semaphores,
-with F940A00; -- Interlock_Foundation;
-
-package body C940A03_2 is
- -- Task_Pkg
-
- -- This task models a user requesting a login from the system
- -- For control of this test, we can ask the task to login, logout, or
- -- give us the current user record (containing login information)
-
- task body User_Task_Type is
- Rec : Semaphores.Login_Record_Type;
- begin
- loop
- select
- accept Login (user_id : C940A03_0.Resource_Id_Type) do
- Rec.Id := user_id;
- end Login;
-
- Semaphores.Login_Semaphore.Request_Login (Rec);
- -- request a resource; if resource is not available,
- -- task will be queued to wait
-
- --== following is test control machinery ==--
- F940A00.Counter.Increment;
- Semaphores.TC_Control_Message.Post;
- -- after resource is obtained, post message
-
- or
- accept Logout do
- Semaphores.Login_Semaphore.Release_Login;
- -- release the resource
- --== test control machinery ==--
- F940A00.Counter.Decrement;
- end Logout;
- exit;
-
- or
- accept Get_Status (User_Record : out Semaphores.Login_Record_Type) do
- User_Record := Rec;
- end Get_Status;
-
- end select;
- end loop;
-
- exception
- when others => Report.Failed ("Exception raised in model user task");
- end User_Task_Type;
-
-end C940A03_2;
- -- Task_Pkg
-
---=========================================================--
-
-with Report;
-with ImpDef;
-with C940A03_1; -- Semaphores,
-with C940A03_2; -- Task_Pkg,
-with F940A00; -- Interlock_Foundation;
-
-procedure C940A03 is
-
- package Semaphores renames C940A03_1;
- package Users renames C940A03_2;
-
- Task1, Task2, Task3 : Users.User_Task_Type;
- User_Rec : Semaphores.Login_Record_Type;
-
-begin -- Tasks start here
-
- Report.Test ("C940A03", "Check that a protected object can coordinate " &
- "shared data access using procedure parameters");
-
- if F940A00.Counter.Number /=0 then
- Report.Failed ("Wrong initial conditions");
- end if;
-
- Task1.Login (1); -- request resource; request should be granted
- Semaphores.TC_Control_Message.Consume;
- -- ensure that task obtains resource by
- -- waiting for task to post message
-
- -- Task 1 waiting for call to Logout
- -- Others still available
- Task1.Get_Status (User_Rec);
- if (F940A00.Counter.Number /= 1)
- or (Semaphores.Login_Semaphore.Available /=1)
- or (Semaphores.TC_Key_Val (User_Rec) /= 1) then
- Report.Failed ("Resource not assigned to task 1");
- end if;
-
- Task2.Login (2); -- Request for resource should be granted
- Semaphores.TC_Control_Message.Consume;
- -- ensure that task obtains resource by
- -- waiting for task to post message
-
- Task2.Get_Status (User_Rec);
- if (F940A00.Counter.Number /= 2)
- or (Semaphores.Login_Semaphore.Available /=0)
- or (Semaphores.TC_Key_Val (User_Rec) /= 2) then
- Report.Failed ("Resource not assigned to task 2");
- end if;
-
-
- Task3.Login (3); -- request for resource should be denied
- -- and task queued
-
-
- -- Tasks 1 and 2 holds resources
- -- and are waiting for a call to Logout
- -- Task 3 is queued
-
- if (F940A00.Counter.Number /= 2)
- or (Semaphores.Login_Semaphore.Available /=0) then
- Report.Failed ("Resource incorrectly assigned to task 3");
- end if;
-
- Task1.Logout; -- released resource should be given to
- -- queued task
- Semaphores.TC_Control_Message.Consume;
- -- wait for confirming message from task
-
- -- Task 1 holds no resources
- -- and is terminated (or will soon)
- -- Tasks 2 and 3 hold resources
- -- and are waiting for a call to Logout
-
- Task3.Get_Status (User_Rec);
- if (F940A00.Counter.Number /= 2)
- or (Semaphores.Login_Semaphore.Available /=0)
- or (Semaphores.TC_Key_Val (User_Rec) /= 3) then
- Report.Failed ("Resource not properly released/assigned to task 3");
- end if;
-
- Task2.Logout; -- no outstanding request for released
- -- resource
- -- Tasks 1 and 2 hold no resources
- -- Task 3 holds a resource
- -- and is waiting for a call to Logout
-
- if (F940A00.Counter.Number /= 1)
- or (Semaphores.Login_Semaphore.Available /=1) then
- Report.Failed ("Resource not properly released from task 2");
- end if;
-
- Task3.Logout;
-
- -- all resources have been returned
- -- all tasks have terminated or will soon
-
- if (F940A00.Counter.Number /=0)
- or (Semaphores.Login_Semaphore.Available /=2) then
- Report.Failed ("Resource not properly released from task 3");
- end if;
-
- -- Ensure all tasks have terminated before calling Result
- while not (Task1'terminated and
- Task2'terminated and
- Task3'terminated) loop
- delay ImpDef.Minimum_Task_Switch;
- end loop;
-
- Report.Result;
-
-end C940A03;