Commit 5a913696 authored by neverlord's avatar neverlord

fixed requirement

parent 76e3200c
...@@ -124,14 +124,14 @@ class any_tuple ...@@ -124,14 +124,14 @@ class any_tuple
template<typename T> template<typename T>
inline T const& get_as(size_t p) const 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)); return *reinterpret_cast<T const*>(at(p));
} }
template<typename T> template<typename T>
inline T& get_mutable_as(size_t p) 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)); return *reinterpret_cast<T*>(mutable_at(p));
} }
......
...@@ -22,21 +22,23 @@ size_t test__fixed_vector() ...@@ -22,21 +22,23 @@ size_t test__fixed_vector()
fixed_vector<int, 4> vec4 {1, 2}; fixed_vector<int, 4> vec4 {1, 2};
fixed_vector<int, 2> vec5 {3, 4}; fixed_vector<int, 2> vec5 {3, 4};
vec4.insert(vec4.end(), vec5.begin(), vec5.end()); vec4.insert(vec4.end(), vec5.begin(), vec5.end());
auto vec6 = vec4;
CPPA_CHECK_EQUAL(vec1.size(), 4); CPPA_CHECK_EQUAL(vec1.size(), 4);
CPPA_CHECK_EQUAL(vec2.size(), 4); CPPA_CHECK_EQUAL(vec2.size(), 4);
CPPA_CHECK_EQUAL(vec3.size(), 4); CPPA_CHECK_EQUAL(vec3.size(), 4);
CPPA_CHECK_EQUAL(vec4.size(), 4); CPPA_CHECK_EQUAL(vec4.size(), 4);
CPPA_CHECK_EQUAL(vec5.size(), 2); CPPA_CHECK_EQUAL(vec5.size(), 2);
CPPA_CHECK_EQUAL(vec6.size(), 4);
CPPA_CHECK_EQUAL(vec1.full(), true); CPPA_CHECK_EQUAL(vec1.full(), true);
CPPA_CHECK_EQUAL(vec2.full(), false); CPPA_CHECK_EQUAL(vec2.full(), false);
CPPA_CHECK_EQUAL(vec3.full(), true); CPPA_CHECK_EQUAL(vec3.full(), true);
CPPA_CHECK_EQUAL(vec4.full(), true); CPPA_CHECK_EQUAL(vec4.full(), true);
CPPA_CHECK_EQUAL(vec5.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(vec1.begin(), vec1.end(), arr1));
CPPA_CHECK(std::equal(vec2.rbegin(), vec2.rend(), arr1)); CPPA_CHECK(std::equal(vec2.rbegin(), vec2.rend(), arr1));
CPPA_CHECK_EQUAL(vec4.size(), vec1.size()); CPPA_CHECK(std::equal(vec4.begin(), vec4.end(), arr1));
if (vec4.size() == vec1.size()) CPPA_CHECK(std::equal(vec6.begin(), vec6.end(), arr1));
CPPA_CHECK(std::equal(vec4.begin(), vec4.end(), arr1)); CPPA_CHECK(std::equal(vec6.begin(), vec6.end(), vec2.rbegin()));
return CPPA_TEST_RESULT; return CPPA_TEST_RESULT;
} }
...@@ -41,24 +41,32 @@ size_t test__tuple() ...@@ -41,24 +41,32 @@ size_t test__tuple()
CPPA_CHECK_EQUAL(t0_1, 2); CPPA_CHECK_EQUAL(t0_1, 2);
// get a view of t0 // get a view of t0
any_tuple atup0(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)); 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)); CPPA_CHECK((v1opt));
if (v1opt) if (v1opt)
{ {
auto& v1 = *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); CPPA_CHECK_EQUAL(v1.size(), 1);
auto& v1_0 = get<0>(v1);
CPPA_CHECK_EQUAL(v1_0, "1"); 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 // use tuple cast to get a subtuple
any_tuple at0(t0); any_tuple at0(t0);
auto v0opt = tuple_cast<std::string, anything>(at0); 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((v0opt));
CPPA_CHECK(at0.size() == 2 && at0.at(0) == &get<0>(t0));
if (v0opt) if (v0opt)
{ {
tuple<std::string>& v0 = *v0opt; auto& v0 = *v0opt;
auto v0_0 = get<0>(v0); CPPA_CHECK((std::is_same<decltype(v0), tuple<std::string>&>::value));
CPPA_CHECK((std::is_same<decltype(v0_0), 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.size(), 1);
CPPA_CHECK_EQUAL(v0_0, "1"); CPPA_CHECK_EQUAL(v0_0, "1");
CPPA_CHECK_EQUAL(get<0>(t0), get<0>(v0)); 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