From 1c542fa5446bf75090641481630bdbbc21834030 Mon Sep 17 00:00:00 2001 From: Tobias Schwinger Date: Sat, 27 Jan 2007 10:49:00 +0000 Subject: [PATCH] introduces test for deduce / deduce_sequence [SVN r36812] --- test/Jamfile | 1 + test/sequence/deduce_sequence.cpp | 80 +++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 test/sequence/deduce_sequence.cpp diff --git a/test/Jamfile b/test/Jamfile index 26c62df0..f63ec6c8 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -103,6 +103,7 @@ import testing ; [ run sequence/vector_value_at.cpp : : : : ] [ run sequence/zip_view.cpp : : : : ] [ run sequence/zip_view2.cpp : : : : ] + [ run sequence/deduce_sequence.cpp : : : : ] # [ compile-fail xxx.cpp : : : : ] ; diff --git a/test/sequence/deduce_sequence.cpp b/test/sequence/deduce_sequence.cpp new file mode 100644 index 00000000..b8929977 --- /dev/null +++ b/test/sequence/deduce_sequence.cpp @@ -0,0 +1,80 @@ +/*============================================================================= + Copyright (c) 2007 Tobias Schwinger + + Use modification and distribution are subject to the Boost Software + License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +==============================================================================*/ + +#include +#include +#include + +#include + +#include + +using boost::is_same; +using boost::reference_wrapper; +using boost::fusion::traits::deduce; +using boost::fusion::traits::deduce_sequence; + +namespace fusion = boost::fusion; + +template +struct test_seq_ctor +{ + typename deduce_sequence::type fsq_args; + + test_seq_ctor(Args const & args) + : fsq_args(args) + { } +}; + +#define TEST_SAME_TYPE(a,b) BOOST_TEST(( is_same< a, b >::value )) +#define TEST_SAME_ELEMENTS(a,b) BOOST_TEST(( boost::mpl::equal< a, b >::type::value )) + +typedef fusion::vector args1; +typedef fusion::vector storable1; +template struct test_seq_ctor; + +typedef fusion::vector< reference_wrapper &, reference_wrapper &, + reference_wrapper const &, reference_wrapper const & > args2; +typedef fusion::vector storable2; +template struct test_seq_ctor; + + +typedef fusion::vector args3; +typedef fusion::vector storable3; +template struct test_seq_ctor; + +typedef fusion::vector args4; +typedef args4 storable4; +template struct test_seq_ctor; + +int main() +{ + TEST_SAME_TYPE(deduce::type, int &); + TEST_SAME_TYPE(deduce::type, int volatile &); + + TEST_SAME_TYPE(deduce::type, int); + TEST_SAME_TYPE(deduce::type, int); + TEST_SAME_TYPE(deduce::type, int); + + TEST_SAME_TYPE(deduce< reference_wrapper & >::type, int &); + TEST_SAME_TYPE(deduce< reference_wrapper & >::type, int const &); + TEST_SAME_TYPE(deduce< reference_wrapper const & >::type, int &); + TEST_SAME_TYPE(deduce< reference_wrapper const & >::type, int const &); + + TEST_SAME_TYPE(deduce< int(&)[2] >::type, int(&)[2]); + TEST_SAME_TYPE(deduce< int const (&)[2] >::type, int const (&)[2]); + TEST_SAME_TYPE(deduce< int volatile (&)[2] >::type, int volatile (&)[2]); + TEST_SAME_TYPE(deduce< int const volatile (&)[2] >::type, int const volatile (&)[2]); + + TEST_SAME_ELEMENTS(deduce_sequence::type,storable1); + TEST_SAME_ELEMENTS(deduce_sequence::type,storable2); + TEST_SAME_ELEMENTS(deduce_sequence::type,storable3); + TEST_SAME_ELEMENTS(deduce_sequence::type,storable4); + + return boost::report_errors(); +}