main
  1#define NOTLIBC_NOMAIN
  2#include "notlibc.c"
  3
  4void PRESERVE_WITH_LTO entry(void) {
  5	STRING( hackunana, "hackunana" );
  6	STRING( hack, "hack" );
  7	STRING( hack2, "hack" );
  8	STRING( una, "una" );
  9
 10	Status s = S_SUCCESS;
 11
 12	Arena a = Arena_create( &s, KiB(4) );
 13	assert(S_OK( s ));
 14
 15	Heap h = Heap_create( &s, KiB(4) );
 16	assert(S_OK( s ));
 17
 18	StrSlc hack_slc = StrSlc_from_Str( &s, (const Str*)&hack, 0, hack.len );
 19	assert(S_OK( s ));
 20
 21	assert( StrSlc_equals( hack_slc, hack_slc ) == 1 );
 22	assert( StrSlc_equals_by_ref( &hack_slc, &hack_slc ) == 1 );
 23
 24	StrSlc_equals_Str( hack_slc, (const Str*)&hack );
 25	assert(S_OK( s ));
 26
 27	StrSlc_equals_Str_by_ref( &hack_slc, (const Str*)&hack );
 28	assert(S_OK( s ));
 29
 30	StrSlc hack2_slc = StrSlc_from_Str( &s, (const Str*)&hack2, 0, hack.len );
 31	assert(S_OK( s ));
 32
 33	assert( StrSlc_equals( hack_slc, hack2_slc ) == 1);
 34	assert( StrSlc_equals_by_ref( &hack_slc, &hack2_slc ) == 1);
 35
 36	StrSlc na_slc = StrSlc_from_Str( &s, (const Str*)&una, 1, una.len - 1 );
 37	assert(S_OK( s ));
 38
 39	StrAsm sa = StrAsm_create( &s, KiB(4) );
 40	assert(S_OK( s ));
 41
 42	StrAsm_cat_Str( &s, &sa, (const Str*)&hack );
 43	assert(S_OK( s ));
 44	StrAsm_cat_char( &s, &sa, 'u' );
 45	assert(S_OK( s ));
 46	StrAsm_cat_StrSlc( &s, &sa, na_slc );
 47	assert(S_OK( s ));
 48	StrAsm_cat_StrSlc_by_ref( &s, &sa, &na_slc );
 49	assert(S_OK( s ));
 50
 51	Str *s_a = 0;
 52	Str *s_h = 0;
 53
 54	StrAsm_store_into_arena( &s, &sa, &a, &s_a );
 55	assert(S_OK( s ));
 56	StrAsm_store_onto_heap( &s, &sa, &h, &s_h );
 57	assert(S_OK( s ));
 58
 59	assert( Str_equals( s_a, s_h ) == 1 );
 60	assert( Str_equals( s_a, (const Str*)&hackunana ) == 1);
 61	assert( Str_equals( s_h, (const Str*)&hackunana ) == 1);
 62
 63	Heap_free( &s, &h, s_h );
 64
 65	StrAsm_reset( &s, &sa );
 66	assert(S_OK( s ));
 67
 68	StrSlc slc = {0};
 69
 70	STRING( numbers_hex, "0xfe" "0xffff" "0xffffffff" "0xffffffffffffffff" );
 71	StrAsm_fmtx_u8( &s, &sa, 0xfe );
 72	assert(S_OK( s ));
 73	StrAsm_fmtx_u16( &s, &sa, 0xffff );
 74	assert(S_OK( s ));
 75	StrAsm_fmtx_u32( &s, &sa, 0xffffffff);
 76	assert(S_OK( s ));
 77	StrAsm_fmtx_u64( &s, &sa, 0xffffffffffffffff );
 78	assert(S_OK( s ));
 79
 80	slc = StrAsm_as_StrSlc( &sa );
 81	assert( StrSlc_equals_Str( slc, (const Str*)&numbers_hex ) == 1 );
 82
 83	StrAsm_reset( &s, &sa );
 84	assert(S_OK( s ));
 85
 86	STRING( numbers_dec, "255" "65535" "4294967295" "18446744073709551615" );
 87	StrAsm_fmtd_u8( &s, &sa, 255 );
 88	assert(S_OK( s ));
 89	StrAsm_fmtd_u16( &s, &sa, 65535 );
 90	assert(S_OK( s ));
 91	StrAsm_fmtd_u32( &s, &sa, 4294967295);
 92	assert(S_OK( s ));
 93	StrAsm_fmtd_u64( &s, &sa, 18446744073709551615u );
 94	assert(S_OK( s ));
 95
 96	slc = StrAsm_as_StrSlc( &sa );
 97	assert( StrSlc_equals_Str( slc, (const Str*)&numbers_dec ) == 1 );
 98
 99	StrAsm_reset( &s, &sa );
100	assert(S_OK( s ));
101
102	STRING( numbers_dec_s, "-128" "-32768" "-2147483648" "-9223372036854775808" );
103	StrAsm_fmtd_s8( &s, &sa, -128 );
104	assert(S_OK( s ));
105	StrAsm_fmtd_s16( &s, &sa, -32768 );
106	assert(S_OK( s ));
107	StrAsm_fmtd_s32( &s, &sa, -2147483648 );
108	assert(S_OK( s ));
109	StrAsm_fmtd_s64( &s, &sa, -9223372036854775807LL - 1 );
110	assert(S_OK( s ));
111
112	slc = StrAsm_as_StrSlc( &sa );
113	assert( StrSlc_equals_Str( slc, (const Str*)&numbers_dec_s ) == 1 );
114
115	StrAsm_destroy( &s, &sa );
116	assert(S_OK( s ));
117	Arena_destroy( &s, &a );
118	assert(S_OK( s ));
119	Heap_destroy( &s, &h );
120	assert(S_OK( s ));
121
122	terminate(0);
123}