mirror of
https://github.com/vicliu624/trail-mate.git
synced 2026-09-22 19:54:23 +00:00
56 lines
2.1 KiB
C++
56 lines
2.1 KiB
C++
#include "ui_map_runtime/map_tiles/map_tile_request_queue.h"
|
|
#include <cassert>
|
|
|
|
using namespace ui::map_tiles;
|
|
|
|
int main()
|
|
{
|
|
MapTileRequestQueue<2> queue;
|
|
std::size_t queued = 99, in_flight = 99;
|
|
queue.statistics(queued, in_flight);
|
|
assert(queued == 0 && in_flight == 0);
|
|
LoadTileCommand first;
|
|
first.runtime.generation = 1;
|
|
first.runtime.command_id = 1;
|
|
first.runtime.created_at_ms = 10;
|
|
first.tile.x = 10;
|
|
const auto accepted = queue.enqueue(first);
|
|
assert(accepted.status == TileSubmitStatus::Accepted);
|
|
queue.statistics(queued, in_flight);
|
|
assert(queued == 1 && in_flight == 0);
|
|
auto duplicate = first;
|
|
duplicate.runtime.command_id = 2;
|
|
assert(queue.enqueue(duplicate).handle.command_id == 1);
|
|
LoadTileCommand running;
|
|
assert(queue.pop(11, running) && running.runtime.command_id == 1);
|
|
queue.statistics(queued, in_flight);
|
|
assert(queued == 0 && in_flight == 1);
|
|
assert(!queue.pop(11, running));
|
|
assert(queue.enqueue(duplicate).status == TileSubmitStatus::AlreadyPending);
|
|
|
|
auto second = first;
|
|
second.tile.layer = MapTileLayer::Poi;
|
|
second.runtime.command_id = 3;
|
|
assert(queue.enqueue(second).status == TileSubmitStatus::Accepted);
|
|
queue.statistics(queued, in_flight);
|
|
assert(queued == 1 && in_flight == 1);
|
|
auto third = first;
|
|
third.tile.x = 11;
|
|
third.runtime.command_id = 4;
|
|
assert(queue.enqueue(third).status == TileSubmitStatus::Backpressured);
|
|
assert(!queue.complete({1, 2})); // Duplicate submission did not replace identity.
|
|
assert(queue.complete(accepted.handle));
|
|
assert(queue.enqueue(third).status == TileSubmitStatus::Accepted);
|
|
assert(queue.cancelGeneration(1) == 2);
|
|
queue.statistics(queued, in_flight);
|
|
assert(queued == 0 && in_flight == 0);
|
|
assert(!queue.pop(20, running));
|
|
|
|
first.runtime.generation = 2;
|
|
assert(queue.enqueue(first));
|
|
assert(queue.pop(21, running));
|
|
assert(!queue.complete({1, 1})); // A late old-generation result cannot retire new work.
|
|
assert(queue.complete({2, 1}));
|
|
assert(!queue.complete({2, 1}));
|
|
}
|