summaryrefslogtreecommitdiff
path: root/libs/lambda/test/switch_construct.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-06-25 22:59:01 +0000
committer <>2013-09-27 11:49:28 +0000
commit8c4528713d907ee2cfd3bfcbbad272c749867f84 (patch)
treec09e2ce80f47b90c85cc720f5139089ad9c8cfff /libs/lambda/test/switch_construct.cpp
downloadboost-tarball-8c4528713d907ee2cfd3bfcbbad272c749867f84.tar.gz
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_54_0.tar.bz2.boost_1_54_0baserock/morph
Diffstat (limited to 'libs/lambda/test/switch_construct.cpp')
-rw-r--r--libs/lambda/test/switch_construct.cpp392
1 files changed, 392 insertions, 0 deletions
diff --git a/libs/lambda/test/switch_construct.cpp b/libs/lambda/test/switch_construct.cpp
new file mode 100644
index 000000000..a0599fe12
--- /dev/null
+++ b/libs/lambda/test/switch_construct.cpp
@@ -0,0 +1,392 @@
+// switch_test.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/switch.hpp"
+
+#include <iostream>
+#include <algorithm>
+#include <vector>
+#include <string>
+
+
+
+// Check that elements 0 -- index are 1, and the rest are 0
+bool check(const std::vector<int>& v, int index) {
+ using namespace boost::lambda;
+ int counter = 0;
+ std::vector<int>::const_iterator
+ result = std::find_if(v.begin(), v.end(),
+ ! if_then_else_return(
+ var(counter)++ <= index,
+ _1 == 1,
+ _1 == 0)
+ );
+ return result == v.end();
+}
+
+
+
+void do_switch_no_defaults_tests() {
+
+ using namespace boost::lambda;
+
+ int i = 0;
+ std::vector<int> v,w;
+
+ // elements from 0 to 9
+ std::generate_n(std::back_inserter(v),
+ 10,
+ var(i)++);
+ std::fill_n(std::back_inserter(w), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 0));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 1));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 2));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 3));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 4));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 5));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5])),
+ case_statement<6>(++var(w[6]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 6));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5])),
+ case_statement<6>(++var(w[6])),
+ case_statement<7>(++var(w[7]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 7));
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5])),
+ case_statement<6>(++var(w[6])),
+ case_statement<7>(++var(w[7])),
+ case_statement<8>(++var(w[8]))
+ )
+ );
+
+ BOOST_CHECK(check(w, 8));
+ std::fill_n(w.begin(), 10, 0);
+
+}
+
+
+void do_switch_yes_defaults_tests() {
+
+ using namespace boost::lambda;
+
+ int i = 0;
+ std::vector<int> v,w;
+
+ // elements from 0 to 9
+ std::generate_n(std::back_inserter(v),
+ 10,
+ var(i)++);
+ std::fill_n(std::back_inserter(w), 10, 0);
+
+ int default_count;
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, -1));
+ BOOST_CHECK(default_count == 10);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 0));
+ BOOST_CHECK(default_count == 9);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 1));
+ BOOST_CHECK(default_count == 8);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 2));
+ BOOST_CHECK(default_count == 7);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 3));
+ BOOST_CHECK(default_count == 6);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 4));
+ BOOST_CHECK(default_count == 5);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 5));
+ BOOST_CHECK(default_count == 4);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5])),
+ case_statement<6>(++var(w[6])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 6));
+ BOOST_CHECK(default_count == 3);
+ std::fill_n(w.begin(), 10, 0);
+
+ // ---
+ default_count = 0;
+ std::for_each(v.begin(), v.end(),
+ switch_statement(
+ _1,
+ case_statement<0>(++var(w[0])),
+ case_statement<1>(++var(w[1])),
+ case_statement<2>(++var(w[2])),
+ case_statement<3>(++var(w[3])),
+ case_statement<4>(++var(w[4])),
+ case_statement<5>(++var(w[5])),
+ case_statement<6>(++var(w[6])),
+ case_statement<7>(++var(w[7])),
+ default_statement(++var(default_count))
+ )
+ );
+
+ BOOST_CHECK(check(w, 7));
+ BOOST_CHECK(default_count == 2);
+ std::fill_n(w.begin(), 10, 0);
+
+}
+
+void test_empty_cases() {
+
+ using namespace boost::lambda;
+
+ // ---
+ switch_statement(
+ _1,
+ default_statement()
+ )(make_const(1));
+
+ switch_statement(
+ _1,
+ case_statement<1>()
+ )(make_const(1));
+
+}
+
+int test_main(int, char* []) {
+
+ do_switch_no_defaults_tests();
+ do_switch_yes_defaults_tests();
+
+ test_empty_cases();
+
+ return EXIT_SUCCESS;
+
+}
+