$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r62116 - trunk/libs/spirit/test/qi
From: hartmut.kaiser_at_[hidden]
Date: 2010-05-20 13:25:10
Author: hkaiser
Date: 2010-05-20 13:25:08 EDT (Thu, 20 May 2010)
New Revision: 62116
URL: http://svn.boost.org/trac/boost/changeset/62116
Log:
Spirit: Added tests to ensure numeric overflow leads to failing parse
Text files modified: 
   trunk/libs/spirit/test/qi/int.cpp  |    12 ++++++++++++                            
   trunk/libs/spirit/test/qi/rule.cpp |    10 ++++++++++                              
   trunk/libs/spirit/test/qi/uint.cpp |     6 ++++--                                  
   3 files changed, 26 insertions(+), 2 deletions(-)
Modified: trunk/libs/spirit/test/qi/int.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/int.cpp	(original)
+++ trunk/libs/spirit/test/qi/int.cpp	2010-05-20 13:25:08 EDT (Thu, 20 May 2010)
@@ -174,6 +174,18 @@
     }
 
     ///////////////////////////////////////////////////////////////////////////
+    // Check overflow is parse error
+    ///////////////////////////////////////////////////////////////////////////
+    {
+        boost::spirit::qi::int_parser<boost::int8_t> int8_;
+        boost::spirit::qi::int_parser<boost::int16_t> int16_;
+        char c;
+
+        BOOST_TEST(!test_attr("999", int8_, c));
+        BOOST_TEST(!test_attr("999", int16_, c));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
     //  int_parser<unused_type> tests
     ///////////////////////////////////////////////////////////////////////////
     {
Modified: trunk/libs/spirit/test/qi/rule.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/rule.cpp	(original)
+++ trunk/libs/spirit/test/qi/rule.cpp	2010-05-20 13:25:08 EDT (Thu, 20 May 2010)
@@ -39,6 +39,7 @@
     using boost::spirit::qi::locals;
     using boost::spirit::qi::rule;
     using boost::spirit::qi::int_;
+    using boost::spirit::qi::uint_;
     using boost::spirit::qi::fail;
     using boost::spirit::qi::on_error;
     using boost::spirit::qi::debug;
@@ -474,6 +475,15 @@
         BOOST_TEST(test_attr("1", r, v) && at_c<0>(v) == 1);
     }
 
+    {
+        using boost::fusion::vector;
+        using boost::fusion::at_c;
+        rule<const char*, vector<unsigned int>()> r = uint_;
+
+        vector<unsigned int> v = 0;
+        BOOST_TEST(test_attr("1", r, v) && at_c<0>(v) == 1);
+    }
+
     return boost::report_errors();
 }
 
Modified: trunk/libs/spirit/test/qi/uint.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/uint.cpp	(original)
+++ trunk/libs/spirit/test/qi/uint.cpp	2010-05-20 13:25:08 EDT (Thu, 20 May 2010)
@@ -202,10 +202,12 @@
     // Check overflow is parse error
     ///////////////////////////////////////////////////////////////////////////
     {
-        boost::spirit::qi::uint_parser<boost::uint8_t> uint_;
+        boost::spirit::qi::uint_parser<boost::uint8_t> uint8_;
+        boost::spirit::qi::uint_parser<boost::uint16_t> uint16_;
         boost::uint8_t u;
 
-        BOOST_TEST(!test_attr("999", uint_, u));
+        BOOST_TEST(!test_attr("999", uint8_, u));
+        BOOST_TEST(!test_attr("999", uint16_, u));
     }
 
     ///////////////////////////////////////////////////////////////////////////