Files
SEQUA-Engine/3d/tests/test_capabilities.cpp
Ange-Marie MAURIN - A2M Systèmes 3f36b98c71 feat(3d): contrat SEQUA 3D, I3DEngineAdapter et négociation des capacités
Bibliothèque sequa::3d (espace de noms sequa::three_d), sans dépendance à un moteur : interface I3DEngineAdapter, tampons et négociation des capacités, synchronisation de la scène par deltas versionnés tout ou rien (SceneState, snapshot), demandes d'image et mesures communes. NullEngineAdapter (SIMULÉ) pour les tests. Types provisoires en attendant le format du schéma.
2026-11-07 04:37:15 +01:00

57 lines
2.0 KiB
C++

// SPDX-License-Identifier: MPL-2.0
#include "sequa/3d/adapter.hpp"
#include "sequa/3d/capabilities.hpp"
#include <doctest/doctest.h>
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);
}