summaryrefslogtreecommitdiff
path: root/libs/lambda/test/phoenix_control_structures.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/lambda/test/phoenix_control_structures.cpp')
-rw-r--r--libs/lambda/test/phoenix_control_structures.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/libs/lambda/test/phoenix_control_structures.cpp b/libs/lambda/test/phoenix_control_structures.cpp
new file mode 100644
index 000000000..722a74f91
--- /dev/null
+++ b/libs/lambda/test/phoenix_control_structures.cpp
@@ -0,0 +1,148 @@
+// phoenix_style_control_structures.cpp -- The Boost Lambda Library ------
+//
+// Copyright (C) 2000-2003 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000-2003 Gary Powell (powellg@amazon.com)
+//
+// Distributed under 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)
+//
+// For more information, see www.boost.org
+
+// -----------------------------------------------------------------------
+
+
+#include <boost/test/minimal.hpp> // see "Header Implementation Option"
+
+#include "boost/lambda/lambda.hpp"
+#include "boost/lambda/if.hpp"
+#include "boost/lambda/loops.hpp"
+
+#include <iostream>
+#include <vector>
+#include <list>
+#include <algorithm>
+#include <cmath>
+#include <cassert>
+#include <functional>
+
+
+
+using namespace boost::lambda;
+using namespace std;
+
+
+
+// If-else, while, do-while, for statements
+
+
+int test_main(int, char *[]) {
+
+ vector<int> v;
+ v.clear();
+ v.push_back(1);
+ v.push_back(2);
+ v.push_back(3);
+ v.push_back(4);
+ v.push_back(5);
+ v.push_back(6);
+ v.push_back(7);
+ v.push_back(8);
+ v.push_back(9);
+ v.push_back(10);
+
+ int sum = 0;
+ //////////////////////////////////
+ for_each(v.begin(), v.end(),
+ if_(_1 > 3 && _1 <= 8)
+ [
+ sum += _1
+ ]
+ );
+
+ BOOST_CHECK(sum == 4+5+6+7+8);
+
+ int gt = 0, eq = 0, lt = 0;
+ //////////////////////////////////
+ for_each(v.begin(), v.end(),
+ if_(_1 > 5)
+ [
+ ++var(gt)
+ ]
+ .else_
+ [
+ if_(_1 == 5)
+ [
+ ++var(eq)
+ ]
+ .else_
+ [
+ ++var(lt)
+ ]
+ ]
+ );
+
+ BOOST_CHECK(lt==4);
+ BOOST_CHECK(eq==1);
+ BOOST_CHECK(gt==5);
+
+ vector<int> t = v;
+
+ int counta = 0;
+ int countb = 0;
+ //////////////////////////////////
+ for_each(v.begin(), v.end(),
+ (
+ while_(_1--)
+ [
+ ++var(counta)
+ ],
+ ++var(countb)
+ )
+ );
+
+ BOOST_CHECK(counta == 55);
+ BOOST_CHECK(countb == 10);
+
+
+ v = t;
+
+ counta = 0; countb = 0;
+ //////////////////////////////////
+ for_each(v.begin(), v.end(),
+ (
+ do_
+ [
+ ++var(counta)
+ ]
+ .while_(_1--),
+ ++var(countb)
+ )
+ );
+
+ BOOST_CHECK(counta == (2+11)*10/2);
+ BOOST_CHECK(countb == 10);
+
+
+ v = t;
+ counta = 0; countb = 0;
+ //////////////////////////////////
+ int iii;
+ for_each(v.begin(), v.end(),
+ (
+ for_(var(iii) = 0, var(iii) < _1, ++var(iii))
+ [
+ ++var(counta)
+ ],
+ ++var(countb)
+ )
+ );
+
+ BOOST_CHECK(counta == (1+10)*10/2);
+ BOOST_CHECK(countb == 10);
+
+ v = t;
+
+ return 0;
+}
+