aboutsummaryrefslogtreecommitdiffstats
path: root/libnvxx/tests/nvxx_iterator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libnvxx/tests/nvxx_iterator.cc')
-rw-r--r--libnvxx/tests/nvxx_iterator.cc62
1 files changed, 59 insertions, 3 deletions
diff --git a/libnvxx/tests/nvxx_iterator.cc b/libnvxx/tests/nvxx_iterator.cc
index fd96b38..9f41c9c 100644
--- a/libnvxx/tests/nvxx_iterator.cc
+++ b/libnvxx/tests/nvxx_iterator.cc
@@ -40,7 +40,8 @@ TEST_CASE(nvxx_basic_iterate)
{
using namespace std::literals;
auto nvl = bsd::nv_list();
- int fds[2];
+ auto fds = std::array<int, 2>{};
+ auto fds2 = std::array<int, 2>{};
auto binary = std::array<std::byte, 4>{
static_cast<std::byte>(1),
@@ -49,22 +50,37 @@ TEST_CASE(nvxx_basic_iterate)
static_cast<std::byte>(4)
};
- auto ret = ::pipe(fds);
+ auto ret = ::pipe(&fds[0]);
ATF_REQUIRE_EQ(0, ret);
+ ret = ::pipe(&fds2[0]);
+ ATF_REQUIRE_EQ(0, ret);
+
+ auto bool_array = std::vector{true, false, false};
+ auto number_array = std::vector<std::uint64_t>{2, 3, 4};
+ auto string_array = std::vector{"one"sv, "two"sv, "three"sv};
nvl.add_null("a null");
nvl.add_number("a number", 42);
nvl.add_string("a string", "a test string");
nvl.add_bool("a bool", true);
nvl.add_binary("a binary", binary);
+ nvl.add_bool_range("a bool array", bool_array);
+ nvl.add_number_range("a number array", number_array);
+ nvl.add_string_range("a string array", string_array);
auto fdesc = fds[0];
nvl.move_descriptor("an fd", fdesc);
+ nvl.add_descriptor_range("a descriptor array", fds2);
+
auto nvl2 = bsd::nv_list();
nvl2.add_number("child number", 666);
nvl.add_nvlist("an nvlist", nvl2);
+ auto nvl3 = bsd::nv_list();
+ nvl3.add_number("an array number", 4242);
+ nvl.add_nvlist_array("an nvlist array", std::span{&nvl3, 1});
+
auto begin = std::ranges::begin(nvl);
auto end = std::ranges::end(nvl);
@@ -107,6 +123,46 @@ TEST_CASE(nvxx_basic_iterate)
std::get<bsd::const_nv_list>(value)
.get_number("child number"));
+ } else if (std::holds_alternative<
+ std::span<bool const>>(value)) {
+ ATF_REQUIRE_EQ("a bool array"sv, name);
+ auto data = std::get<std::span<bool const>>(value);
+ ATF_REQUIRE_EQ(true,
+ std::ranges::equal(bool_array, data));
+
+ } else if (std::holds_alternative<
+ std::span<std::uint64_t const>>(value)) {
+ ATF_REQUIRE_EQ("a number array"sv, name);
+ auto data = std::get<std::span<
+ std::uint64_t const>>(value);
+ ATF_REQUIRE_EQ(true,
+ std::ranges::equal(number_array, data));
+
+ } else if (std::holds_alternative<
+ std::vector<
+ std::string_view>>(value)) {
+ ATF_REQUIRE_EQ("a string array"sv, name);
+ auto data = std::get<std::vector<
+ std::string_view>>(value);
+ ATF_REQUIRE_EQ(true,
+ std::ranges::equal(string_array, data));
+
+ } else if (std::holds_alternative<
+ std::span<int const>>(value)) {
+ ATF_REQUIRE_EQ("a descriptor array"sv, name);
+ auto data = std::get<std::span<int const>>(value);
+ ATF_REQUIRE_EQ(2, std::ranges::size(data));
+ // XXX: should test we get the actual descriptors
+
+ } else if (std::holds_alternative<
+ std::vector<bsd::const_nv_list>>(value)) {
+ ATF_REQUIRE_EQ("an nvlist array"sv, name);
+ auto data = std::get<std::vector<
+ bsd::const_nv_list>>(value);
+ ATF_REQUIRE_EQ(1, std::ranges::size(data));
+ auto n = data[0].get_number("an array number");
+ ATF_REQUIRE_EQ(4242, n);
+
} else
ATF_REQUIRE_EQ(true, false);
@@ -114,7 +170,7 @@ TEST_CASE(nvxx_basic_iterate)
++begin;
}
- ATF_REQUIRE_EQ(7, i);
+ ATF_REQUIRE_EQ(12, i);
}
ATF_INIT_TEST_CASES(tcs)