blob: a4c6ae5178601d2305cb78ccdac0b2498e94b7ba [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);
funca({array, 4});
funcb(array);
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 = Span(carray);
int expect = 2;
for (auto value : span) {
REQUIRE(value == expect);
expect *= 2;
}
}