From b82e66c2f41f9f8fb14391926e9e716c2ab18271 Mon Sep 17 00:00:00 2001 From: Lexi Winter Date: Mon, 24 Mar 2025 22:54:47 +0000 Subject: test all the basic type in nvxx_iterator test --- libnvxx/nvxx_iterator.cc | 7 +++++++ libnvxx/tests/nvxx_iterator.cc | 47 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/libnvxx/nvxx_iterator.cc b/libnvxx/nvxx_iterator.cc index 5a8f04f..9e0781b 100644 --- a/libnvxx/nvxx_iterator.cc +++ b/libnvxx/nvxx_iterator.cc @@ -123,25 +123,31 @@ nv_list_iterator::__advance() case NV_TYPE_NULL: __current = std::make_pair(name, nullptr); break; + case NV_TYPE_BOOL: __current = std::make_pair(name, cnvlist_get_bool(__cookie)); break; + case NV_TYPE_NUMBER: __current = std::make_pair(name, cnvlist_get_number(__cookie)); break; + case NV_TYPE_STRING: __current = std::make_pair(name, std::string_view( cnvlist_get_string(__cookie))); break; + case NV_TYPE_NVLIST: __current = std::make_pair(name, const_nv_list(cnvlist_get_nvlist(__cookie))); break; + case NV_TYPE_DESCRIPTOR: __current = std::make_pair(name, cnvlist_get_descriptor(__cookie)); break; + case NV_TYPE_BINARY: { auto nitems = std::size_t{}; auto ptr = cnvlist_get_binary(__cookie, &nitems); @@ -149,6 +155,7 @@ nv_list_iterator::__advance() __current = std::make_pair(name, span); break; } + default: std::abort(); } diff --git a/libnvxx/tests/nvxx_iterator.cc b/libnvxx/tests/nvxx_iterator.cc index df78bdf..fd96b38 100644 --- a/libnvxx/tests/nvxx_iterator.cc +++ b/libnvxx/tests/nvxx_iterator.cc @@ -40,10 +40,30 @@ TEST_CASE(nvxx_basic_iterate) { using namespace std::literals; auto nvl = bsd::nv_list(); + int fds[2]; + auto binary = std::array{ + static_cast(1), + static_cast(2), + static_cast(3), + static_cast(4) + }; + + auto ret = ::pipe(fds); + ATF_REQUIRE_EQ(0, ret); + + 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); + + auto fdesc = fds[0]; + nvl.move_descriptor("an fd", fdesc); + + auto nvl2 = bsd::nv_list(); + nvl2.add_number("child number", 666); + nvl.add_nvlist("an nvlist", nvl2); auto begin = std::ranges::begin(nvl); auto end = std::ranges::end(nvl); @@ -56,20 +76,45 @@ TEST_CASE(nvxx_basic_iterate) if (std::holds_alternative(value)) { ATF_REQUIRE_EQ("a number"sv, name); ATF_REQUIRE_EQ(42, std::get(value)); + + } else if (std::holds_alternative(value)) { + ATF_REQUIRE_EQ("a null"sv, name); + ATF_REQUIRE_EQ(nullptr, + std::get(value)); + } else if (std::holds_alternative(value)) { ATF_REQUIRE_EQ("a string"sv, name); ATF_REQUIRE_EQ("a test string", std::get(value)); + } else if (std::holds_alternative(value)) { ATF_REQUIRE_EQ("a bool"sv, name); ATF_REQUIRE_EQ(true, std::get(value)); + + } else if (std::holds_alternative(value)) { + ATF_REQUIRE_EQ("an fd"sv, name); + ATF_REQUIRE_EQ(fdesc, std::get(value)); + + } else if (std::holds_alternative< + std::span>(value)) { + ATF_REQUIRE_EQ("a binary"sv, name); + auto data = std::get>(value); + ATF_REQUIRE_EQ(true, std::ranges::equal(binary, data)); + + } else if (std::holds_alternative(value)) { + ATF_REQUIRE_EQ("an nvlist"sv, name); + ATF_REQUIRE_EQ(666, + std::get(value) + .get_number("child number")); + } else ATF_REQUIRE_EQ(true, false); ++i; ++begin; } - ATF_REQUIRE_EQ(3, i); + + ATF_REQUIRE_EQ(7, i); } ATF_INIT_TEST_CASES(tcs) -- cgit v1.2.3