blob: 874b7666b1a18a54eacf5a5b27bb2d887de5714d [file] [log] [blame]
/*
* Copyright 2022 Rive
*/
#include <rive/span.hpp>
#include <catch.hpp>
#include <cstdio>
#include <vector>
using namespace rive;
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);
}
static void funca(Span<int> span) {}
static void funcb(Span<const int> span) {}
TEST_CASE("const-and-containers", "[span]")
{
const int carray[] = {1, 2, 3, 4};
funcb({carray, 4});
int array[] = {1, 2, 3, 4};
funca({array, 4});
funcb({array, 4});
std::vector<int> v;
funca(v);
funcb(v);
}
TEST_CASE("can iterate span", "[span]")
{
const int carray[] = {2, 4, 8, 16};
auto span = make_span(carray, 4);
int expect = 2;
for (auto value : span)
{
REQUIRE(value == expect);
expect *= 2;
}
}