Additional tests
This commit is contained in:
parent
6ec68a766f
commit
438c3b3467
68
tests/HTTPFileServer.nct
Normal file
68
tests/HTTPFileServer.nct
Normal 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:;
|
14
tests/IrregularAllocation.nct
Normal file
14
tests/IrregularAllocation.nct
Normal 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
43
tests/ListDLC.nct
Normal 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
27
tests/ListS.nct
Normal 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
19
tests/UserListDLC.nct
Normal 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:;
|
Loading…
Reference in New Issue
Block a user