Commit 5a913696 authored by neverlord's avatar neverlord

fixed requirement

parent 76e3200c
......@@ -124,14 +124,14 @@ class any_tuple
template<typename T>
inline T const& get_as(size_t p) const
{
CPPA_REQUIRE(type_at(p) == typeid(T));
CPPA_REQUIRE(*(type_at(p)) == typeid(T));
return *reinterpret_cast<T const*>(at(p));
}
template<typename T>
inline T& get_mutable_as(size_t p)
{
CPPA_REQUIRE(type_at(p) == typeid(T));
CPPA_REQUIRE(*(type_at(p)) == typeid(T));
return *reinterpret_cast<T*>(mutable_at(p));
}
......
......@@ -22,21 +22,23 @@ size_t test__fixed_vector()
fixed_vector<int, 4> vec4 {1, 2};
fixed_vector<int, 2> vec5 {3, 4};
vec4.insert(vec4.end(), vec5.begin(), vec5.end());
auto vec6 = vec4;
CPPA_CHECK_EQUAL(vec1.size(), 4);
CPPA_CHECK_EQUAL(vec2.size(), 4);
CPPA_CHECK_EQUAL(vec3.size(), 4);
CPPA_CHECK_EQUAL(vec4.size(), 4);
CPPA_CHECK_EQUAL(vec5.size(), 2);
CPPA_CHECK_EQUAL(vec6.size(), 4);
CPPA_CHECK_EQUAL(vec1.full(), true);
CPPA_CHECK_EQUAL(vec2.full(), false);
CPPA_CHECK_EQUAL(vec3.full(), true);
CPPA_CHECK_EQUAL(vec4.full(), true);
CPPA_CHECK_EQUAL(vec5.full(), true);
CPPA_CHECK_EQUAL(vec4.full(), true);
CPPA_CHECK_EQUAL(vec6.full(), true);
CPPA_CHECK(std::equal(vec1.begin(), vec1.end(), arr1));
CPPA_CHECK(std::equal(vec2.rbegin(), vec2.rend(), arr1));
CPPA_CHECK_EQUAL(vec4.size(), vec1.size());
if (vec4.size() == vec1.size())
CPPA_CHECK(std::equal(vec4.begin(), vec4.end(), arr1));
CPPA_CHECK(std::equal(vec6.begin(), vec6.end(), arr1));
CPPA_CHECK(std::equal(vec6.begin(), vec6.end(), vec2.rbegin()));
return CPPA_TEST_RESULT;
}
......@@ -41,24 +41,32 @@ size_t test__tuple()
CPPA_CHECK_EQUAL(t0_1, 2);
// get a view of t0
any_tuple atup0(t0);
CPPA_CHECK(atup0.size() == 2 && atup0.at(0) == &get<0>(t0));
auto v1opt = tuple_cast<std::string, anything>(any_tuple_view(atup0));
// the tuple_view forces atup0 to detach from t0
CPPA_CHECK(atup0.size() == 2 && atup0.at(0) != &get<0>(t0));
CPPA_CHECK((v1opt));
if (v1opt)
{
auto& v1 = *v1opt;
auto v1_0 = get<0>(v1);
CPPA_CHECK((std::is_same<decltype(v1), tuple_view<std::string>&>::value));
CPPA_CHECK_EQUAL(v1.size(), 1);
auto& v1_0 = get<0>(v1);
CPPA_CHECK_EQUAL(v1_0, "1");
CPPA_CHECK_EQUAL(atup0.at(0), &(get<0>(v1))); // point to the same
}
// use tuple cast to get a subtuple
any_tuple at0(t0);
auto v0opt = tuple_cast<std::string, anything>(at0);
CPPA_CHECK((std::is_same<decltype(v0opt), option<tuple<std::string>>>::value));
CPPA_CHECK((v0opt));
CPPA_CHECK(at0.size() == 2 && at0.at(0) == &get<0>(t0));
if (v0opt)
{
tuple<std::string>& v0 = *v0opt;
auto v0_0 = get<0>(v0);
CPPA_CHECK((std::is_same<decltype(v0_0), std::string>::value));
auto& v0 = *v0opt;
CPPA_CHECK((std::is_same<decltype(v0), tuple<std::string>&>::value));
auto& v0_0 = get<0>(v0);
CPPA_CHECK((std::is_same<decltype(v0_0), std::string const&>::value));
CPPA_CHECK_EQUAL(v0.size(), 1);
CPPA_CHECK_EQUAL(v0_0, "1");
CPPA_CHECK_EQUAL(get<0>(t0), get<0>(v0));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment