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