Skip to content

Commit

Permalink
Merge pull request #125 from acki-m/bugfix-raw-arrays-in-sequential-view
Browse files Browse the repository at this point in the history
fixed not honored raw arrays in variant_sequential_view
  • Loading branch information
acki-m authored Mar 2, 2018
2 parents ba5d921 + 8df4ca3 commit eb6df03
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ using can_create_associative_view = std::integral_constant<bool, is_associative_

/////////////////////////////////////////////////////////////////////////////////////////

template<typename T, typename Tp = typename std::decay<T>::type>
enable_if_t<can_create_associative_view<Tp>::value, variant_associative_view_private>
template<typename T>
enable_if_t<can_create_associative_view<T>::value, variant_associative_view_private>
create_variant_associative_view(T&& value);

template<typename T, typename Tp = typename std::decay<T>::type>
enable_if_t<!can_create_associative_view<Tp>::value, variant_associative_view_private>
template<typename T>
enable_if_t<!can_create_associative_view<T>::value, variant_associative_view_private>
create_variant_associative_view(T&& value);

/////////////////////////////////////////////////////////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ namespace detail

/////////////////////////////////////////////////////////////////////////////////////////

template<typename T, typename Tp>
enable_if_t<can_create_associative_view<Tp>::value, variant_associative_view_private>
template<typename T>
enable_if_t<can_create_associative_view<T>::value, variant_associative_view_private>
create_variant_associative_view(T&& value)
{
return variant_associative_view_private(wrapped_raw_addressof(value));
}

/////////////////////////////////////////////////////////////////////////////////////////

template<typename T, typename Tp>
enable_if_t<!can_create_associative_view<Tp>::value, variant_associative_view_private>
template<typename T>
enable_if_t<!can_create_associative_view<T>::value, variant_associative_view_private>
create_variant_associative_view(T&& value)
{
return variant_associative_view_private();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ using can_create_sequential_view = std::integral_constant<bool, is_sequential_co

/////////////////////////////////////////////////////////////////////////////////////////

template<typename T, typename Tp = typename std::decay<T>::type>
enable_if_t<can_create_sequential_view<Tp>::value, variant_sequential_view_private>
template<typename T>
enable_if_t<can_create_sequential_view<T>::value, variant_sequential_view_private>
create_variant_sequential_view(T&& value);

template<typename T, typename Tp = typename std::decay<T>::type>
enable_if_t<!can_create_sequential_view<Tp>::value, variant_sequential_view_private>
template<typename T>
enable_if_t<!can_create_sequential_view<T>::value, variant_sequential_view_private>
create_variant_sequential_view(T&& value);

/////////////////////////////////////////////////////////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ namespace detail

/////////////////////////////////////////////////////////////////////////////////////////

template<typename T, typename Tp>
enable_if_t<can_create_sequential_view<Tp>::value, variant_sequential_view_private>
template<typename T>
enable_if_t<can_create_sequential_view<T>::value, variant_sequential_view_private>
create_variant_sequential_view(T&& value)
{
return variant_sequential_view_private(wrapped_raw_addressof(value));
}

/////////////////////////////////////////////////////////////////////////////////////////

template<typename T, typename Tp>
enable_if_t<!can_create_sequential_view<Tp>::value, variant_sequential_view_private>
template<typename T>
enable_if_t<!can_create_sequential_view<T>::value, variant_sequential_view_private>
create_variant_sequential_view(T&& value)
{
return variant_sequential_view_private();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,16 +161,20 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")
{
variant var;
CHECK(var.is_sequential_container() == false);
CHECK(var.create_sequential_view().is_valid() == false);

var = 23;
CHECK(var.is_sequential_container() == false);
CHECK(var.create_sequential_view().is_valid() == false);

var = std::set<int>({1, 2, 3});
CHECK(var.is_sequential_container() == false);
CHECK(var.create_sequential_view().is_valid() == false);

auto set = std::set<int>({ 1, 2, 3 });
var = std::ref(set);
CHECK(var.is_sequential_container() == false);
CHECK(var.create_sequential_view().is_valid() == false);
}


Expand All @@ -180,12 +184,15 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = vec;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);

var = std::ref(vec);
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);

var = &vec;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - std::vector<bool>")
Expand All @@ -194,6 +201,7 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = vec;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - std::list")
Expand All @@ -202,6 +210,7 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = list;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - std::deque")
Expand All @@ -210,6 +219,7 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = deque;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - std::array")
Expand All @@ -218,6 +228,7 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = array;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - std::initializer_list")
Expand All @@ -226,6 +237,7 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = init_list;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - raw array")
Expand All @@ -234,6 +246,16 @@ TEST_CASE("variant::is_sequential_container", "[variant_sequential_view]")

variant var = array;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

SECTION("valid - raw array ptr")
{
int array[3] = {1, 2, 3};

variant var = &array;
CHECK(var.is_sequential_container() == true);
CHECK(var.create_sequential_view().is_valid() == true);
}

}
Expand Down Expand Up @@ -455,6 +477,7 @@ TEST_CASE("variant_sequential_view::set_size()", "[variant_sequential_view]")
int obj[2] = { 0, 0 };
variant var = obj;
auto view = var.create_sequential_view();
CHECK(view.is_valid() == true);
CHECK(view.set_size(10) == false);
}

Expand Down Expand Up @@ -510,6 +533,15 @@ TEST_CASE("variant_sequential_view::insert()", "[variant_sequential_view]")
CHECK(view.get_size() == 5);
}

SECTION("raw array")
{
int obj[2] = { 0, 0 };
variant var = obj;
auto view = var.create_sequential_view();

CHECK(view.insert(view.begin(), 12) == view.end());
}

SECTION("const std::vector")
{
auto vec = std::vector<int>({ 1, 2, 3, 4, 5 });
Expand Down

0 comments on commit eb6df03

Please # to comment.