main
 1#define NOTLIBC_NOMAIN
 2#include "notlibc.c"
 3
 4void PRESERVE_WITH_LTO entry(void) {
 5	Status s = S_SUCCESS;
 6
 7	Heap h = Heap_create( &s, KiB(8) );
 8	assert(S_OK( s ));
 9
10	usizes *a = usizes_create( &s, &h, 16 );
11	assert(S_OK( s ));
12
13	for( usize i = 0; i < 8; ++i ) {
14		a = usizes_push( &s, a, &i, &h );
15		assert(S_OK( s ));
16	}
17
18	/* Resize allocation to minimum needed size aka 16 elements + metadata */
19	a = usizes_deflate( &s, a, &h );
20	assert(S_OK( s ));
21
22	assert( a->len == 8 );
23
24	/* Truncate by cutting 8 elements off the end - this preserves allocation size, only changes logical length */
25	usizes_truncate( &s, a, 8 );
26	assert(S_OK( s ));
27	assert( a->len == 0 );
28
29
30	for( usize i = 0; i < 24; ++i ) {
31		a = usizes_push( &s, a, &i, &h );
32		assert(S_OK( s ));
33		a->data[i] = i;
34	}
35
36	for( usize i = 0; i < a->len; ++i ) {
37		assert( a->data[i] == i );
38	}
39
40	usize el = 12;
41	usizes_push( &s, a, &el, &h );
42	assert(S_OK( s ));
43
44	assert( a->len == 25 );
45
46	el = 0;
47	usizes_pop( &s, a, &el );
48	assert(S_OK( s ));
49	assert( el == 12 );
50
51	usizes_destroy( &s, &a, &h );
52	assert(S_OK( s ));
53
54	Heap_destroy( &s, &h );
55	assert(S_OK( s ));
56
57	terminate(0);
58}