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}