Build original Ada port core, V client, and x86-64 boot milestone
This commit is contained in:
1 parent
9af96aa1e1
commit
fc2bee6f32
28 files changed
+865
-7
No files matched your search
@@ -0,0 +1,13 @@
|
||||
#include "agila_ports.h"
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
int main(void) {
|
||||
uint32_t h=agila_port_create(1), value=123;
|
||||
assert(h!=0);
|
||||
assert(agila_port_receive(h,1,NULL)==AGILA_INVALID_ARGUMENT);
|
||||
assert(agila_port_send(h,1,0xffffffffu)==AGILA_OK);
|
||||
assert(agila_port_receive(h,1,&value)==AGILA_OK && value==0xffffffffu);
|
||||
assert(agila_port_receive(h,1,&value)==AGILA_EMPTY && value==0);
|
||||
assert(agila_port_close(h,1)==AGILA_OK);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
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;
|
||||
Reference in new issue
Block a user