62 lines
3.0 KiB
Ada
62 lines
3.0 KiB
Ada
with Ada.Text_IO;
|
|
with Agila_Ports; use Agila_Ports;
|
|
procedure Ports_Test is
|
|
use type Word;
|
|
S : Manager;
|
|
H, New_H : Word;
|
|
R : Status;
|
|
M : Message;
|
|
Handles : array (1 .. Max_Ports) of Word;
|
|
begin
|
|
Create (S, 0, H, R); pragma Assert (R = Invalid_Argument and H = 0);
|
|
Create (S, 10, H, R); pragma Assert (R = Ok and H /= 0);
|
|
Receive (S, H, 10, M, R); pragma Assert (R = Empty and M = (0, 0));
|
|
Send (S, 0, 10, 1, R); pragma Assert (R = Invalid_Handle);
|
|
Send (S, Word'Last, 10, 1, R); pragma Assert (R = Invalid_Handle);
|
|
Send (S, H, 0, 1, R); pragma Assert (R = Permission_Denied);
|
|
Send (S, H, 20, 1, R); pragma Assert (R = Permission_Denied);
|
|
Allow_Sender (S, H, 99, 20, R); pragma Assert (R = Permission_Denied);
|
|
Allow_Sender (S, H, 10, 0, R); pragma Assert (R = Invalid_Argument);
|
|
Allow_Sender (S, H, 10, 20, R); pragma Assert (R = Ok);
|
|
for I in 1 .. Queue_Capacity loop
|
|
Send (S, H, 20, Word (I), R); pragma Assert (R = Ok);
|
|
end loop;
|
|
Send (S, H, 20, 99, R); pragma Assert (R = Full);
|
|
Receive (S, H, 20, M, R); pragma Assert (R = Permission_Denied and M = (0, 0));
|
|
for I in 1 .. Queue_Capacity loop
|
|
Receive (S, H, 10, M, R); pragma Assert (R = Ok and M = (20, Word (I)));
|
|
end loop;
|
|
Receive (S, H, 10, M, R); pragma Assert (R = Empty);
|
|
-- Exercise wrap-around without emptying the queue between every operation.
|
|
for Cycle in 1 .. 100 loop
|
|
Send (S, H, 20, Word (Cycle), R); pragma Assert (R = Ok);
|
|
Send (S, H, 10, Word (Cycle + 100), R); pragma Assert (R = Ok);
|
|
Receive (S, H, 10, M, R); pragma Assert (R = Ok and M.Value = Word (Cycle));
|
|
Receive (S, H, 10, M, R); pragma Assert (R = Ok and M.Value = Word (Cycle + 100));
|
|
end loop;
|
|
Revoke_Sender (S, H, 99, 20, R); pragma Assert (R = Permission_Denied);
|
|
Revoke_Sender (S, H, 10, 20, R); pragma Assert (R = Ok);
|
|
Send (S, H, 20, 8, R); pragma Assert (R = Permission_Denied);
|
|
Close (S, H, 20, R); pragma Assert (R = Permission_Denied);
|
|
Send (S, H, 10, 123, R); pragma Assert (R = Ok);
|
|
Close (S, H, 10, R); pragma Assert (R = Ok);
|
|
Create (S, 30, New_H, R); pragma Assert (R = Ok and New_H /= H);
|
|
Send (S, H, 10, 5, R); pragma Assert (R = Invalid_Handle);
|
|
Allow_Sender (S, H, 10, 20, R); pragma Assert (R = Invalid_Handle);
|
|
Receive (S, New_H, 30, M, R); pragma Assert (R = Empty);
|
|
Close (S, New_H, 30, R); pragma Assert (R = Ok);
|
|
for I in Handles'Range loop
|
|
Create (S, Word (I), Handles (I), R); pragma Assert (R = Ok);
|
|
end loop;
|
|
Create (S, 50, H, R); pragma Assert (R = Exhausted and H = 0);
|
|
for I in Handles'Range loop
|
|
Send (S, Handles (I), Word (I), Word (I * 10), R); pragma Assert (R = Ok);
|
|
end loop;
|
|
for I in Handles'Range loop
|
|
Receive (S, Handles (I), Word (I), M, R);
|
|
pragma Assert (R = Ok and M.Value = Word (I * 10));
|
|
Close (S, Handles (I), Word (I), R); pragma Assert (R = Ok);
|
|
end loop;
|
|
Ada.Text_IO.Put_Line ("ADA_PORTS_OK: FIFO, wrap, full/empty, grants, revocation, stale handles, exhaustion, port separation");
|
|
end Ports_Test;
|