directive_navpoint_test.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include <array>
  2. #include <cassert>
  3. #include "../Sunrise/src/middleware/bap/activity_message/scriptable_auth_body.h"
  4. #include "../Sunrise/src/middleware/encoding/bit_reader.h"
  5. namespace auth = sunrise::middleware::bap::activity_message::scriptable_auth;
  6. namespace bits = sunrise::middleware::encoding::bits;
  7. int main() {
  8. std::array<std::byte,auth::kType68ByteCount> body{};
  9. auth::Type68Preset preset{.nameHash=0x2700C0C5,.elementIndex=2,
  10. .navpoint={0x12345678,47,1}};
  11. std::size_t written{};
  12. auto read=[&](std::size_t offset, unsigned width) {
  13. bits::Reader reader(body);std::uint64_t value{};
  14. while(offset) { const auto step=static_cast<std::uint8_t>(offset>64?64:offset);
  15. assert(reader.read(step,value));offset-=step; }
  16. assert(reader.read(static_cast<std::uint8_t>(width),value));return value;
  17. };
  18. assert(auth::encode_type68(preset,body,written));
  19. assert(written==body.size() && auth::validate_type68_body(body,auth::kType68BitCount));
  20. // Root refs110; entry header66 + timer353 + counters128 + state2 + ref55 + mode3.
  21. constexpr auto marker=110+66+353+128+2+55+3;
  22. assert(read(marker-3,3)==3); // Native mode2 (signed bias1), direct route in destination bubble.
  23. assert(read(marker,32)==0x12345678 && read(marker+32,7)==47 && read(marker+39,16)==32769);
  24. assert(read(marker+55,32)==0x811C9DC5); // No alternate positional anchor.
  25. assert(read(marker+110,32)==0x811C9DC5); // No hashed fallback lookup.
  26. for (unsigned i=1;i<4;++i) assert(read(marker+i*239,32)==0x811C9DC5);
  27. preset.navpoint={};assert(auth::encode_type68(preset,body,written));
  28. assert(read(marker,32)==0x811C9DC5 && read(marker+39,16)==32767);
  29. assert(read(marker-3,3)==1 && auth::validate_type68_body(body,auth::kType68BitCount));
  30. preset.audience={0x12345678,70,104};
  31. assert(auth::encode_type68(preset,body,written));
  32. assert(read(0,32)==0x12345678 && read(32,7)==71 && read(39,16)==32872);
  33. assert(auth::validate_type68_body(body,auth::kType68BitCount));
  34. preset.audience.slotType=4;assert(!auth::encode_type68(preset,body,written));
  35. preset.audience={};
  36. preset.navpoint={0x12345678,2,1};assert(!auth::encode_type68(preset,body,written));
  37. preset.navpoint={0x811C9DC5,47,1};assert(!auth::encode_type68(preset,body,written));
  38. preset.navpoint={0x12345678,47,1};preset.visible=false;
  39. assert(!auth::encode_type68(preset,body,written));
  40. }