Build original Ada port core, V client, and x86-64 boot milestone

This commit is contained in:
Admin committed 2026-11-01 16:07:00 +08:00
1 parent 9af96aa1e1
commit fc2bee6f32
28 files changed
+865 -7

No files matched your search

+13
View File
@@ -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;
}
+61
View File
@@ -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;