[ox/std] Add UUID str conv test and fix bugs found
This commit is contained in:
parent
1b7b6e306e
commit
54eebf81da
2
deps/ox/src/ox/std/assert.hpp
vendored
2
deps/ox/src/ox/std/assert.hpp
vendored
@ -80,7 +80,7 @@ constexpr void expect(const char *file, int line, const auto &actual, const auto
|
|||||||
if (!std::is_constant_evaluated()) {
|
if (!std::is_constant_evaluated()) {
|
||||||
#if defined(OX_USE_STDLIB)
|
#if defined(OX_USE_STDLIB)
|
||||||
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, "Value incorrect");
|
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, "Value incorrect");
|
||||||
oxErrf("expected: {}, actual: {}\n", detail::toStringView<true>(expected), detail::toStringView<true>(actual));
|
oxErrf("expected: {}\nactual: {}\n", detail::toStringView<true>(expected), detail::toStringView<true>(actual));
|
||||||
printStackTrace(2);
|
printStackTrace(2);
|
||||||
oxTracef("assert::expect", "Failed assert: {} == {} [{}:{}]", detail::toStringView<true>(actual), detail::toStringView<true>(expected), file, line);
|
oxTracef("assert::expect", "Failed assert: {} == {} [{}:{}]", detail::toStringView<true>(actual), detail::toStringView<true>(expected), file, line);
|
||||||
std::abort();
|
std::abort();
|
||||||
|
1
deps/ox/src/ox/std/test/CMakeLists.txt
vendored
1
deps/ox/src/ox/std/test/CMakeLists.txt
vendored
@ -21,3 +21,4 @@ add_test("[ox/std] BufferWriter" StdTest "BufferWriter")
|
|||||||
add_test("[ox/std] StringSplit" StdTest "StringSplit")
|
add_test("[ox/std] StringSplit" StdTest "StringSplit")
|
||||||
add_test("[ox/std] FromHex" StdTest "FromHex")
|
add_test("[ox/std] FromHex" StdTest "FromHex")
|
||||||
add_test("[ox/std] ToHex" StdTest "ToHex")
|
add_test("[ox/std] ToHex" StdTest "ToHex")
|
||||||
|
add_test("[ox/std] UUID" StdTest "UUID")
|
||||||
|
10
deps/ox/src/ox/std/test/tests.cpp
vendored
10
deps/ox/src/ox/std/test/tests.cpp
vendored
@ -197,6 +197,16 @@ static std::map<ox::String, ox::Error(*)()> tests = {
|
|||||||
oxExpect(ox::detail::toHex(0x0f), "0f");
|
oxExpect(ox::detail::toHex(0x0f), "0f");
|
||||||
oxExpect(ox::detail::toHex(0x93), "93");
|
oxExpect(ox::detail::toHex(0x93), "93");
|
||||||
oxExpect(ox::detail::toHex(0x40), "40");
|
oxExpect(ox::detail::toHex(0x40), "40");
|
||||||
|
oxExpect(ox::detail::toHex(0xf0), "f0");
|
||||||
|
return OxError(0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UUID",
|
||||||
|
[] {
|
||||||
|
constexpr ox::StringView uuidStr = "8d814442-f46e-4cc3-8edc-ca3c01cc86db";
|
||||||
|
oxRequire(uuid, ox::UUID::fromString(uuidStr));
|
||||||
|
oxExpect(ox::StringView(uuid.toString()), uuidStr);
|
||||||
return OxError(0);
|
return OxError(0);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
38
deps/ox/src/ox/std/uuid.hpp
vendored
38
deps/ox/src/ox/std/uuid.hpp
vendored
@ -81,7 +81,7 @@ constexpr ox::BString<2> toHex(uint8_t v) noexcept {
|
|||||||
'f',
|
'f',
|
||||||
};
|
};
|
||||||
ox::Array<char, 3> out;
|
ox::Array<char, 3> out;
|
||||||
out[0] = valMap[static_cast<unsigned>((v & 0xf0) / 0xf)];
|
out[0] = valMap[static_cast<unsigned>((v & 0xf0) / 16)];
|
||||||
out[1] = valMap[static_cast<unsigned>(v & 0x0f)];
|
out[1] = valMap[static_cast<unsigned>(v & 0x0f)];
|
||||||
out[2] = 0;
|
out[2] = 0;
|
||||||
return out.data();
|
return out.data();
|
||||||
@ -100,10 +100,16 @@ class UUID {
|
|||||||
|
|
||||||
static ox::Result<UUID> generate() noexcept;
|
static ox::Result<UUID> generate() noexcept;
|
||||||
|
|
||||||
constexpr ox::Error fromString(ox::CRStringView s) noexcept {
|
[[nodiscard]]
|
||||||
|
constexpr auto value() const noexcept {
|
||||||
|
return m_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr ox::Result<ox::UUID> fromString(ox::CRStringView s) noexcept {
|
||||||
if (s.len() < 36) {
|
if (s.len() < 36) {
|
||||||
return OxError(1, "Insufficient data contain complete UUID");
|
return OxError(1, "Insufficient data contain complete UUID");
|
||||||
}
|
}
|
||||||
|
UUID out;
|
||||||
auto valueI = 0u;
|
auto valueI = 0u;
|
||||||
for (auto i = 0u; i < s.len();) {
|
for (auto i = 0u; i < s.len();) {
|
||||||
if (s[i] == '-') {
|
if (s[i] == '-') {
|
||||||
@ -115,35 +121,39 @@ class UUID {
|
|||||||
return OxError(1, "Invalid UUID");
|
return OxError(1, "Invalid UUID");
|
||||||
}
|
}
|
||||||
oxRequire(val, detail::fromHex(seg));
|
oxRequire(val, detail::fromHex(seg));
|
||||||
m_value[valueI] = val;
|
out.m_value[valueI] = val;
|
||||||
i += 2;
|
i += 2;
|
||||||
++valueI;
|
++valueI;
|
||||||
}
|
}
|
||||||
return {};
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
constexpr UUIDStr toString() const noexcept {
|
constexpr UUIDStr toString() const noexcept {
|
||||||
UUIDStr out;
|
UUIDStr out;
|
||||||
auto i = 0u;
|
auto valueI = 0u;
|
||||||
constexpr auto printChars = [](
|
constexpr auto printChars = [](
|
||||||
ox::BString<36> *out, const Array<uint8_t, 16> &value, std::size_t cnt, unsigned i) {
|
ox::BString<36> *out,
|
||||||
for (; i < cnt; ++i) {
|
const Array<uint8_t, 16> &value,
|
||||||
const auto v = value[i];
|
std::size_t cnt,
|
||||||
|
unsigned valueI) {
|
||||||
|
for (auto i = 0u; i < cnt; ++i) {
|
||||||
|
const auto v = value[valueI];
|
||||||
const auto h = detail::toHex(v);
|
const auto h = detail::toHex(v);
|
||||||
oxIgnoreError(out->append(h.c_str(), h.len()));
|
oxIgnoreError(out->append(h.c_str(), h.len()));
|
||||||
|
++valueI;
|
||||||
}
|
}
|
||||||
return i;
|
return valueI;
|
||||||
};
|
};
|
||||||
i = printChars(&out, m_value, 4, i);
|
valueI = printChars(&out, m_value, 4, valueI);
|
||||||
out += "-";
|
out += "-";
|
||||||
i = printChars(&out, m_value, 2, i);
|
valueI = printChars(&out, m_value, 2, valueI);
|
||||||
out += "-";
|
out += "-";
|
||||||
i = printChars(&out, m_value, 2, i);
|
valueI = printChars(&out, m_value, 2, valueI);
|
||||||
out += "-";
|
out += "-";
|
||||||
i = printChars(&out, m_value, 2, i);
|
valueI = printChars(&out, m_value, 2, valueI);
|
||||||
out += "-";
|
out += "-";
|
||||||
i = printChars(&out, m_value, 6, i);
|
valueI = printChars(&out, m_value, 6, valueI);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user