Add data() tests to {v2_,}static_vec; v2 versions are disabled.

This commit is contained in:
Zach Laine
2019-08-20 21:09:36 -05:00
parent bb5e94b16c
commit d6bfcd7068
3 changed files with 27 additions and 8 deletions

View File

@@ -979,15 +979,15 @@ namespace boost { namespace stl_interfaces { namespace v2 {
return ranges::begin(derived()) == ranges::end(derived());
}
#if 0 // TODO: Needs tests (and so does v1::container_interface's data().
#if 0 // TODO: Needs tests.
constexpr auto data() requires ranges::contiguous_iterator<ranges::iterator_t<Derived>> {
return &*ranges::begin(derived());
}
constexpr auto data() const
requires ranges::range<const Derived> &&
ranges::contiguous_iterator<ranges::iterator_t<const Derived>> {
return &*ranges::begin(derived());
}
template<ranges::range Container = const Derived>
constexpr auto data() const
requires ranges::contiguous_iterator<ranges::iterator_t<Container>> {
return &*ranges::begin(derived());
}
#endif
constexpr auto size() requires v2_dtl::szd_sent_fwd_rng<Derived> {
@@ -1215,6 +1215,8 @@ namespace boost { namespace stl_interfaces { namespace v2 {
return lhs.swap(rhs);
}
// TODO: We can always provide op== and op<!
#if 201711L <= __cpp_lib_three_way_comparison
friend constexpr std::strong_ordering operator<=>(const Derived& lhs,
const Derived& rhs) {

View File

@@ -692,10 +692,13 @@ TEST(static_vec, front_back)
}
}
TEST(static_vec, index_at)
TEST(static_vec, data_index_at)
{
{
vec_type v = {3, 2, 1};
EXPECT_EQ(v.data()[0], 3);
EXPECT_EQ(v.data()[1], 2);
EXPECT_EQ(v.data()[2], 1);
EXPECT_EQ(v[0], 3);
EXPECT_EQ(v[1], 2);
EXPECT_EQ(v[2], 1);
@@ -704,6 +707,7 @@ TEST(static_vec, index_at)
EXPECT_NO_THROW(v.at(2));
EXPECT_THROW(v.at(3), std::out_of_range);
static_assert(std::is_same<decltype(v.data()), int *>::value, "");
static_assert(std::is_same<decltype(v[0]), int &>::value, "");
static_assert(std::is_same<decltype(v.at(0)), int &>::value, "");
@@ -714,6 +718,9 @@ TEST(static_vec, index_at)
{
vec_type const v = {3, 2, 1};
EXPECT_EQ(v.data()[0], 3);
EXPECT_EQ(v.data()[1], 2);
EXPECT_EQ(v.data()[2], 1);
EXPECT_EQ(v[0], 3);
EXPECT_EQ(v[1], 2);
EXPECT_EQ(v[2], 1);
@@ -722,6 +729,7 @@ TEST(static_vec, index_at)
EXPECT_NO_THROW(v.at(2));
EXPECT_THROW(v.at(3), std::out_of_range);
static_assert(std::is_same<decltype(v.data()), int const *>::value, "");
static_assert(std::is_same<decltype(v[0]), int const &>::value, "");
static_assert(std::is_same<decltype(v.at(0)), int const &>::value, "");
}

View File

@@ -707,10 +707,14 @@ TEST(static_vec, front_back)
}
}
TEST(static_vec, index_at)
TEST(static_vec, data_index_at)
{
{
// TODO: Enable these tests, once v2::container_interface::data() is fixed.
vec_type v = {3, 2, 1};
// EXPECT_EQ(v.data()[0], 3);
// EXPECT_EQ(v.data()[1], 2);
// EXPECT_EQ(v.data()[2], 1);
EXPECT_EQ(v[0], 3);
EXPECT_EQ(v[1], 2);
EXPECT_EQ(v[2], 1);
@@ -719,6 +723,7 @@ TEST(static_vec, index_at)
EXPECT_NO_THROW(v.at(2));
EXPECT_THROW(v.at(3), std::out_of_range);
// static_assert(std::is_same<decltype(v.data()), int *>::value, "");
static_assert(std::is_same<decltype(v[0]), int &>::value, "");
static_assert(std::is_same<decltype(v.at(0)), int &>::value, "");
@@ -729,6 +734,9 @@ TEST(static_vec, index_at)
{
vec_type const v = {3, 2, 1};
// EXPECT_EQ(v.data()[0], 3);
// EXPECT_EQ(v.data()[1], 2);
// EXPECT_EQ(v.data()[2], 1);
EXPECT_EQ(v[0], 3);
EXPECT_EQ(v[1], 2);
EXPECT_EQ(v[2], 1);
@@ -737,6 +745,7 @@ TEST(static_vec, index_at)
EXPECT_NO_THROW(v.at(2));
EXPECT_THROW(v.at(3), std::out_of_range);
// static_assert(std::is_same<decltype(v.data()), int const *>::value, "");
static_assert(std::is_same<decltype(v[0]), int const &>::value, "");
static_assert(std::is_same<decltype(v.at(0)), int const &>::value, "");
}