MCPcopy Create free account
hub / github.com/ashvardanian/StringZilla / test_arithmetical_utilities

Function test_arithmetical_utilities

scripts/test_stringzilla.cpp:110–168  ·  view source on GitHub ↗

* @brief Several string processing operations rely on computing integer logarithms. * Failures in such operations will result in wrong `resize` outcomes and heap corruption. */

Source from the content-addressed store, hash-verified

108 * Failures in such operations will result in wrong `resize` outcomes and heap corruption.
109 */
110void test_arithmetical_utilities() {
111
112 assert(sz_u64_clz(0x0000000000000001ull) == 63);
113 assert(sz_u64_clz(0x0000000000000002ull) == 62);
114 assert(sz_u64_clz(0x0000000000000003ull) == 62);
115 assert(sz_u64_clz(0x0000000000000004ull) == 61);
116 assert(sz_u64_clz(0x0000000000000007ull) == 61);
117 assert(sz_u64_clz(0x8000000000000001ull) == 0);
118 assert(sz_u64_clz(0xffffffffffffffffull) == 0);
119 assert(sz_u64_clz(0x4000000000000000ull) == 1);
120
121 assert(sz_size_log2i_nonzero(1) == 0);
122 assert(sz_size_log2i_nonzero(2) == 1);
123 assert(sz_size_log2i_nonzero(3) == 1);
124
125 assert(sz_size_log2i_nonzero(4) == 2);
126 assert(sz_size_log2i_nonzero(5) == 2);
127 assert(sz_size_log2i_nonzero(7) == 2);
128
129 assert(sz_size_log2i_nonzero(8) == 3);
130 assert(sz_size_log2i_nonzero(9) == 3);
131
132 assert(sz_size_bit_ceil(0) == 0);
133 assert(sz_size_bit_ceil(1) == 1);
134
135 assert(sz_size_bit_ceil(2) == 2);
136 assert(sz_size_bit_ceil(3) == 4);
137 assert(sz_size_bit_ceil(4) == 4);
138
139 assert(sz_size_bit_ceil(77) == 128);
140 assert(sz_size_bit_ceil(127) == 128);
141 assert(sz_size_bit_ceil(128) == 128);
142
143 assert(sz_size_bit_ceil(1000000ull) == (1ull << 20));
144 assert(sz_size_bit_ceil(2000000ull) == (1ull << 21));
145 assert(sz_size_bit_ceil(4000000ull) == (1ull << 22));
146 assert(sz_size_bit_ceil(8000000ull) == (1ull << 23));
147
148 assert(sz_size_bit_ceil(16000000ull) == (1ull << 24));
149 assert(sz_size_bit_ceil(32000000ull) == (1ull << 25));
150 assert(sz_size_bit_ceil(64000000ull) == (1ull << 26));
151
152 assert(sz_size_bit_ceil(128000000ull) == (1ull << 27));
153 assert(sz_size_bit_ceil(256000000ull) == (1ull << 28));
154 assert(sz_size_bit_ceil(512000000ull) == (1ull << 29));
155
156 assert(sz_size_bit_ceil(1000000000ull) == (1ull << 30));
157 assert(sz_size_bit_ceil(2000000000ull) == (1ull << 31));
158
159#if SZ_IS_64BIT_
160 assert(sz_size_bit_ceil(4000000000ull) == (1ull << 32));
161 assert(sz_size_bit_ceil(8000000000ull) == (1ull << 33));
162 assert(sz_size_bit_ceil(16000000000ull) == (1ull << 34));
163
164 assert(sz_size_bit_ceil((1ull << 62)) == (1ull << 62));
165 assert(sz_size_bit_ceil((1ull << 62) + 1) == (1ull << 63));
166 assert(sz_size_bit_ceil((1ull << 63)) == (1ull << 63));
167#endif

Callers 1

mainFunction · 0.85

Calls 3

sz_u64_clzFunction · 0.85
sz_size_log2i_nonzeroFunction · 0.85
sz_size_bit_ceilFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…