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}