1#include "duckdb/common/types/string_type.hpp"
2#include "duckdb/common/types/value.hpp"
3#include "utf8proc_wrapper.hpp"
4
5namespace duckdb {
6
7void string_t::Verify() {
8 auto dataptr = GetData();
9 (void)dataptr;
10 assert(dataptr);
11
12#ifdef DEBUG
13 auto utf_type = Utf8Proc::Analyze(dataptr, length);
14 assert(utf_type != UnicodeType::INVALID);
15 if (utf_type == UnicodeType::UNICODE) {
16 // check that the data is a valid NFC UTF8 string
17 auto normalized = Utf8Proc::Normalize(dataptr);
18 assert(strcmp(dataptr, normalized) == 0);
19 free(normalized);
20 }
21#endif
22
23 // verify that the string is null-terminated and that the length is correct
24 assert(strlen(dataptr) == length);
25 // verify that the prefix contains the first four characters of the string
26 for (idx_t i = 0; i < std::min((uint32_t)PREFIX_LENGTH, length); i++) {
27 assert(prefix[i] == dataptr[i]);
28 }
29 // verify that for strings with length < PREFIX_LENGTH, the rest of the prefix is zero
30 for (idx_t i = length; i < PREFIX_LENGTH; i++) {
31 assert(prefix[i] == '\0');
32 }
33}
34
35} // namespace duckdb
36