diff --git a/test/sequence/github-176.cpp b/test/sequence/github-176.cpp index 553e83c2..82960e9a 100644 --- a/test/sequence/github-176.cpp +++ b/test/sequence/github-176.cpp @@ -6,9 +6,12 @@ ==============================================================================*/ #include +#include #include #include #include +#include +#include #include #include @@ -39,6 +42,36 @@ void test_at() BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6); } +template inline T& value(T& v) { return v; } +template inline T& value(boost::fusion::pair& v) { return v.second; } + +template +void test_at_key() +{ + Sequence seq; + + // zero initialized + BOOST_TEST(boost::fusion::at_key(seq)[0] == 0); + BOOST_TEST(boost::fusion::at_key(seq)[1] == 0); + BOOST_TEST(boost::fusion::at_key(seq)[2] == 0); + + int (&arr)[3] = value(boost::fusion::deref(boost::fusion::begin(seq))); + + arr[0] = 2; + arr[1] = 4; + arr[2] = 6; + + BOOST_TEST(boost::fusion::at_key(seq)[0] == 2); + BOOST_TEST(boost::fusion::at_key(seq)[1] == 4); + BOOST_TEST(boost::fusion::at_key(seq)[2] == 6); + + boost::fusion::at_key(seq)[1] = 42; + + BOOST_TEST(boost::fusion::at_key(seq)[0] == 2); + BOOST_TEST(boost::fusion::at_key(seq)[1] == 42); + BOOST_TEST(boost::fusion::at_key(seq)[2] == 6); +} + int main() { using namespace boost::fusion; @@ -47,4 +80,7 @@ int main() test_at >(); test_at >(); test_at >(); + + test_at_key >(); + test_at_key > >(); }