$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61324 - in trunk/libs/spirit/test: karma qi
From: hartmut.kaiser_at_[hidden]
Date: 2010-04-16 14:15:20
Author: hkaiser
Date: 2010-04-16 14:15:19 EDT (Fri, 16 Apr 2010)
New Revision: 61324
URL: http://svn.boost.org/trac/boost/changeset/61324
Log:
Spirit: enabled single element sequences everywhere a single value is expected (Qi, Karma), added tests
Text files modified: 
   trunk/libs/spirit/test/karma/pattern2.cpp |    17 +++++++++++++++++                       
   trunk/libs/spirit/test/qi/rule.cpp        |    23 +++++++++++++++++++++++                 
   2 files changed, 40 insertions(+), 0 deletions(-)
Modified: trunk/libs/spirit/test/karma/pattern2.cpp
==============================================================================
--- trunk/libs/spirit/test/karma/pattern2.cpp	(original)
+++ trunk/libs/spirit/test/karma/pattern2.cpp	2010-04-16 14:15:19 EDT (Fri, 16 Apr 2010)
@@ -100,6 +100,23 @@
         BOOST_TEST(test_delimited("12.4 ", start, v, space));
     }
 
+    // test handling of single element fusion sequences
+    {
+        using boost::fusion::vector;
+        karma::rule<outiter_type, vector<int>()> r = int_;
+
+        vector<int> v = 1;
+        BOOST_TEST(test("1", r, v));
+    }
+
+    {
+        using boost::fusion::vector;
+        karma::rule<outiter_type, space_type, vector<int>()> r = int_;
+
+        vector<int> v = 1;
+        BOOST_TEST(test_delimited("1 ", r, v, space));
+    }
+
     return boost::report_errors();
 }
 
Modified: trunk/libs/spirit/test/qi/rule.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/rule.cpp	(original)
+++ trunk/libs/spirit/test/qi/rule.cpp	2010-04-16 14:15:19 EDT (Fri, 16 Apr 2010)
@@ -447,6 +447,29 @@
 #pragma setlocale("")
 #endif
 
+    {
+        typedef boost::variant<double, int> v_type;
+        rule<const char*, v_type()> r1 = int_;
+        v_type v;
+        BOOST_TEST(test_attr("1", r1, v) && v.which() == 1 && 
+            boost::get<int>(v) == 1);
+
+        typedef boost::optional<int> ov_type;
+        rule<const char*, ov_type()> r2 = int_;
+        ov_type ov;
+        BOOST_TEST(test_attr("1", r2, ov) && ov && boost::get<int>(ov) == 1);
+    }
+
+    // test handling of single element fusion sequences
+    {
+        using boost::fusion::vector;
+        using boost::fusion::at_c;
+        rule<const char*, vector<int>()> r = int_;
+
+        vector<int> v = 0;
+        BOOST_TEST(test_attr("1", r, v) && at_c<0>(v) == 1);
+    }
+
     return boost::report_errors();
 }