#include #include #include #include namespace { using namespace boost::ut; using namespace parselink::proto; template constexpr std::array make_bytes(Bytes&&... bytes) { return {std::byte(std::forward(bytes))...}; } constexpr std::array null_id_bytes = {}; constexpr std::size_t expected_null_hash = 0xd98558; } // namespace suite session_id_tests = [] { "test explicitly generated session ids"_test = [] { constexpr session_id sid1(null_id_bytes); constexpr session_id sid2(null_id_bytes); expect(sid1 == sid2); expect(sid1 == null_id_bytes); constexpr auto basic_id = make_bytes(0x0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f); constexpr session_id sid3(basic_id); constexpr session_id sid4(basic_id); expect(sid3 == sid4); expect(sid3 == basic_id); }; "test hashing"_test = [] { session_id sid(null_id_bytes); expect(std::hash{}(sid) == expected_null_hash); }; "test random generated"_test = [] { session_id sid1; session_id sid2; expect(sid1 != null_id_bytes); expect(sid2 != null_id_bytes); expect(sid1 != sid2); }; "test random generated entropy"_test = [] { constexpr static std::size_t iter_count = 100000; std::set sessions; while (sessions.size() < iter_count) { session_id s; expect(!sessions.contains(s)); sessions.insert(std::move(s)); } }; };