main
1#define NOTLIBC_NOMAIN
2#include "notlibc.c"
3
4u8 validate_array( u8* arr, usize len ) {
5 for( usize i = 0; i < len; ++i ) {
6 if( arr[i] != i ) {
7 return 0;
8 }
9 }
10 return 1;
11}
12
13void PRESERVE_WITH_LTO entry(void) {
14 u8 arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
15
16 u8 buf[sizeof(arr)];
17
18 /* Copy should actually copy */
19 mem_copy( &arr[0], &buf[0], sizeof(arr) );
20 assert( validate_array( arr, arr[0] ) );
21
22 mem_set( buf, sizeof(arr), 0 );
23 for( usize i = 0; i < sizeof(arr); i++ ) {
24 assert( buf[i] == 0 );
25 }
26
27 /* Move should also move */
28 mem_move( &arr[0], &buf[0], sizeof(arr) );
29 assert( validate_array( arr, arr[0] ) );
30
31 /* Overlapping move tests */
32 mem_move( &buf[0], &buf[1], sizeof(buf) - 1 );
33
34 assert( buf[0] == 0 );
35 for( usize i = 0; i < sizeof(buf)-1; ++i ) {
36 assert( buf[i+1] == i );
37 }
38
39 mem_copy( &arr[0], &buf[0], sizeof(arr) );
40
41 mem_move( &buf[1], &buf[0], sizeof(buf) - 1 );
42
43 assert( buf[sizeof(buf) - 1] == sizeof(buf) - 1 );
44 for( usize i = 0; i < sizeof(buf)-1; ++i ) {
45 assert( buf[i] == i + 1 );
46 }
47
48 terminate(0);
49}