diff --git a/test/compile_time/Makefile b/test/compile_time/Makefile index 5da0e985..4887cf24 100644 --- a/test/compile_time/Makefile +++ b/test/compile_time/Makefile @@ -13,7 +13,8 @@ TEST_SRCS=\ vector_construction.cpp\ vector_iteration.cpp\ vector_intrinsic.cpp\ - fold.cpp + fold.cpp\ + transform.cpp TEST_OBJS=$(TEST_SRCS:.cpp=.o) diff --git a/test/compile_time/fold.cpp b/test/compile_time/fold.cpp index e5fb9fb7..fa2e8f6c 100644 --- a/test/compile_time/fold.cpp +++ b/test/compile_time/fold.cpp @@ -15,8 +15,17 @@ namespace { template struct distinct + {}; + + struct f { - static const int value = n; + typedef int result_type; + + template + int operator()(distinct const& d, int state) const + { + return state + n; + } }; template @@ -25,6 +34,8 @@ namespace fusion::vector< distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>, distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v; + + fusion::fold(v, 0, f()); } } diff --git a/test/compile_time/transform.cpp b/test/compile_time/transform.cpp new file mode 100644 index 00000000..04ad8ab2 --- /dev/null +++ b/test/compile_time/transform.cpp @@ -0,0 +1,55 @@ +/*============================================================================= + Copyright (c) 2008 Dan Marsden + + 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 + +namespace fusion = boost::fusion; + +namespace +{ + template + struct distinct + { + static const int value = n; + }; + + struct f + { + typedef int result_type; + + template + result_type operator()(T const& t) const + { + return T::value; + } + }; + + struct touch + { + template + void operator()(T const&) const + {} + }; + + template + void test() + { + fusion::vector< + distinct<0, batch>, distinct<1, batch>, distinct<2, batch>, distinct<3, batch>, distinct<4, batch>, + distinct<5, batch>, distinct<6, batch>, distinct<7, batch>, distinct<8, batch>, distinct<9, batch> > v; + + // We're testing transform really + // for_each call is to force iteration through the lazy + // transform, otherwise very little will happen. + fusion::for_each(fusion::transform(v, f()), touch()); + } +} + +#include "./driver.hpp"