blob: c59c5328270014d34108a89760ea51cb44be7888 [file] [log] [blame]
/*
* Copyright 2022 Rive
*/
#include <rive/span.hpp>
#include <catch.hpp>
#include <cstdio>
using namespace rive;
namespace {
class baseclass {};
class subclass : public baseclass {};
} // namespace
static void function(Span<int> span) {}
static void function(Span<baseclass*> span) {}
static void function(Span<subclass*> span) {}
TEST_CASE("basics", "[span]") {
Span<int> span;
REQUIRE(span.empty());
REQUIRE(span.size() == 0);
REQUIRE(span.size_bytes() == 0);
REQUIRE(span.begin() == span.end());
int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
span = {array, 4};
REQUIRE(!span.empty());
REQUIRE(span.data() == array);
REQUIRE(span.size() == 4);
REQUIRE(span.size_bytes() == 4 * sizeof(int));
REQUIRE(span.begin() + span.size() == span.end());
int counter = 0;
int sum = 0;
for (auto s : span) {
counter += 1;
sum += s;
}
REQUIRE(counter == 4);
REQUIRE(sum == 0 + 1 + 2 + 3);
auto sub = span.subset(1, 2);
REQUIRE(!sub.empty());
REQUIRE(sub.data() == array + 1);
REQUIRE(sub.size() == 2);
sub = sub.subset(1, 0);
REQUIRE(sub.empty());
REQUIRE(sub.size() == 0);
}
TEST_CASE("vector-integration", "[span]") {
std::vector<int> vi;
std::vector<baseclass*> vb;
std::vector<subclass*> vs;
function(vi);
function(vb);
function(vs);
}