// SPDX-License-Identifier: MPL-2.0 #include "sequa/3d/adapter.hpp" #include "sequa/3d/capabilities.hpp" #include using namespace sequa::three_d; TEST_CASE("BufferSet : union, intersection, difference") { const BufferSet a{FrameBuffer::color, FrameBuffer::depth}; const BufferSet b{FrameBuffer::depth, FrameBuffer::albedo}; CHECK((a | b) == BufferSet{FrameBuffer::color, FrameBuffer::depth, FrameBuffer::albedo}); CHECK((a & b) == BufferSet{FrameBuffer::depth}); CHECK((a - b) == BufferSet{FrameBuffer::color}); CHECK(a.contains(FrameBuffer::color)); CHECK_FALSE(a.contains(FrameBuffer::albedo)); CHECK(BufferSet::all().contains(a | b)); CHECK(BufferSet{}.empty()); } TEST_CASE("negotiate : separe les tampons accordes des manquants") { EngineCapabilities caps; caps.engine_name = "test"; caps.buffers = {FrameBuffer::color, FrameBuffer::depth}; const Negotiation n = negotiate({FrameBuffer::color, FrameBuffer::object_ids}, caps); CHECK(n.granted == BufferSet{FrameBuffer::color}); CHECK(n.missing == BufferSet{FrameBuffer::object_ids}); } TEST_CASE("validate_request : tampon absent ou taille invalide refuses") { EngineCapabilities caps; caps.engine_name = "test"; caps.buffers = {FrameBuffer::color}; caps.max_width = 1920; caps.max_height = 1080; FrameRequest request; request.width = 1280; request.height = 720; CHECK_FALSE(validate_request(request, caps).has_value()); request.buffers = {FrameBuffer::color, FrameBuffer::albedo}; const auto missing = validate_request(request, caps); REQUIRE(missing.has_value()); CHECK(missing->code == Error::Code::unsupported); CHECK(missing->message.find("albedo") != std::string::npos); request.buffers = {FrameBuffer::color}; request.width = 3840; REQUIRE(validate_request(request, caps).has_value()); request.width = 0; CHECK(validate_request(request, caps)->code == Error::Code::invalid_argument); }