| /* | |
| * 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(toSpan(v)); | |
| funcb(toSpan(v)); | |
| } |