Files

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;