Additional tests

This commit is contained in:
Mid 2025-06-10 22:07:38 +03:00
parent 6ec68a766f
commit 438c3b3467
5 changed files with 171 additions and 0 deletions

68
tests/HTTPFileServer.nct Normal file
View File

@ -0,0 +1,68 @@
record LibCSockAddrInet6 {
u16 family;
u16 port;
u32 flowinfo;
u8[16] address;
}
@section(".text");
extern u32(u32 domain, u32 type, u32 protocol) socket;
extern u32(u32 sockfd, u8* addr, u32 socklen) bind;
extern u32(u32 sockfd, u32 backlog) listen;
extern u32(u32 sockfd, u8* addr, u32* socklen) accept;
extern u32(u32 sockfd, u8* data, u32 length) write;
extern u32(u32 sockfd, u8* data, u32 length) read;
extern u32(u32 fd) close;
main: u0() -> {
SERV_SOCKET = socket(10, 1, 0);
LibCSockAddrInet6 addr;
addr.family = 10; /* AF_INET6 */
addr.port = 43105; /* 25000 in reversed endian */
addr.flowinfo = 0;
addr.address[0] = 0;
addr.address[1] = 0;
addr.address[2] = 0;
addr.address[3] = 0;
addr.address[4] = 0;
addr.address[5] = 0;
addr.address[6] = 0;
addr.address[7] = 0;
addr.address[8] = 0;
addr.address[9] = 0;
addr.address[10] = 0;
addr.address[11] = 0;
addr.address[12] = 0;
addr.address[13] = 0;
addr.address[14] = 0;
addr.address[15] = 0;
bind(SERV_SOCKET, &addr, @sizeof(addr));
listen(SERV_SOCKET, 16);
loop {
u32 fd = accept(SERV_SOCKET, &addr, &SOCK_LEN);
if(fd == -1) {
continue;
}
read(fd, &BUFFER, @sizeof(BUFFER));
write(fd, &RESPONSE, @sizeof(RESPONSE));
close(fd);
}
return;
};
@section(".data");
u32 SOCK_LEN:;
u32 SERV_SOCKET:;
u8[?] RESPONSE: "HTTP/1.0 200 OK\r\nServer: NectarTestHTTPFileServer\r\nContent-Type: text/plain\r\n\r\nYo.";
u8[1024] BUFFER:;

View File

@ -0,0 +1,14 @@
u8 a = 12;
u8 b = 19;
u8 c = a + b;
u32 d = 1;
u8 e = d + 1;
u32 f = 10;
u32 g = 55;
a;
b;
c;
d;
e;
f;
g;

43
tests/ListDLC.nct Normal file
View File

@ -0,0 +1,43 @@
/*
* ListDLC: Dynamic, Linear growth, C-managed
*/
extern u8*(u8*, u32) realloc;
record ListDLC[T, S; growth] {
S capacity;
S size;
T[?]* data;
}
ListDLC_remove: [T, S; growth]u0(ListDLC[T, S; growth]* this, S index) -> {
T* data0 = &((*((*this).data))[index]);
T* data1 = data0 + @sizeof T;
S sz = (*this).size;
(*this).size = (*this).size - 1;
loop {
if(index == sz) {
break;
}
*data0 = *data1;
data0 = data0 + @sizeof T;
data1 = data1 + @sizeof T;
index = index + 1;
}
return;
};
ListDLC_add: [T, S; growth]u0(ListDLC[T, S; growth]* this, T value) -> {
if((*this).size == (*this).capacity) {
u32 newcap = (*this).capacity + growth;
(*this).capacity = newcap;
(*this).data = realloc((*this).data, newcap * @sizeof T);
}
(*((*this).data))[(*this).size] = value;
(*this).size = (*this).size + 1;
return;
};

27
tests/ListS.nct Normal file
View File

@ -0,0 +1,27 @@
record ListS[T, S; capacity] {
S size;
T[capacity] data;
}
ListS_remove: [T, S; capacity]u0(ListS[T, S; capacity]* this, S index) -> {
T* data = &((*this).data[index]);
(*this).size = (*this).size - 1;
S sz = (*this).size;
loop {
if(index == sz) {
break;
}
*data = *(data + 1);
data = data + 1;
index = index + 1;
}
return;
};
ListS_add: [T, S; capacity]u0(ListS[T, S; capacity]* this, T value) -> {
(*this).data[(*this).size] = value;
(*this).size = (*this).size + 1;
return;
};

19
tests/UserListDLC.nct Normal file
View File

@ -0,0 +1,19 @@
use ListDLC;
@section(".text");
@instantiate ListDLC_remove[u32, u32; 9];
@instantiate ListDLC_add[u32, u32; 9];
main: u0() -> {
ListDLC_add[u32, u32; 9](&list, 1234);
ListDLC_add[u32, u32; 9](&list, 4321);
ListDLC_add[u32, u32; 9](&list, 7777);
ListDLC_add[u32, u32; 9](&list, 6969);
ListDLC_remove[u32, u32; 9](&list, 1);
return;
};
@section(".bss");
ListDLC[u32, u32; 9] list:;