// unit-test-path.cpp #include "../../source/core/slang-relative-container.h" #include "test-context.h" using namespace Slang; static void _checkEncodeDecode(uint32_t size) { uint8_t encode[RelativeString::kMaxSizeEncodeSize]; size_t encodeSize = RelativeString::calcEncodedSize(size, encode); size_t decodedSize; const char* chars = RelativeString::decodeSize((const char*)encode, decodedSize); SLANG_CHECK(decodedSize == size); SLANG_CHECK(chars - (const char*)encode == encodeSize); } namespace { // anonymous struct Root { Relative32Array > dirs; Relative32Ptr name; float value; }; } // anonymous static void relativeContainerUnitTest() { _checkEncodeDecode(253); for (int64_t i = 0; i < 0x100000000; i += (i / 2) + 1) { _checkEncodeDecode(uint32_t(i)); } { RelativeContainer container; const char* strings[] = { "Hello", "World", nullptr, }; { Safe32Ptr root = container.newObject(); auto array = container.newArray>(SLANG_COUNT_OF(strings)); for (Int i = 0; i < SLANG_COUNT_OF(strings); ++i) { array[i] = container.newString(strings[i]); } root->dirs = array; } { RelativeContainer copy; copy.set(container.getData(), container.getDataCount()); Root* root = (Root*)copy.getData(); SLANG_CHECK(root->dirs.getCount() == SLANG_COUNT_OF(strings)); Int count = root->dirs.getCount(); for (Int i = 0; i < count; ++i) { RelativeString* str = root->dirs[i]; const char* check = strings[i]; if (check) { SLANG_CHECK(str != nullptr); const char* strCstr = str->getCstr(); SLANG_CHECK(strcmp(strCstr, check) == 0); } else { SLANG_CHECK(str == nullptr); } } } } } SLANG_UNIT_TEST("RelativeContainer", relativeContainerUnitTest);