1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
#include <array>
#include <test.hpp>
#include <protozero/types.hpp>
TEST_CASE("default constructed data_view") {
const protozero::data_view view{};
REQUIRE(view.data() == nullptr);
REQUIRE(view.size() == 0); // NOLINT(readability-container-size-empty)
REQUIRE(view.empty());
}
TEST_CASE("data_view from C string") {
const protozero::data_view view{"foobar"};
REQUIRE(view.data());
REQUIRE(view.size() == 6);
REQUIRE_FALSE(view.empty());
}
TEST_CASE("data_view from std::string") {
const std::string str{"foobar"};
const protozero::data_view view{str};
REQUIRE(view.data());
REQUIRE(view.size() == 6);
}
TEST_CASE("data_view from ptr, size") {
const std::string str{"foobar"};
const protozero::data_view view{str.data(), str.size()};
REQUIRE(view.data());
REQUIRE(view.size() == 6);
}
TEST_CASE("data_view from C array") {
const char* str = "foobar";
const protozero::data_view view{str};
REQUIRE(view.data());
REQUIRE(view.size() == 6);
}
TEST_CASE("data_view from std::array") {
const std::array<char, 7> str{"foobar"};
const protozero::data_view view{str.data(), 6};
REQUIRE(view.data());
REQUIRE(view.size() == 6);
}
TEST_CASE("convert data_view to std::string") {
const protozero::data_view view{"foobar"};
const std::string s = std::string(view);
REQUIRE(s == "foobar");
REQUIRE(std::string(view) == "foobar");
#ifndef PROTOZERO_USE_VIEW
REQUIRE(view.to_string() == "foobar");
#endif
}
#ifndef PROTOZERO_USE_VIEW
// This test only works with our own data_view implementation, because only
// that one contains the protozero_assert() which generates the exception.
TEST_CASE("converting default constructed data_view to string fails") {
const protozero::data_view view{};
REQUIRE_THROWS_AS(view.to_string(), assert_error);
}
#endif
TEST_CASE("swapping data_view") {
protozero::data_view view1{"foo"};
protozero::data_view view2{"bar"};
REQUIRE(std::string(view1) == "foo");
REQUIRE(std::string(view2) == "bar");
using std::swap;
swap(view1, view2);
REQUIRE(std::string(view2) == "foo");
REQUIRE(std::string(view1) == "bar");
}
TEST_CASE("comparing data_views") {
const protozero::data_view v1{"foo"};
const protozero::data_view v2{"bar"};
const protozero::data_view v3{"foox"};
const protozero::data_view v4{"foo"};
const protozero::data_view v5{"fooooooo", 3};
const protozero::data_view v6{"f\0o", 3};
const protozero::data_view v7{"f\0obar", 3};
REQUIRE_FALSE(v1 == v2);
REQUIRE_FALSE(v1 == v3);
REQUIRE(v1 == v4);
REQUIRE(v1 == v5);
REQUIRE_FALSE(v1 == v6);
REQUIRE_FALSE(v1 == v7);
REQUIRE_FALSE(v2 == v3);
REQUIRE_FALSE(v2 == v4);
REQUIRE_FALSE(v3 == v4);
REQUIRE(v4 == v5);
REQUIRE(v6 == v7);
REQUIRE(v1 != v2);
REQUIRE(v1 != v3);
REQUIRE_FALSE(v1 != v4);
REQUIRE_FALSE(v1 != v5);
REQUIRE(v1 != v6);
REQUIRE(v1 != v7);
REQUIRE(v2 != v3);
REQUIRE(v2 != v4);
REQUIRE(v3 != v4);
REQUIRE_FALSE(v4 != v5);
REQUIRE_FALSE(v6 != v7);
}
TEST_CASE("ordering of data_views") {
const protozero::data_view v1{"foo"};
const protozero::data_view v2{"foo"};
const protozero::data_view v3{"bar"};
const protozero::data_view v4{"foox"};
const protozero::data_view v5{"zzz"};
REQUIRE(v1.compare(v1) == 0);
REQUIRE(v1.compare(v2) == 0);
REQUIRE(v1.compare(v3) > 0);
REQUIRE(v1.compare(v4) < 0);
REQUIRE(v1.compare(v5) < 0);
REQUIRE(v2.compare(v1) == 0);
REQUIRE(v2.compare(v2) == 0);
REQUIRE(v2.compare(v3) > 0);
REQUIRE(v2.compare(v4) < 0);
REQUIRE(v2.compare(v5) < 0);
REQUIRE(v3.compare(v1) < 0);
REQUIRE(v3.compare(v2) < 0);
REQUIRE(v3.compare(v3) == 0);
REQUIRE(v3.compare(v4) < 0);
REQUIRE(v3.compare(v5) < 0);
REQUIRE(v4.compare(v1) > 0);
REQUIRE(v4.compare(v2) > 0);
REQUIRE(v4.compare(v3) > 0);
REQUIRE(v4.compare(v4) == 0);
REQUIRE(v4.compare(v5) < 0);
REQUIRE(v5.compare(v1) > 0);
REQUIRE(v5.compare(v2) > 0);
REQUIRE(v5.compare(v3) > 0);
REQUIRE(v5.compare(v4) > 0);
REQUIRE(v5.compare(v5) == 0);
REQUIRE(v1 == v2);
REQUIRE(v1 <= v2);
REQUIRE(v1 >= v2);
REQUIRE(v1 < v4);
REQUIRE(v3 < v1);
REQUIRE(v3 <= v1);
REQUIRE(v5 > v1);
REQUIRE(v5 >= v1);
}
|