| /* | |
| * Copyright 2025 Rive | |
| */ | |
| #include <catch.hpp> | |
| #include "instance_chunker.hpp" | |
| using namespace rive; | |
| using namespace rive::gpu; | |
| TEST_CASE("maxSupportedInstancesPerDrawCommand==2, odd", "[InstanceChunker]") | |
| { | |
| InstanceChunker c(5, 0, 2); | |
| auto it = c.begin(); | |
| CHECK((*it).baseInstance == 0); | |
| CHECK((*it).instanceCount == 2); | |
| CHECK(it != c.end()); | |
| ++it; | |
| CHECK((*it).baseInstance == 2); | |
| CHECK((*it).instanceCount == 2); | |
| CHECK(it != c.end()); | |
| ++it; | |
| CHECK((*it).baseInstance == 4); | |
| CHECK((*it).instanceCount == 1); | |
| CHECK(it != c.end()); | |
| for (size_t i = 0; i < 10; ++i) | |
| { | |
| ++it; | |
| CHECK((*it).baseInstance == 5); | |
| CHECK((*it).instanceCount == 0); | |
| CHECK(it == c.end()); | |
| } | |
| } | |
| TEST_CASE("maxSupportedInstancesPerDrawCommand==2, even", "[InstanceChunker]") | |
| { | |
| InstanceChunker c(6, 0, 2); | |
| auto it = c.begin(); | |
| CHECK((*it).baseInstance == 0); | |
| CHECK((*it).instanceCount == 2); | |
| CHECK(it != c.end()); | |
| ++it; | |
| CHECK((*it).baseInstance == 2); | |
| CHECK((*it).instanceCount == 2); | |
| CHECK(it != c.end()); | |
| ++it; | |
| CHECK((*it).baseInstance == 4); | |
| CHECK((*it).instanceCount == 2); | |
| CHECK(it != c.end()); | |
| for (size_t i = 0; i < 10; ++i) | |
| { | |
| ++it; | |
| CHECK((*it).baseInstance == 6); | |
| CHECK((*it).instanceCount == 0); | |
| CHECK(it == c.end()); | |
| } | |
| } | |
| TEST_CASE("maxSupportedInstancesPerDrawCommand==0xffffffff", | |
| "[InstanceChunker]") | |
| { | |
| InstanceChunker c(5, 0, 0xffffffff); | |
| auto it = c.begin(); | |
| CHECK((*it).baseInstance == 0); | |
| CHECK((*it).instanceCount == 5); | |
| CHECK(it != c.end()); | |
| for (size_t i = 0; i < 10; ++i) | |
| { | |
| ++it; | |
| CHECK((*it).baseInstance == 5); | |
| CHECK((*it).instanceCount == 0); | |
| CHECK(it == c.end()); | |
| } | |
| } | |
| TEST_CASE("maxSupportedInstancesPerDrawCommand==0", "[InstanceChunker]") | |
| { | |
| InstanceChunker c(5, 0, 0); | |
| auto it = c.begin(); | |
| for (size_t i = 0; i < 10; ++i) | |
| { | |
| CHECK(it != c.end()); | |
| CHECK((*it).baseInstance == 0); | |
| CHECK((*it).instanceCount == 0); | |
| ++it; | |
| } | |
| } | |
| TEST_CASE("empty", "[InstanceChunker]") | |
| { | |
| InstanceChunker c(0, 0, 5); | |
| auto it = c.begin(); | |
| for (size_t i = 0; i < 10; ++i) | |
| { | |
| CHECK(it == c.end()); | |
| ++it; | |
| } | |
| } | |
| TEST_CASE("empty,maxSupportedInstancesPerDrawCommand==0", "[InstanceChunker]") | |
| { | |
| InstanceChunker c(0, 0, 0); | |
| auto it = c.begin(); | |
| for (size_t i = 0; i < 10; ++i) | |
| { | |
| CHECK(it == c.end()); | |
| ++it; | |
| } | |
| } |