$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: jmcintyre_at_[hidden]
Date: 2007-08-03 01:28:33
Author: jared
Date: 2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
New Revision: 38411
URL: http://svn.boost.org/trac/boost/changeset/38411
Log:
rearrange explore tests to split print from stream
Added:
   sandbox/explore/libs/explore/test/print/
   sandbox/explore/libs/explore/test/print/Jamfile.v2   (contents, props changed)
   sandbox/explore/libs/explore/test/print/basic_lg_format.hpp
      - copied, changed from r38410, /sandbox/explore/libs/explore/test/basic_lg_format.hpp
   sandbox/explore/libs/explore/test/print/boost_array.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/boost_range.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/boost_tuple.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/boost_variant.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/c_array.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/columnated.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/custom_format_simple.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/html_table_output.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/multi_dim_test.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/simple_types.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/std_deque.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/std_list.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/std_map.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/std_pair.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/std_set.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/std_vector.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/print/user_defined_container.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/shared/
   sandbox/explore/libs/explore/test/shared/Jamfile.v2   (contents, props changed)
   sandbox/explore/libs/explore/test/shared/is_assoc_iter.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/
   sandbox/explore/libs/explore/test/stream/Jamfile.v2   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/basic_lg_format.hpp
      - copied, changed from r38410, /sandbox/explore/libs/explore/test/basic_lg_format.hpp
   sandbox/explore/libs/explore/test/stream/boost_array.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/boost_range.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/boost_tuple.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/boost_variant.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/c_array.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/columnated.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/custom_format_simple.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/html_table_output.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/multi_dim_test.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/simple_types.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/std_deque.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/std_list.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/std_map.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/std_pair.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/std_set.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/std_vector.cpp   (contents, props changed)
   sandbox/explore/libs/explore/test/stream/user_defined_container.cpp   (contents, props changed)
Removed:
   sandbox/explore/libs/explore/test/basic_lg_format.hpp
   sandbox/explore/libs/explore/test/boost_array.cpp
   sandbox/explore/libs/explore/test/boost_range.cpp
   sandbox/explore/libs/explore/test/boost_tuple.cpp
   sandbox/explore/libs/explore/test/boost_variant.cpp
   sandbox/explore/libs/explore/test/c_array.cpp
   sandbox/explore/libs/explore/test/columnated.cpp
   sandbox/explore/libs/explore/test/custom_format_simple.cpp
   sandbox/explore/libs/explore/test/html_table_output.cpp
   sandbox/explore/libs/explore/test/is_assoc_iter.cpp
   sandbox/explore/libs/explore/test/multi_dim_test.cpp
   sandbox/explore/libs/explore/test/simple_types.cpp
   sandbox/explore/libs/explore/test/std_deque.cpp
   sandbox/explore/libs/explore/test/std_list.cpp
   sandbox/explore/libs/explore/test/std_map.cpp
   sandbox/explore/libs/explore/test/std_pair.cpp
   sandbox/explore/libs/explore/test/std_set.cpp
   sandbox/explore/libs/explore/test/std_vector.cpp
   sandbox/explore/libs/explore/test/user_defined_container.cpp
Text files modified: 
   sandbox/explore/libs/explore/test/Jamfile.v2                 |    40 ++++------------------------------------
   sandbox/explore/libs/explore/test/print/basic_lg_format.hpp  |    15 +++------------                         
   sandbox/explore/libs/explore/test/stream/basic_lg_format.hpp |    23 ++---------------------                 
   3 files changed, 9 insertions(+), 69 deletions(-)
Modified: sandbox/explore/libs/explore/test/Jamfile.v2
==============================================================================
--- sandbox/explore/libs/explore/test/Jamfile.v2	(original)
+++ sandbox/explore/libs/explore/test/Jamfile.v2	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -1,4 +1,4 @@
-# Boost.Print Library
+# Boost.Explore Library
 
 # Copyright Jared McIntyre 2007. Use, modification and
 # distribution is subject to the Boost Software License, Version
@@ -7,38 +7,6 @@
 
 # For more information, see http://www.boost.org
 
-# bring in rules for testing
-import testing ;
-
-project
-    : source-location .
-    : requirements
-    ;
-{
-  test-suite printing
-    :
-  [ run simple_types.cpp  ]
-  [ run c_array.cpp  ]
-  [ run user_defined_container.cpp  ]
-
-  [ run std_vector.cpp   ]
-  [ run std_deque.cpp   ]
-  [ run std_list.cpp   ]
-  [ run std_map.cpp   ]
-  [ run std_set.cpp   ]
-  [ run std_pair.cpp   ]
-
-  [ run boost_array.cpp   ]
-  [ run boost_tuple.cpp ]
-  [ run boost_variant.cpp ]
-
-  [ run boost_range.cpp ]
-
-  [ run custom_format_simple.cpp ]
-  [ run html_table_output.cpp ]
-  [ run multi_dim_test.cpp ]
-
-  [ run is_assoc_iter.cpp ]
-  [ run columnated.cpp ]
- ;
-}
+build-project shared//explore_shared_components ;
+build-project print//explore_print ;
+build-project stream//explore_stream ;
\ No newline at end of file
Deleted: sandbox/explore/libs/explore/test/basic_lg_format.hpp
==============================================================================
--- sandbox/explore/libs/explore/test/basic_lg_format.hpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,40 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/list.hpp>
-
-#include "../../../boost/explore/explore.hpp"
-
-struct basic_lg_range_format : explore::basic_range_format
-{
-	static char_ *opening() { return "<=";}
-	static char_ *closing() { return "=>";}
-	static char_ delimiter() { return '#';}
-};
-
-struct basic_lg_range_format_selector
-{
-	template< typename T>
-	struct range_format
-	{
-		typedef basic_lg_range_format type;
-	};
-};
-
-
-struct basic_lg_format : boost::mpl::list< basic_lg_range_format_selector> {};
-
-// for streaming
-std::ostream& basic_lg_stream_format(std::ostream& ostr)
-{
-    using namespace explore;
-    return ostr << start("<=") << separator("#") << explore::end("=>")
-                << assoc_start("<=") << assoc_separator("#") << assoc_end("=>");
-}
Deleted: sandbox/explore/libs/explore/test/boost_array.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/boost_array.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,148 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <boost/array.hpp>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_array_print_test )
-{
-    std::stringstream str_out;
-
-    boost::array<int,0> ai0;
-    explore::print(ai0, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    boost::array<int,1> ai1 = {1};
-    explore::print(ai1, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    boost::array<int,3> ai3 = {1, 2, 3};
-    explore::print(ai3, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    boost::array<int,3>::iterator itr = ai3.begin() + 2;
-
-    explore::print(ai3.begin(), itr, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(ai3.begin(), itr), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_array_stream_test )
-{
-    std::stringstream str_out;
-
-    boost::array<int,0> ai0;
-    str_out << ai0;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    boost::array<int,1> ai1 = {1};
-    str_out << ai1;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    boost::array<int,3> ai3 = {1, 2, 3};
-    str_out << ai3;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    boost::array<int,3>::iterator itr = ai3.begin() + 2;
-
-    str_out << explore::make_iterator_range(ai3.begin(), itr);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_array_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    boost::array<std::vector<int>,0> av0;
-    explore::print(av0, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    boost::array<std::vector<int>,1> av1 = {vi};
-    explore::print(av1, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    boost::array<std::vector<int>,3> av3 = {vi, vi, vi};
-    explore::print(av3, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    boost::array<std::vector<int>,3>::iterator itr = av3.begin() + 2;
-
-    explore::print(av3.begin(), itr, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(av3.begin(), itr), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_array_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    boost::array<std::vector<int>,0> av0;
-    str_out << av0;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    boost::array<std::vector<int>,1> av1 = {vi};
-    str_out << av1;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    boost::array<std::vector<int>,3> av3 = {vi, vi, vi};
-    str_out << av3;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    boost::array<std::vector<int>,3>::iterator itr = av3.begin() + 2;
-    str_out << explore::make_iterator_range(av3.begin(), itr);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
Deleted: sandbox/explore/libs/explore/test/boost_range.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/boost_range.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,77 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <sstream>
-#include <vector>
-#include <boost/range/iterator_range.hpp>
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( boost_range_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    explore::print(boost::make_iterator_range(vi), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    vi.push_back(1);
-    explore::print(boost::make_iterator_range(vi), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    vi.push_back(2);
-    vi.push_back(3);
-    explore::print(boost::make_iterator_range(vi), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-    explore::print(boost::make_iterator_range(vi.begin()+2, vi.end()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[3]");
-
-    str_out.str("");
-    explore::print(boost::make_iterator_range(vi.rbegin(), vi.rend()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[3, 2, 1]");
-}
-
-BOOST_AUTO_TEST_CASE( boost_range_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    str_out << explore::make_iterator_range(vi);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    vi.push_back(1);
-    str_out << explore::make_iterator_range(vi);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    vi.push_back(2);
-    vi.push_back(3);
-    str_out << explore::make_iterator_range(vi);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-    str_out << explore::make_iterator_range(vi.begin()+2, vi.end());
-    BOOST_CHECK_EQUAL(str_out.str(), "[3]");
-
-    str_out.str("");
-    str_out << explore::make_iterator_range(vi.rbegin(), vi.rend());
-    BOOST_CHECK_EQUAL(str_out.str(), "[3, 2, 1]");
-}
Deleted: sandbox/explore/libs/explore/test/boost_tuple.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/boost_tuple.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,40 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <boost/tuple/tuple.hpp>
-#include <boost/tuple/tuple_io.hpp>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_tuple_print_test )
-{
-    std::stringstream str_out;
-
-    boost::tuples::tuple<int, double> t(1, 3.14);
-    explore::print(t, str_out);
-
-    // I think things that already have a way to print should not change
-    //BOOST_CHECK_EQUAL(str_out.str(), "[1, 3.14]");
-    BOOST_CHECK_EQUAL(str_out.str(), "(1 3.14)");
-}
-
-BOOST_AUTO_TEST_CASE( basic_tuple_stream_test )
-{
-    std::stringstream str_out;
-
-    boost::tuples::tuple<int, double> t(1, 3.14);
-    str_out << t;
-    // I think things that already have a way to print should not change
-    //BOOST_CHECK_EQUAL(str_out.str(), "[1, 3.14]");
-    BOOST_CHECK_EQUAL(str_out.str(), "(1 3.14)");
-}
Deleted: sandbox/explore/libs/explore/test/boost_variant.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/boost_variant.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,70 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <boost/variant.hpp>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_variant_print_test )
-{
-    std::stringstream str_out;
-
-    boost::variant< int, std::string, std::vector<int> > varVal;
-
-    varVal = 1;
-    explore::print(varVal, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "1");
-
-    str_out.str("");
-
-    varVal = std::string("some string");
-    explore::print(varVal, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "some string");
-
-    str_out.str("");
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-    varVal = vi;
-    explore::print(varVal, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_variant_stream_test )
-{
-    std::stringstream str_out;
-
-    boost::variant< int, std::string, std::vector<int> > varVal;
-
-    varVal = 1;
-    str_out << varVal;
-    BOOST_CHECK_EQUAL(str_out.str(), "1");
-
-    str_out.str("");
-
-    varVal = std::string("some string");
-    str_out << varVal;
-    BOOST_CHECK_EQUAL(str_out.str(), "some string");
-
-    str_out.str("");
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-    varVal = vi;
-    str_out << varVal;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
Deleted: sandbox/explore/libs/explore/test/c_array.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/c_array.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,88 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_c_array_print_test )
-{
-    std::stringstream str_out;
-
-    int arri1[] = {1};
-    explore::print(arri1, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    int arri3[] = {1,2,3};
-    explore::print(arri3, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_c_array_stream_test )
-{
-    using namespace explore;
-    std::stringstream str_out;
-
-    int arri1[] = {1};
-    str_out << arri1;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    int arri3[] = {1,2,3};
-    str_out << arri3;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_c_array_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::vector<int> arrvi1[] = {vi};
-    explore::print(arrvi1, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    std::vector<int> arrvi3[] = {vi,vi,vi};
-    explore::print(arrvi3, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_c_array_stream_test )
-{
-    using namespace explore;
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::vector<int> arrvi1[] = {vi};
-    str_out << arrvi1;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    std::vector<int> arrvi3[] = {vi,vi,vi};
-    str_out << arrvi3;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-}
\ No newline at end of file
Deleted: sandbox/explore/libs/explore/test/columnated.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/columnated.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,75 +0,0 @@
-// Boost.Print library
-
-// Copyright Jeffrey Faust 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_columnate_print_test )
-{
-    //BOOST_FAIL("Test not implemented");
-}
-
-struct columnated_format
-{
-    columnated_format(std::size_t rows, std::size_t width) : m_rows(rows), m_width(width) {}
-    std::size_t m_rows;
-    std::size_t m_width;
-
-    friend std::ostream& operator<<(std::ostream& ostr, const columnated_format& f)
-    {
-        using namespace explore;
-        ostr << setrows(f.m_rows) << setitemwidth(f.m_width)
-             << separator("") << start("") << explore::end("");
-        return ostr;
-    }
-};
-
-BOOST_AUTO_TEST_CASE( basic_columnate_stream_test )
-{
-    using namespace explore;
-    std::stringstream str_out;
-    std::vector<int> vi;
-
-    for( int i = 0; i < 12; ++i )
-    {
-        vi.push_back(i);
-    }
-
-    str_out << setrows(3) << start("") << explore::end("") << vi;
-
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "0, 1, 2, \n"
-        "3, 4, 5, \n"
-        "6, 7, 8, \n"
-        "9, 10, 11");
-
-    str_out.str("");
-
-    str_out << setrows(3) << setitemwidth(5) << start("") << explore::end("") << vi;
-
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "    0,     1,     2, \n"
-        "    3,     4,     5, \n"
-        "    6,     7,     8, \n"
-        "    9,    10,    11");
-
-    str_out.str("");
-
-    str_out << columnated_format(3, 5) << vi;
-
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "    0    1    2\n"
-        "    3    4    5\n"
-        "    6    7    8\n"
-        "    9   10   11");
-}
Deleted: sandbox/explore/libs/explore/test/custom_format_simple.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/custom_format_simple.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,150 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <boost/range/iterator_range.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-#include "basic_lg_format.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_vector_custom_format_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
-
-    str_out.str("");
-
-    vi.push_back(1);
-    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1=>");
-
-    str_out.str("");
-
-    vi.push_back(2);
-    vi.push_back(3);
-    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
-
-    str_out.str("");
-
-    explore::print(vi.begin(), ++(++vi.begin()), str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2=>");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(vi.begin(), ++(++vi.begin())), str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2=>");
-
-    str_out.str("");
-
-    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
-}
-
-BOOST_AUTO_TEST_CASE( basic_vector_custom_format_stream_test )
-{
-    std::stringstream str_out;
-    str_out << basic_lg_stream_format;
-
-    std::vector<int> vi;
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
-
-    str_out.str("");
-
-    vi.push_back(1);
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1=>");
-
-    str_out.str("");
-
-    vi.push_back(2);
-    vi.push_back(3);
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(vi.begin(), ++(++vi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2=>");
-
-    str_out.str("");
-
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
-}
-
-BOOST_AUTO_TEST_CASE( basic_map_custom_format_print_test )
-{
-    std::stringstream str_out;
-
-    std::map<int,std::string> mis;
-    explore::print(mis, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(1, "first"));
-    explore::print(mis, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>=>");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(2, "second"));
-    mis.insert(std::make_pair(3, "third"));
-    explore::print(mis, str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>#<=3#third=>=>");
-
-    str_out.str("");
-
-    explore::print(mis.begin(), ++(++mis.begin()), str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>=>");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(mis.begin(), ++(++mis.begin())), str_out, basic_lg_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>=>");
-}
-
-BOOST_AUTO_TEST_CASE( basic_map_custom_format_stream_test )
-{
-    std::stringstream str_out;
-    str_out << basic_lg_stream_format;
-
-    std::map<int,std::string> mis;
-    str_out << mis;
-    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(1, "first"));
-    str_out << mis;
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>=>");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(2, "second"));
-    mis.insert(std::make_pair(3, "third"));
-
-    str_out << mis;
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>#<=3#third=>=>");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(mis.begin(), ++(++mis.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>=>");
-}
Deleted: sandbox/explore/libs/explore/test/html_table_output.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/html_table_output.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,92 +0,0 @@
-// Boost.Print library
-
-// Copyright Danny Havenith 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/html_table_format.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-BOOST_AUTO_TEST_CASE( vector_in_c_array_html_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::vector<int> arrvi1[] = {vi};
-    explore::print(arrvi1, str_out, explore::html_table_format(), explore::default_container_policy());
-
-    BOOST_CHECK_EQUAL(str_out.str(), 
-        "<table>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "</table>\n");
-
-    str_out.str("");
-
-    std::vector<int> arrvi3[] = {vi,vi,vi};
-    explore::print(arrvi3, str_out, explore::html_table_format(), explore::default_container_policy());
-    BOOST_CHECK_EQUAL(str_out.str(), 
-        "<table>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "</table>\n");
-}
-
-std::ostream& html_table_stream_format(std::ostream& ostr)
-{
-    using namespace explore;
-    ostr << start("<table>\n")
-         << separator("")
-         << explore::end("</table>\n");
-
-    ostr << start("<tr><td>", 1)
-         << separator("</td><td>", 1)
-         << explore::end("</td></tr>\n", 1);
-
-    return ostr;
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_c_array_html_stream_test )
-{
-    using namespace explore;
-    std::stringstream str_out;
-    str_out << html_table_stream_format;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::vector<int> arrvi1[] = {vi};
-    str_out << arrvi1;
-
-    BOOST_CHECK_EQUAL(str_out.str(), 
-        "<table>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "</table>\n");
-
-    str_out.str("");
-
-    std::vector<int> arrvi3[] = {vi,vi,vi};
-    str_out << arrvi3;
-    BOOST_CHECK_EQUAL(str_out.str(), 
-        "<table>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
-        "</table>\n");
-}
-
Deleted: sandbox/explore/libs/explore/test/is_assoc_iter.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/is_assoc_iter.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,39 +0,0 @@
-// Boost.Print library
-
-// Copyright Jeffrey Faust 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <sstream>
-#include <vector>
-#include <map>
-#include <list>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/is_assoc_iter.hpp"
-
-BOOST_AUTO_TEST_CASE( is_assoc_iter_test )
-{
-    bool mapHasAssocIter = explore::is_assoc_iter<std::map<int, double>::iterator>::type();
-    BOOST_CHECK(mapHasAssocIter);
-
-    bool multimapHasAssocIter = explore::is_assoc_iter<std::multimap<std::string, bool>::iterator>::type();
-    BOOST_CHECK(multimapHasAssocIter);
-
-    bool vectorHasAssocIter = explore::is_assoc_iter<std::vector<double>::iterator>::type();
-    BOOST_CHECK(!vectorHasAssocIter);
-
-    bool pointerHasAssocIter = explore::is_assoc_iter<int*>::type();
-    BOOST_CHECK(!pointerHasAssocIter);
-
-    bool pairHasAssocIter = explore::is_assoc_iter<std::pair<int, double> >::type();
-    BOOST_CHECK(!pairHasAssocIter);
-
-    bool listOfPairHasAssocIter = explore::is_assoc_iter<std::list<std::pair<int, double> >::iterator >::type();
-    BOOST_CHECK(!listOfPairHasAssocIter);
-}
Deleted: sandbox/explore/libs/explore/test/multi_dim_test.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/multi_dim_test.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,161 +0,0 @@
-// Boost.Print library
-
-// Copyright Jeffrey Faust 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-BOOST_AUTO_TEST_CASE( two_dimension_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    std::vector<std::vector<int> > vvi;
-
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-
-    explore::print(vvi, str_out/*, ??? */);
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|");
-}
-
-std::ostream& format_2d(std::ostream& ostr)
-{
-    using namespace explore;
-
-    // level 0
-    ostr << start("") << explore::end("") << separator("\n");
-
-    // level 1
-    ostr << start("|", 1) << explore::end("|", 1) << separator(" ", 1);
-
-    return ostr;
-}
-
-BOOST_AUTO_TEST_CASE( two_dimension_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    std::vector<std::vector<int> > vvi;
-
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-
-    str_out << format_2d << vvi;
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|");
-}
-
-BOOST_AUTO_TEST_CASE( three_dimension_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    std::vector<std::vector<int> > vvi;
-    std::vector<std::vector<std::vector<int> > > vvvi;
-
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-
-    vvvi.push_back(vvi);
-    vvvi.push_back(vvi);
-    vvvi.push_back(vvi);
-
-    explore::print(vvvi, str_out/*, ??? */);
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|"
-    );
-}
-
-std::ostream& format_3d(std::ostream& ostr)
-{
-    using namespace explore;
-
-    // level 0
-    ostr << start("") << explore::end("") << separator("\n\n");
-
-    // level 1
-    ostr << start("", 1) << explore::end("", 1) << separator("\n", 1);
-
-    // level 2
-    ostr << start("|", 2) << explore::end("|", 2) << separator(" ", 2);
-
-    return ostr;
-}
-
-BOOST_AUTO_TEST_CASE( three_dimension_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    std::vector<std::vector<int> > vvi;
-    std::vector<std::vector<std::vector<int> > > vvvi;
-
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-
-    vvvi.push_back(vvi);
-    vvvi.push_back(vvi);
-    vvvi.push_back(vvi);
-
-    str_out << format_3d << vvvi;
-    BOOST_CHECK_EQUAL(str_out.str(),
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "\n"
-        "|1 2 3|\n"
-        "|1 2 3|\n"
-        "|1 2 3|"
-    );
-}
Added: sandbox/explore/libs/explore/test/print/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/Jamfile.v2	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,43 @@
+# Boost.Explore Library
+
+# Copyright Jared McIntyre 2007. Use, modification and
+# distribution is 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)
+
+# For more information, see http://www.boost.org
+
+# bring in rules for testing
+import testing ;
+
+project
+    : source-location .
+    : requirements
+    ;
+{
+  test-suite explore_print
+    :
+  [ run simple_types.cpp  ]
+  [ run c_array.cpp  ]
+  [ run user_defined_container.cpp  ]
+
+  [ run std_vector.cpp   ]
+  [ run std_deque.cpp   ]
+  [ run std_list.cpp   ]
+  [ run std_map.cpp   ]
+  [ run std_set.cpp   ]
+  [ run std_pair.cpp   ]
+
+  [ run boost_array.cpp   ]
+  [ run boost_tuple.cpp ]
+  [ run boost_variant.cpp ]
+
+  [ run boost_range.cpp ]
+
+  [ run custom_format_simple.cpp ]
+  [ run html_table_output.cpp ]
+  [ run multi_dim_test.cpp ]
+
+  [ run columnated.cpp ]
+ ;
+}
Copied: sandbox/explore/libs/explore/test/print/basic_lg_format.hpp (from r38410, /sandbox/explore/libs/explore/test/basic_lg_format.hpp)
==============================================================================
--- /sandbox/explore/libs/explore/test/basic_lg_format.hpp	(original)
+++ sandbox/explore/libs/explore/test/print/basic_lg_format.hpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -1,4 +1,4 @@
-// Boost.Print library
+// Boost.Explore library
 
 // Copyright Jared McIntyre 2007. Use, modification and
 // distribution is subject to the Boost Software License, Version
@@ -10,7 +10,7 @@
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/list.hpp>
 
-#include "../../../boost/explore/explore.hpp"
+#include <boost/explore.hpp>
 
 struct basic_lg_range_format : explore::basic_range_format
 {
@@ -28,13 +28,4 @@
         };
 };
 
-
-struct basic_lg_format : boost::mpl::list< basic_lg_range_format_selector> {};
-
-// for streaming
-std::ostream& basic_lg_stream_format(std::ostream& ostr)
-{
-    using namespace explore;
-    return ostr << start("<=") << separator("#") << explore::end("=>")
-                << assoc_start("<=") << assoc_separator("#") << assoc_end("=>");
-}
+struct basic_lg_format : boost::mpl::list< basic_lg_range_format_selector> {};
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/boost_array.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/boost_array.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,86 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <boost/array.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_array_print_test )
+{
+    std::stringstream str_out;
+
+    boost::array<int,0> ai0;
+    explore::print(ai0, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    boost::array<int,1> ai1 = {1};
+    explore::print(ai1, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    boost::array<int,3> ai3 = {1, 2, 3};
+    explore::print(ai3, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    boost::array<int,3>::iterator itr = ai3.begin() + 2;
+
+    explore::print(ai3.begin(), itr, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(ai3.begin(), itr), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_array_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    boost::array<std::vector<int>,0> av0;
+    explore::print(av0, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    boost::array<std::vector<int>,1> av1 = {vi};
+    explore::print(av1, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    boost::array<std::vector<int>,3> av3 = {vi, vi, vi};
+    explore::print(av3, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    boost::array<std::vector<int>,3>::iterator itr = av3.begin() + 2;
+
+    explore::print(av3.begin(), itr, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(av3.begin(), itr), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/boost_range.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/boost_range.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,45 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <boost/range/iterator_range.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( boost_range_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    explore::print(boost::make_iterator_range(vi), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    vi.push_back(1);
+    explore::print(boost::make_iterator_range(vi), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    vi.push_back(2);
+    vi.push_back(3);
+    explore::print(boost::make_iterator_range(vi), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+    explore::print(boost::make_iterator_range(vi.begin()+2, vi.end()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[3]");
+
+    str_out.str("");
+    explore::print(boost::make_iterator_range(vi.rbegin(), vi.rend()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[3, 2, 1]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/boost_tuple.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/boost_tuple.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,28 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <boost/tuple/tuple.hpp>
+#include <boost/tuple/tuple_io.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_tuple_print_test )
+{
+    std::stringstream str_out;
+
+    boost::tuples::tuple<int, double> t(1, 3.14);
+    explore::print(t, str_out);
+
+    // I think things that already have a way to print should not change
+    //BOOST_CHECK_EQUAL(str_out.str(), "[1, 3.14]");
+    BOOST_CHECK_EQUAL(str_out.str(), "(1 3.14)");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/boost_variant.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/boost_variant.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,42 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <boost/variant.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_variant_print_test )
+{
+    std::stringstream str_out;
+
+    boost::variant< int, std::string, std::vector<int> > varVal;
+
+    varVal = 1;
+    explore::print(varVal, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "1");
+
+    str_out.str("");
+
+    varVal = std::string("some string");
+    explore::print(varVal, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "some string");
+
+    str_out.str("");
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+    varVal = vi;
+    explore::print(varVal, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/c_array.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/c_array.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,50 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_c_array_print_test )
+{
+    std::stringstream str_out;
+
+    int arri1[] = {1};
+    explore::print(arri1, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    int arri3[] = {1,2,3};
+    explore::print(arri3, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_c_array_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::vector<int> arrvi1[] = {vi};
+    explore::print(arrvi1, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    std::vector<int> arrvi3[] = {vi,vi,vi};
+    explore::print(arrvi3, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/columnated.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/columnated.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,35 @@
+// Boost.Explore library
+
+// Copyright Jeffrey Faust 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_columnate_print_test )
+{
+    //BOOST_FAIL("Test not implemented");
+}
+
+struct columnated_format
+{
+    columnated_format(std::size_t rows, std::size_t width) : m_rows(rows), m_width(width) {}
+    std::size_t m_rows;
+    std::size_t m_width;
+
+    friend std::ostream& operator<<(std::ostream& ostr, const columnated_format& f)
+    {
+        using namespace explore;
+        ostr << setrows(f.m_rows) << setitemwidth(f.m_width)
+             << separator("") << start("") << explore::end("");
+        return ostr;
+    }
+};
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/custom_format_simple.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/custom_format_simple.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,86 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+#include "basic_lg_format.hpp"
+
+BOOST_AUTO_TEST_CASE( basic_vector_custom_format_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
+
+    str_out.str("");
+
+    vi.push_back(1);
+    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1=>");
+
+    str_out.str("");
+
+    vi.push_back(2);
+    vi.push_back(3);
+    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
+
+    str_out.str("");
+
+    explore::print(vi.begin(), ++(++vi.begin()), str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2=>");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(vi.begin(), ++(++vi.begin())), str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2=>");
+
+    str_out.str("");
+
+    explore::print(vi, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
+}
+
+BOOST_AUTO_TEST_CASE( basic_map_custom_format_print_test )
+{
+    std::stringstream str_out;
+
+    std::map<int,std::string> mis;
+    explore::print(mis, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(1, "first"));
+    explore::print(mis, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>=>");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(2, "second"));
+    mis.insert(std::make_pair(3, "third"));
+    explore::print(mis, str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>#<=3#third=>=>");
+
+    str_out.str("");
+
+    explore::print(mis.begin(), ++(++mis.begin()), str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>=>");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(mis.begin(), ++(++mis.begin())), str_out, basic_lg_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>=>");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/html_table_output.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/html_table_output.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,45 @@
+// Boost.Explore library
+
+// Copyright Danny Havenith 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+#include <boost/explore/html_table_format.hpp>
+
+BOOST_AUTO_TEST_CASE( vector_in_c_array_html_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::vector<int> arrvi1[] = {vi};
+    explore::print(arrvi1, str_out, explore::html_table_format(), explore::default_container_policy());
+
+    BOOST_CHECK_EQUAL(str_out.str(), 
+        "<table>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "</table>\n");
+
+    str_out.str("");
+
+    std::vector<int> arrvi3[] = {vi,vi,vi};
+    explore::print(arrvi3, str_out, explore::html_table_format(), explore::default_container_policy());
+    BOOST_CHECK_EQUAL(str_out.str(), 
+        "<table>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "</table>\n");
+}
Added: sandbox/explore/libs/explore/test/print/multi_dim_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/multi_dim_test.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,73 @@
+// Boost.Explore library
+
+// Copyright Jeffrey Faust 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( two_dimension_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    std::vector<std::vector<int> > vvi;
+
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+
+    explore::print(vvi, str_out/*, ??? */);
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|");
+}
+
+BOOST_AUTO_TEST_CASE( three_dimension_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    std::vector<std::vector<int> > vvi;
+    std::vector<std::vector<std::vector<int> > > vvvi;
+
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+
+    vvvi.push_back(vvi);
+    vvvi.push_back(vvi);
+    vvvi.push_back(vvi);
+
+    explore::print(vvvi, str_out/*, ??? */);
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|"
+    );
+}
Added: sandbox/explore/libs/explore/test/print/simple_types.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/simple_types.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,123 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <boost/lexical_cast.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( int_print_test )
+{
+    std::stringstream str_out;
+    int i = 123;
+
+    explore::print(i, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "123");
+
+    str_out.str("");
+    
+    int* pi = NULL;
+    explore::print(pi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "null");
+    
+    str_out.str("");
+    
+    //pi = &i;
+    //explore::print(pi, str_out);
+    // technically, we should force this to be true, though
+    // it is highly unlikely to be false. Otherwise this test is only
+    // telling you whether the following is even valid.
+    //BOOST_CHECK(0 != boost::lexical_cast<std::string>((long)pi).compare("123"));
+
+    // this is not a useful test.  pointers should print out as pointers.
+    //BOOST_CHECK_EQUAL(str_out.str(), "123");
+}
+
+BOOST_AUTO_TEST_CASE( float_print_test )
+{
+    std::stringstream str_out;
+    float f = 1.234f;
+
+    explore::print(f, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "1.234");
+
+    // are these needed?
+    //BOOST_CHECK_MESSAGE(false, "Test min precision");
+    //BOOST_CHECK_MESSAGE(false, "Test max precision");
+}
+
+BOOST_AUTO_TEST_CASE( double_print_test )
+{
+    std::stringstream str_out;
+    double d = 1.2341234f;
+
+    str_out << std::setprecision(7);
+    explore::print(d, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "1.234123");
+
+    // are these needed?
+    //BOOST_CHECK_MESSAGE(false, "Test min precision");
+    //BOOST_CHECK_MESSAGE(false, "Test max precision");
+}
+
+BOOST_AUTO_TEST_CASE( bool_print_test )
+{
+    std::stringstream str_out;
+    bool b  = true;
+
+    str_out << std::boolalpha;
+    explore::print(b, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "true");
+
+    str_out.str("");
+    b  = false;
+
+    explore::print(b, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "false");
+}
+
+BOOST_AUTO_TEST_CASE( char_print_test )
+{
+    std::stringstream str_out;
+    char c = 'c';
+
+    explore::print(c, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "c");
+
+    str_out.str("");
+
+    char* pc = NULL;
+    explore::print(pc, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "null");
+    
+    str_out.str("");
+    
+    pc = "c";
+    explore::print(pc, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "c");
+    
+    str_out.str("");
+    
+    pc = "cat";
+    explore::print(pc, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "cat");
+}
+
+BOOST_AUTO_TEST_CASE( string_print_test )
+{
+    std::stringstream str_out;
+    std::string s = "some string";
+
+    explore::print(s, str_out);
+
+    BOOST_CHECK_EQUAL(str_out.str(), "some string");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/std_deque.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/std_deque.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,84 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <deque>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_deque_print_test )
+{
+    std::stringstream str_out;
+
+    std::deque<int> di;
+    explore::print(di, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    di.push_back(1);
+    explore::print(di, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    di.push_back(2);
+    di.push_back(3);
+    explore::print(di, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    explore::print(di.begin(), ++(++di.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(di.begin(), ++(++di.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( deque_in_deque_print_test )
+{
+    std::stringstream str_out;
+
+    std::deque<int> di;
+    di.push_back(1);
+    di.push_back(2);
+    di.push_back(3);
+
+    std::deque<std::deque<int> > ddi;
+    explore::print(ddi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    ddi.push_back(di);
+    explore::print(ddi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    ddi.push_back(di);
+    ddi.push_back(di);
+    explore::print(ddi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(ddi.begin(), ++(++ddi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(ddi.begin(), ++(++ddi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/std_list.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/std_list.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,85 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <list>
+#include <complex>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_list_print_test )
+{
+    std::stringstream str_out;
+
+    std::list<std::complex<double> > lc;
+    explore::print(lc, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    lc.push_back(std::complex<double>(0,1));
+    explore::print(lc, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1)]");
+
+    str_out.str("");
+
+    lc.push_back(std::complex<double>(2,3));
+    lc.push_back(std::complex<double>(4,5));
+    explore::print(lc, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3), (4,5)]");
+
+    str_out.str("");
+
+    explore::print(lc.begin(), ++(++lc.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3)]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(lc.begin(), ++(++lc.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3)]");
+}
+
+BOOST_AUTO_TEST_CASE( list_in_list_print_test )
+{
+    std::stringstream str_out;
+
+    std::list<int> li;
+    li.push_back(1);
+    li.push_back(2);
+    li.push_back(3);
+
+    std::list<std::list<int> > lli;
+    explore::print(lli, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    lli.push_back(li);
+    explore::print(lli, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    lli.push_back(li);
+    lli.push_back(li);
+    explore::print(lli, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(lli.begin(), ++(++lli.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(lli.begin(), ++(++lli.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/std_map.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/std_map.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,124 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <map>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_map_print_test )
+{
+    std::stringstream str_out;
+
+    std::map<int,std::string> mis;
+    explore::print(mis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(1, "first"));
+    explore::print(mis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(2, "second"));
+    mis.insert(std::make_pair(3, "third"));
+    explore::print(mis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second, 3:third]");
+
+    str_out.str("");
+
+    explore::print(mis.begin(), ++(++mis.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second]");
+
+    str_out.str("");
+
+    explore::print(explore::make_iterator_range(mis.begin(), ++(++mis.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second]");
+}
+
+BOOST_AUTO_TEST_CASE( basic_multimap_print_test )
+{
+    std::stringstream str_out;
+
+    std::multimap<int,std::string> mmis;
+    explore::print(mmis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    mmis.insert(std::make_pair(1, "first"));
+    explore::print(mmis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
+
+    str_out.str("");
+
+    mmis.insert(std::make_pair(1, "single"));
+    explore::print(mmis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
+
+    str_out.str("");
+
+    mmis.insert(std::make_pair(2, "second"));
+    mmis.insert(std::make_pair(3, "third"));
+    mmis.insert(std::make_pair(3, "triple"));
+    explore::print(mmis, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single, 2:second, 3:third, 3:triple]");
+
+    str_out.str("");
+
+    explore::print(mmis.begin(), ++(++mmis.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
+
+    str_out.str("");
+
+    explore::print(explore::make_iterator_range(mmis.begin(), ++(++mmis.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_map_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::map<int,std::vector<int> > mivi;
+    explore::print(mivi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    mivi.insert(std::make_pair(1, vi));
+    explore::print(mivi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3]]");
+
+    str_out.str("");
+
+    mivi.insert(std::make_pair(2, vi));
+    mivi.insert(std::make_pair(3, vi));
+    explore::print(mivi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3], 3:[1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(mivi.begin(), ++(++mivi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(explore::make_iterator_range(mivi.begin(), ++(++mivi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/std_pair.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/std_pair.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,60 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_pair_print_test )
+{
+    std::stringstream str_out;
+
+    std::pair<int,int> pi = std::make_pair(1,2);
+    explore::print(pi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+// This is an interesting case as it shows a stylistic difference between a vector of
+// pairs and a map. It also shows that if we allow this syntax, simple type and depth
+// formatters will need to be enhanced to meet this requirement.
+BOOST_AUTO_TEST_CASE( pair_in_vector_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<std::pair<int,int> > vpi;
+    explore::print(vpi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    std::pair<int,int> pi = std::make_pair(1,2);
+
+    vpi.push_back(pi);
+    explore::print(vpi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2]]");
+
+    str_out.str("");
+
+    vpi.push_back(pi);
+    vpi.push_back(pi);
+    explore::print(vpi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2], [1, 2]]");
+
+    str_out.str("");
+
+    explore::print(vpi.begin(), ++(++vpi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2]]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(vpi.begin(), ++(++vpi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2]]");
+}
Added: sandbox/explore/libs/explore/test/print/std_set.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/std_set.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,123 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <set>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_set_print_test )
+{
+    std::stringstream str_out;
+
+    std::set<int> si;
+    explore::print(si, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    si.insert(1);
+    explore::print(si, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    si.insert(2);
+    si.insert(3);
+    explore::print(si, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    explore::print(si.begin(), ++(++si.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(si.begin(), ++(++si.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( basic_multiset_print_test )
+{
+    std::stringstream str_out;
+
+    std::multiset<int> msi;
+    explore::print(msi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    msi.insert(1);
+    explore::print(msi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    msi.insert(1);
+    explore::print(msi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
+
+    str_out.str("");
+
+    msi.insert(2);
+    msi.insert(3);
+    msi.insert(3);
+    explore::print(msi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1, 2, 3, 3]");
+
+    str_out.str("");
+
+    explore::print(msi.begin(), ++(++msi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(msi.begin(), ++(++msi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_set_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::multiset<std::vector<int> > svi;
+    explore::print(svi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    svi.insert(vi);
+    explore::print(svi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    svi.insert(vi);
+    svi.insert(vi);
+    explore::print(svi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(svi.begin(), ++(++svi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(svi.begin(), ++(++svi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/std_vector.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/std_vector.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,102 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( vector_custom_format_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    explore::print(vi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    vi.push_back(1);
+    explore::print(vi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    vi.push_back(2);
+    vi.push_back(3);
+    explore::print(vi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    explore::print(vi.begin(), ++(++vi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(vi.begin(), ++(++vi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+
+    str_out.str("");
+
+    explore::print(vi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_vector_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::vector<std::vector<int> > vvi;
+    explore::print(vvi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    vvi.push_back(vi);
+    explore::print(vvi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    explore::print(vvi, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(vvi.begin(), ++(++vvi.begin()), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    explore::print(boost::make_iterator_range(vvi.begin(), ++(++vvi.begin())), str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
+
+// This test shows that you can use a string to cause the same outputs
+// as other print statements.
+BOOST_AUTO_TEST_CASE( vector_with_ugly_string_case_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<std::string> vs;
+    vs.push_back("[1, 2, 3], [1, 2, 3], [1, 2, 3]");
+    explore::print(vs, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/print/user_defined_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/print/user_defined_container.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,53 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+class user_vector
+{
+public:
+    user_vector()
+    {
+        m_vec.push_back(1);
+        m_vec.push_back(2);
+        m_vec.push_back(3);
+    }
+
+    std::vector<int>::const_iterator start() const
+    {
+        return m_vec.begin();
+    }
+
+    std::vector<int>::const_iterator finish() const
+    {
+        return m_vec.end();
+    }
+
+private:
+    std::vector<int> m_vec;
+};
+
+std::ostream& operator<<(std::ostream& ostr, const user_vector& u)
+{
+    return explore::stream_container(ostr, u.start(), u.finish());
+}
+
+BOOST_AUTO_TEST_CASE( user_defined_print_test )
+{
+    std::stringstream str_out;
+
+    user_vector v;
+    explore::print(v, str_out);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
+
Added: sandbox/explore/libs/explore/test/shared/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/shared/Jamfile.v2	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,22 @@
+# Boost.Explore Library
+
+# Copyright Jared McIntyre 2007. Use, modification and
+# distribution is 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)
+
+# For more information, see http://www.boost.org
+
+# bring in rules for testing
+import testing ;
+
+project
+    : source-location .
+    : requirements
+    ;
+{
+  test-suite explore_shared_components
+    :
+  [ run is_assoc_iter.cpp ]
+ ;
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/shared/is_assoc_iter.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/shared/is_assoc_iter.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,38 @@
+// Boost.Print library
+
+// Copyright Jeffrey Faust 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <map>
+#include <list>
+#include <boost/explore.hpp>
+#include <boost/explore/is_assoc_iter.hpp>
+
+BOOST_AUTO_TEST_CASE( is_assoc_iter_test )
+{
+    bool mapHasAssocIter = explore::is_assoc_iter<std::map<int, double>::iterator>::type();
+    BOOST_CHECK(mapHasAssocIter);
+
+    bool multimapHasAssocIter = explore::is_assoc_iter<std::multimap<std::string, bool>::iterator>::type();
+    BOOST_CHECK(multimapHasAssocIter);
+
+    bool vectorHasAssocIter = explore::is_assoc_iter<std::vector<double>::iterator>::type();
+    BOOST_CHECK(!vectorHasAssocIter);
+
+    bool pointerHasAssocIter = explore::is_assoc_iter<int*>::type();
+    BOOST_CHECK(!pointerHasAssocIter);
+
+    bool pairHasAssocIter = explore::is_assoc_iter<std::pair<int, double> >::type();
+    BOOST_CHECK(!pairHasAssocIter);
+
+    bool listOfPairHasAssocIter = explore::is_assoc_iter<std::list<std::pair<int, double> >::iterator >::type();
+    BOOST_CHECK(!listOfPairHasAssocIter);
+}
Deleted: sandbox/explore/libs/explore/test/simple_types.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/simple_types.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,207 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <iomanip>
-#include <boost/lexical_cast.hpp>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-BOOST_AUTO_TEST_CASE( int_print_test )
-{
-    std::stringstream str_out;
-    int i = 123;
-
-    explore::print(i, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "123");
-
-    str_out.str("");
-    
-    int* pi = NULL;
-    explore::print(pi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "null");
-    
-    str_out.str("");
-    
-    //pi = &i;
-    //explore::print(pi, str_out);
-    // technically, we should force this to be true, though
-    // it is highly unlikely to be false. Otherwise this test is only
-    // telling you whether the following is even valid.
-    //BOOST_CHECK(0 != boost::lexical_cast<std::string>((long)pi).compare("123"));
-
-    // this is not a useful test.  pointers should print out as pointers.
-    //BOOST_CHECK_EQUAL(str_out.str(), "123");
-}
-
-BOOST_AUTO_TEST_CASE( int_stream_test )
-{
-    std::stringstream str_out;
-    int i = 123;
-
-    str_out << i;
-    BOOST_CHECK_EQUAL(str_out.str(), "123");
-
-    str_out.str("");
-    int* pi = &i;
-
-    str_out << pi;
-    // technically, we should force this to be true, though
-    // it is highly unlikely to be false. Otherwise this test is only
-    // telling you whether the following is even valid.
-    //BOOST_CHECK(0 != boost::lexical_cast<std::string>((long)pi).compare("123"));
-    //BOOST_CHECK_EQUAL(str_out.str(), "123");
-}
-
-BOOST_AUTO_TEST_CASE( float_print_test )
-{
-    std::stringstream str_out;
-    float f = 1.234f;
-
-    explore::print(f, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "1.234");
-
-    // are these needed?
-    //BOOST_CHECK_MESSAGE(false, "Test min precision");
-    //BOOST_CHECK_MESSAGE(false, "Test max precision");
-}
-
-BOOST_AUTO_TEST_CASE( float_stream_test )
-{
-    std::stringstream str_out;
-    float f = 1.234f;
-
-    str_out << std::setprecision(4) << f;
-    BOOST_CHECK_EQUAL(str_out.str(), "1.234");
-
-    //BOOST_CHECK_MESSAGE(false, "Test min precision");
-    //BOOST_CHECK_MESSAGE(false, "Test max precision");
-}
-
-BOOST_AUTO_TEST_CASE( double_print_test )
-{
-    std::stringstream str_out;
-    double d = 1.2341234f;
-
-    str_out << std::setprecision(7);
-    explore::print(d, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "1.234123");
-
-    // are these needed?
-    //BOOST_CHECK_MESSAGE(false, "Test min precision");
-    //BOOST_CHECK_MESSAGE(false, "Test max precision");
-}
-
-BOOST_AUTO_TEST_CASE( double_stream_test )
-{
-    std::stringstream str_out;
-    double d = 1.2341234f;
-
-    str_out << std::setprecision(7) << d;
-    BOOST_CHECK_EQUAL(str_out.str(), "1.234123");
-
-    //BOOST_CHECK_MESSAGE(false, "Test min precision");
-    //BOOST_CHECK_MESSAGE(false, "Test max precision");
-}
-
-BOOST_AUTO_TEST_CASE( bool_print_test )
-{
-    std::stringstream str_out;
-    bool b  = true;
-
-    str_out << std::boolalpha;
-    explore::print(b, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "true");
-
-    str_out.str("");
-    b  = false;
-
-    explore::print(b, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "false");
-}
-
-BOOST_AUTO_TEST_CASE( bool_stream_test )
-{
-    std::stringstream str_out;
-    bool b  = true;
-
-    str_out << std::boolalpha << b;
-    BOOST_CHECK_EQUAL(str_out.str(), "true");
-
-    str_out.str("");
-    b  = false;
-
-    str_out << std::boolalpha << b;
-    BOOST_CHECK_EQUAL(str_out.str(), "false");
-}
-
-BOOST_AUTO_TEST_CASE( char_print_test )
-{
-    std::stringstream str_out;
-    char c = 'c';
-
-    explore::print(c, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "c");
-
-    str_out.str("");
-
-    char* pc = NULL;
-    explore::print(pc, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "null");
-    
-    str_out.str("");
-    
-    pc = "c";
-    explore::print(pc, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "c");
-    
-    str_out.str("");
-    
-    pc = "cat";
-    explore::print(pc, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "cat");
-}
-
-BOOST_AUTO_TEST_CASE( char_stream_test )
-{
-    std::stringstream str_out;
-    char c = 'c';
-
-    str_out << c;
-    BOOST_CHECK_EQUAL(str_out.str(), "c");
-
-    str_out.str("");
-    char* pc = "c";
-
-    str_out << pc;
-    BOOST_CHECK_EQUAL(str_out.str(), "c");
-}
-
-BOOST_AUTO_TEST_CASE( string_print_test )
-{
-    std::stringstream str_out;
-    std::string s = "some string";
-
-    explore::print(s, str_out);
-
-    BOOST_CHECK_EQUAL(str_out.str(), "some string");
-}
-
-BOOST_AUTO_TEST_CASE( string_stream_test )
-{
-    std::stringstream str_out;
-    std::string s = "some string";
-
-    str_out << s;
-
-    BOOST_CHECK_EQUAL(str_out.str(), "some string");
-}
Deleted: sandbox/explore/libs/explore/test/std_deque.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/std_deque.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,145 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <deque>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_deque_print_test )
-{
-    std::stringstream str_out;
-
-    std::deque<int> di;
-    explore::print(di, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    di.push_back(1);
-    explore::print(di, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    di.push_back(2);
-    di.push_back(3);
-    explore::print(di, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    explore::print(di.begin(), ++(++di.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(di.begin(), ++(++di.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_deque_stream_test )
-{
-    std::stringstream str_out;
-
-    std::deque<int> di;
-    str_out << di;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    di.push_back(1);
-    str_out << di;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    di.push_back(2);
-    di.push_back(3);
-    str_out << di;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(di.begin(), ++(++di.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( deque_in_deque_print_test )
-{
-    std::stringstream str_out;
-
-    std::deque<int> di;
-    di.push_back(1);
-    di.push_back(2);
-    di.push_back(3);
-
-    std::deque<std::deque<int> > ddi;
-    explore::print(ddi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    ddi.push_back(di);
-    explore::print(ddi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    ddi.push_back(di);
-    ddi.push_back(di);
-    explore::print(ddi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(ddi.begin(), ++(++ddi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(ddi.begin(), ++(++ddi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( deque_in_deque_stream_test )
-{
-    std::stringstream str_out;
-
-    std::deque<int> di;
-    di.push_back(1);
-    di.push_back(2);
-    di.push_back(3);
-
-    std::deque<std::deque<int> > ddi;
-    str_out << ddi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    ddi.push_back(di);
-    str_out << ddi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    ddi.push_back(di);
-    ddi.push_back(di);
-    str_out << ddi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(ddi.begin(), ++(++ddi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
Deleted: sandbox/explore/libs/explore/test/std_list.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/std_list.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,146 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <list>
-#include <complex>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_list_print_test )
-{
-    std::stringstream str_out;
-
-    std::list<std::complex<double> > lc;
-    explore::print(lc, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    lc.push_back(std::complex<double>(0,1));
-    explore::print(lc, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1)]");
-
-    str_out.str("");
-
-    lc.push_back(std::complex<double>(2,3));
-    lc.push_back(std::complex<double>(4,5));
-    explore::print(lc, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3), (4,5)]");
-
-    str_out.str("");
-
-    explore::print(lc.begin(), ++(++lc.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3)]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(lc.begin(), ++(++lc.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3)]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_list_stream_test )
-{
-    std::stringstream str_out;
-
-    std::list<std::complex<double> > lc;
-    str_out << lc;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    lc.push_back(std::complex<double>(0,1));
-    str_out << lc;
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1)]");
-
-    str_out.str("");
-
-    lc.push_back(std::complex<double>(2,3));
-    lc.push_back(std::complex<double>(4,5));
-    str_out << lc;
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3), (4,5)]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(lc.begin(), ++(++lc.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3)]");
-}
-
-BOOST_AUTO_TEST_CASE( list_in_list_print_test )
-{
-    std::stringstream str_out;
-
-    std::list<int> li;
-    li.push_back(1);
-    li.push_back(2);
-    li.push_back(3);
-
-    std::list<std::list<int> > lli;
-    explore::print(lli, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    lli.push_back(li);
-    explore::print(lli, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    lli.push_back(li);
-    lli.push_back(li);
-    explore::print(lli, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(lli.begin(), ++(++lli.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(lli.begin(), ++(++lli.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( list_in_list_stream_test )
-{
-    std::stringstream str_out;
-
-    std::list<int> li;
-    li.push_back(1);
-    li.push_back(2);
-    li.push_back(3);
-
-    std::list<std::list<int> > lli;
-    str_out << lli;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    lli.push_back(li);
-    str_out << lli;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    lli.push_back(li);
-    lli.push_back(li);
-    str_out << lli;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(lli.begin(), ++(++lli.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
Deleted: sandbox/explore/libs/explore/test/std_map.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/std_map.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,219 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include <map>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_map_print_test )
-{
-    std::stringstream str_out;
-
-    std::map<int,std::string> mis;
-    explore::print(mis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(1, "first"));
-    explore::print(mis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(2, "second"));
-    mis.insert(std::make_pair(3, "third"));
-    explore::print(mis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second, 3:third]");
-
-    str_out.str("");
-
-    explore::print(mis.begin(), ++(++mis.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second]");
-
-    str_out.str("");
-
-    explore::print(explore::make_iterator_range(mis.begin(), ++(++mis.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_map_stream_test )
-{
-    std::stringstream str_out;
-
-    std::map<int,std::string> mis;
-    str_out << mis;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(1, "first"));
-    str_out << mis;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
-
-    str_out.str("");
-
-    mis.insert(std::make_pair(2, "second"));
-    mis.insert(std::make_pair(3, "third"));
-    str_out << mis;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second, 3:third]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(mis.begin(), ++(++mis.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_multimap_print_test )
-{
-    std::stringstream str_out;
-
-    std::multimap<int,std::string> mmis;
-    explore::print(mmis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    mmis.insert(std::make_pair(1, "first"));
-    explore::print(mmis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
-
-    str_out.str("");
-
-    mmis.insert(std::make_pair(1, "single"));
-    explore::print(mmis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
-
-    str_out.str("");
-
-    mmis.insert(std::make_pair(2, "second"));
-    mmis.insert(std::make_pair(3, "third"));
-    mmis.insert(std::make_pair(3, "triple"));
-    explore::print(mmis, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single, 2:second, 3:third, 3:triple]");
-
-    str_out.str("");
-
-    explore::print(mmis.begin(), ++(++mmis.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
-
-    str_out.str("");
-
-    explore::print(explore::make_iterator_range(mmis.begin(), ++(++mmis.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_multimap_stream_test )
-{
-    std::stringstream str_out;
-
-    std::multimap<int,std::string> mmis;
-    str_out << mmis;;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    mmis.insert(std::make_pair(1, "first"));
-    str_out << mmis;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
-
-    str_out.str("");
-
-    mmis.insert(std::make_pair(1, "single"));
-    str_out << mmis;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
-
-    str_out.str("");
-
-    mmis.insert(std::make_pair(2, "second"));
-    mmis.insert(std::make_pair(3, "third"));
-    mmis.insert(std::make_pair(3, "triple"));
-    str_out << mmis;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single, 2:second, 3:third, 3:triple]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(mmis.begin(), ++(++mmis.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_map_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::map<int,std::vector<int> > mivi;
-    explore::print(mivi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    mivi.insert(std::make_pair(1, vi));
-    explore::print(mivi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3]]");
-
-    str_out.str("");
-
-    mivi.insert(std::make_pair(2, vi));
-    mivi.insert(std::make_pair(3, vi));
-    explore::print(mivi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3], 3:[1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(mivi.begin(), ++(++mivi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(explore::make_iterator_range(mivi.begin(), ++(++mivi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_map_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::map<int,std::vector<int> > mivi;
-    str_out << mivi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    mivi.insert(std::make_pair(1, vi));
-    str_out << mivi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3]]");
-
-    str_out.str("");
-
-    mivi.insert(std::make_pair(2, vi));
-    mivi.insert(std::make_pair(3, vi));
-    str_out << mivi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3], 3:[1, 2, 3]]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(mivi.begin(), ++(++mivi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3]]");
-}
Deleted: sandbox/explore/libs/explore/test/std_pair.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/std_pair.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,100 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_pair_print_test )
-{
-    std::stringstream str_out;
-
-    std::pair<int,int> pi = std::make_pair(1,2);
-    explore::print(pi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_pair_stream_test )
-{
-    std::stringstream str_out;
-
-    std::pair<int,int> pi = std::make_pair(1,2);
-    str_out << pi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-// This is an interesting case as it shows a stylistic difference between a vector of
-// pairs and a map. It also shows that if we allow this syntax, simple type and depth
-// formatters will need to be enhanced to meet this requirement.
-BOOST_AUTO_TEST_CASE( pair_in_vector_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<std::pair<int,int> > vpi;
-    explore::print(vpi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    std::pair<int,int> pi = std::make_pair(1,2);
-
-    vpi.push_back(pi);
-    explore::print(vpi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2]]");
-
-    str_out.str("");
-
-    vpi.push_back(pi);
-    vpi.push_back(pi);
-    explore::print(vpi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2], [1, 2]]");
-
-    str_out.str("");
-
-    explore::print(vpi.begin(), ++(++vpi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2]]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(vpi.begin(), ++(++vpi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2]]");
-}
-
-BOOST_AUTO_TEST_CASE( pair_in_vector_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<std::pair<int,int> > vpi;
-    str_out << vpi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    std::pair<int,int> pi = std::make_pair(1,2);
-
-    vpi.push_back(pi);
-    str_out << vpi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2]]");
-
-    str_out.str("");
-
-    vpi.push_back(pi);
-    vpi.push_back(pi);
-    str_out << vpi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2], [1, 2]]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(vpi.begin(), ++(++vpi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2]]");
-}
Deleted: sandbox/explore/libs/explore/test/std_set.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/std_set.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,218 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <string>
-#include <sstream>
-#include <set>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( basic_set_print_test )
-{
-    std::stringstream str_out;
-
-    std::set<int> si;
-    explore::print(si, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    si.insert(1);
-    explore::print(si, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    si.insert(2);
-    si.insert(3);
-    explore::print(si, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    explore::print(si.begin(), ++(++si.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(si.begin(), ++(++si.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_set_stream_test )
-{
-    std::stringstream str_out;
-
-    std::set<int> si;
-    str_out << si;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    si.insert(1);
-    str_out << si;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    si.insert(2);
-    si.insert(3);
-    str_out << si;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(si.begin(), ++(++si.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_multiset_print_test )
-{
-    std::stringstream str_out;
-
-    std::multiset<int> msi;
-    explore::print(msi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    msi.insert(1);
-    explore::print(msi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    msi.insert(1);
-    explore::print(msi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
-
-    str_out.str("");
-
-    msi.insert(2);
-    msi.insert(3);
-    msi.insert(3);
-    explore::print(msi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1, 2, 3, 3]");
-
-    str_out.str("");
-
-    explore::print(msi.begin(), ++(++msi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(msi.begin(), ++(++msi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_multiset_stream_test )
-{
-    std::stringstream str_out;
-
-    std::multiset<int> msi;
-    str_out << msi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    msi.insert(1);
-    str_out << msi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    msi.insert(1);
-    str_out << msi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
-
-    str_out.str("");
-
-    msi.insert(2);
-    msi.insert(3);
-    msi.insert(3);
-    str_out << msi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1, 2, 3, 3]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(msi.begin(), ++(++msi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");	
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_set_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::multiset<std::vector<int> > svi;
-    explore::print(svi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    svi.insert(vi);
-    explore::print(svi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    svi.insert(vi);
-    svi.insert(vi);
-    explore::print(svi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(svi.begin(), ++(++svi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(svi.begin(), ++(++svi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_set_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::multiset<std::vector<int> > svi;
-    str_out << svi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    svi.insert(vi);
-    str_out << svi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    svi.insert(vi);
-    svi.insert(vi);
-    str_out << svi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(svi.begin(), ++(++svi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
Deleted: sandbox/explore/libs/explore/test/std_vector.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/std_vector.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,173 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <boost/range/iterator_range.hpp>
-#include <string>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-#include "../../../boost/explore/iterator_range.hpp"
-
-BOOST_AUTO_TEST_CASE( vector_custom_format_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    explore::print(vi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    vi.push_back(1);
-    explore::print(vi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    vi.push_back(2);
-    vi.push_back(3);
-    explore::print(vi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    explore::print(vi.begin(), ++(++vi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(vi.begin(), ++(++vi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-
-    str_out.str("");
-
-    explore::print(vi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
-
-BOOST_AUTO_TEST_CASE( basic_vector_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    vi.push_back(1);
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
-
-    str_out.str("");
-
-    vi.push_back(2);
-    vi.push_back(3);
-    str_out << vi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(vi.begin(), ++(++vi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_vector_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::vector<std::vector<int> > vvi;
-    explore::print(vvi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    vvi.push_back(vi);
-    explore::print(vvi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-    explore::print(vvi, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(vvi.begin(), ++(++vvi.begin()), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    explore::print(boost::make_iterator_range(vvi.begin(), ++(++vvi.begin())), str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_in_vector_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<int> vi;
-    vi.push_back(1);
-    vi.push_back(2);
-    vi.push_back(3);
-
-    std::vector<std::vector<int> > vvi;
-    str_out << vvi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[]");
-
-    str_out.str("");
-
-    vvi.push_back(vi);
-    str_out << vvi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
-
-    str_out.str("");
-
-    vvi.push_back(vi);
-    vvi.push_back(vi);
-    str_out << vvi;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-
-    str_out.str("");
-
-    str_out << explore::make_iterator_range(vvi.begin(), ++(++vvi.begin()));
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
-}
-
-// This test shows that you can use a string to cause the same outputs
-// as other print statements.
-BOOST_AUTO_TEST_CASE( vector_with_ugly_string_case_print_test )
-{
-    std::stringstream str_out;
-
-    std::vector<std::string> vs;
-    vs.push_back("[1, 2, 3], [1, 2, 3], [1, 2, 3]");
-    explore::print(vs, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-}
-
-BOOST_AUTO_TEST_CASE( vector_with_ugly_string_case_stream_test )
-{
-    std::stringstream str_out;
-
-    std::vector<std::string> vs;
-    vs.push_back("[1, 2, 3], [1, 2, 3], [1, 2, 3]");
-    str_out << vs;
-    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
-}
Added: sandbox/explore/libs/explore/test/stream/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/Jamfile.v2	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,43 @@
+# Boost.Explore Library
+
+# Copyright Jared McIntyre 2007. Use, modification and
+# distribution is 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)
+
+# For more information, see http://www.boost.org
+
+# bring in rules for testing
+import testing ;
+
+project
+    : source-location .
+    : requirements
+    ;
+{
+  test-suite explore_stream
+    :
+  [ run simple_types.cpp  ]
+  [ run c_array.cpp  ]
+  [ run user_defined_container.cpp  ]
+
+  [ run std_vector.cpp   ]
+  [ run std_deque.cpp   ]
+  [ run std_list.cpp   ]
+  [ run std_map.cpp   ]
+  [ run std_set.cpp   ]
+  [ run std_pair.cpp   ]
+
+  [ run boost_array.cpp   ]
+  [ run boost_tuple.cpp ]
+  [ run boost_variant.cpp ]
+
+  [ run boost_range.cpp ]
+
+  [ run custom_format_simple.cpp ]
+  [ run html_table_output.cpp ]
+  [ run multi_dim_test.cpp ]
+
+  [ run columnated.cpp ]
+ ;
+}
Copied: sandbox/explore/libs/explore/test/stream/basic_lg_format.hpp (from r38410, /sandbox/explore/libs/explore/test/basic_lg_format.hpp)
==============================================================================
--- /sandbox/explore/libs/explore/test/basic_lg_format.hpp	(original)
+++ sandbox/explore/libs/explore/test/stream/basic_lg_format.hpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -1,4 +1,4 @@
-// Boost.Print library
+// Boost.Explore library
 
 // Copyright Jared McIntyre 2007. Use, modification and
 // distribution is subject to the Boost Software License, Version
@@ -10,26 +10,7 @@
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/list.hpp>
 
-#include "../../../boost/explore/explore.hpp"
-
-struct basic_lg_range_format : explore::basic_range_format
-{
-	static char_ *opening() { return "<=";}
-	static char_ *closing() { return "=>";}
-	static char_ delimiter() { return '#';}
-};
-
-struct basic_lg_range_format_selector
-{
-	template< typename T>
-	struct range_format
-	{
-		typedef basic_lg_range_format type;
-	};
-};
-
-
-struct basic_lg_format : boost::mpl::list< basic_lg_range_format_selector> {};
+#include <boost/explore.hpp>
 
 // for streaming
 std::ostream& basic_lg_stream_format(std::ostream& ostr)
Added: sandbox/explore/libs/explore/test/stream/boost_array.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/boost_array.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,75 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <boost/array.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_array_stream_test )
+{
+    std::stringstream str_out;
+
+    boost::array<int,0> ai0;
+    str_out << ai0;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    boost::array<int,1> ai1 = {1};
+    str_out << ai1;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    boost::array<int,3> ai3 = {1, 2, 3};
+    str_out << ai3;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    boost::array<int,3>::iterator itr = ai3.begin() + 2;
+
+    str_out << explore::make_iterator_range(ai3.begin(), itr);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_array_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    boost::array<std::vector<int>,0> av0;
+    str_out << av0;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    boost::array<std::vector<int>,1> av1 = {vi};
+    str_out << av1;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    boost::array<std::vector<int>,3> av3 = {vi, vi, vi};
+    str_out << av3;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    boost::array<std::vector<int>,3>::iterator itr = av3.begin() + 2;
+    str_out << explore::make_iterator_range(av3.begin(), itr);
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
Added: sandbox/explore/libs/explore/test/stream/boost_range.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/boost_range.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,45 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <boost/range/iterator_range.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( boost_range_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    str_out << explore::make_iterator_range(vi);
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    vi.push_back(1);
+    str_out << explore::make_iterator_range(vi);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    vi.push_back(2);
+    vi.push_back(3);
+    str_out << explore::make_iterator_range(vi);
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+    str_out << explore::make_iterator_range(vi.begin()+2, vi.end());
+    BOOST_CHECK_EQUAL(str_out.str(), "[3]");
+
+    str_out.str("");
+    str_out << explore::make_iterator_range(vi.rbegin(), vi.rend());
+    BOOST_CHECK_EQUAL(str_out.str(), "[3, 2, 1]");
+}
Added: sandbox/explore/libs/explore/test/stream/boost_tuple.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/boost_tuple.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,27 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <boost/tuple/tuple.hpp>
+#include <boost/tuple/tuple_io.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_tuple_stream_test )
+{
+    std::stringstream str_out;
+
+    boost::tuples::tuple<int, double> t(1, 3.14);
+    str_out << t;
+    // I think things that already have a way to print should not change
+    //BOOST_CHECK_EQUAL(str_out.str(), "[1, 3.14]");
+    BOOST_CHECK_EQUAL(str_out.str(), "(1 3.14)");
+}
Added: sandbox/explore/libs/explore/test/stream/boost_variant.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/boost_variant.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,42 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <boost/variant.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_variant_stream_test )
+{
+    std::stringstream str_out;
+
+    boost::variant< int, std::string, std::vector<int> > varVal;
+
+    varVal = 1;
+    str_out << varVal;
+    BOOST_CHECK_EQUAL(str_out.str(), "1");
+
+    str_out.str("");
+
+    varVal = std::string("some string");
+    str_out << varVal;
+    BOOST_CHECK_EQUAL(str_out.str(), "some string");
+
+    str_out.str("");
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+    varVal = vi;
+    str_out << varVal;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
Added: sandbox/explore/libs/explore/test/stream/c_array.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/c_array.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,52 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_c_array_stream_test )
+{
+    using namespace explore;
+    std::stringstream str_out;
+
+    int arri1[] = {1};
+    str_out << arri1;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    int arri3[] = {1,2,3};
+    str_out << arri3;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_c_array_stream_test )
+{
+    using namespace explore;
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::vector<int> arrvi1[] = {vi};
+    str_out << arrvi1;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    std::vector<int> arrvi3[] = {vi,vi,vi};
+    str_out << arrvi3;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+}
\ No newline at end of file
Added: sandbox/explore/libs/explore/test/stream/columnated.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/columnated.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,70 @@
+// Boost.Explore library
+
+// Copyright Jeffrey Faust 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+struct columnated_format
+{
+    columnated_format(std::size_t rows, std::size_t width) : m_rows(rows), m_width(width) {}
+    std::size_t m_rows;
+    std::size_t m_width;
+
+    friend std::ostream& operator<<(std::ostream& ostr, const columnated_format& f)
+    {
+        using namespace explore;
+        ostr << setrows(f.m_rows) << setitemwidth(f.m_width)
+             << separator("") << start("") << explore::end("");
+        return ostr;
+    }
+};
+
+BOOST_AUTO_TEST_CASE( basic_columnate_stream_test )
+{
+    using namespace explore;
+    std::stringstream str_out;
+    std::vector<int> vi;
+
+    for( int i = 0; i < 12; ++i )
+    {
+        vi.push_back(i);
+    }
+
+    str_out << setrows(3) << start("") << explore::end("") << vi;
+
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "0, 1, 2, \n"
+        "3, 4, 5, \n"
+        "6, 7, 8, \n"
+        "9, 10, 11");
+
+    str_out.str("");
+
+    str_out << setrows(3) << setitemwidth(5) << start("") << explore::end("") << vi;
+
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "    0,     1,     2, \n"
+        "    3,     4,     5, \n"
+        "    6,     7,     8, \n"
+        "    9,    10,    11");
+
+    str_out.str("");
+
+    str_out << columnated_format(3, 5) << vi;
+
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "    0    1    2\n"
+        "    3    4    5\n"
+        "    6    7    8\n"
+        "    9   10   11");
+}
Added: sandbox/explore/libs/explore/test/stream/custom_format_simple.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/custom_format_simple.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,79 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+#include "basic_lg_format.hpp"
+
+BOOST_AUTO_TEST_CASE( basic_vector_custom_format_stream_test )
+{
+    std::stringstream str_out;
+    str_out << basic_lg_stream_format;
+
+    std::vector<int> vi;
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
+
+    str_out.str("");
+
+    vi.push_back(1);
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1=>");
+
+    str_out.str("");
+
+    vi.push_back(2);
+    vi.push_back(3);
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(vi.begin(), ++(++vi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2=>");
+
+    str_out.str("");
+
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "<=1#2#3=>");
+}
+
+BOOST_AUTO_TEST_CASE( basic_map_custom_format_stream_test )
+{
+    std::stringstream str_out;
+    str_out << basic_lg_stream_format;
+
+    std::map<int,std::string> mis;
+    str_out << mis;
+    BOOST_CHECK_EQUAL(str_out.str(), "<==>");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(1, "first"));
+    str_out << mis;
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>=>");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(2, "second"));
+    mis.insert(std::make_pair(3, "third"));
+
+    str_out << mis;
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>#<=3#third=>=>");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(mis.begin(), ++(++mis.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "<=<=1#first=>#<=2#second=>=>");
+}
Added: sandbox/explore/libs/explore/test/stream/html_table_output.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/html_table_output.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,61 @@
+// Boost.Explore library
+
+// Copyright Danny Havenith 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+std::ostream& html_table_stream_format(std::ostream& ostr)
+{
+    using namespace explore;
+    ostr << start("<table>\n")
+         << separator("")
+         << explore::end("</table>\n");
+
+    ostr << start("<tr><td>", 1)
+         << separator("</td><td>", 1)
+         << explore::end("</td></tr>\n", 1);
+
+    return ostr;
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_c_array_html_stream_test )
+{
+    using namespace explore;
+    std::stringstream str_out;
+    str_out << html_table_stream_format;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::vector<int> arrvi1[] = {vi};
+    str_out << arrvi1;
+
+    BOOST_CHECK_EQUAL(str_out.str(), 
+        "<table>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "</table>\n");
+
+    str_out.str("");
+
+    std::vector<int> arrvi3[] = {vi,vi,vi};
+    str_out << arrvi3;
+    BOOST_CHECK_EQUAL(str_out.str(), 
+        "<table>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "<tr><td>1</td><td>2</td><td>3</td></tr>\n"
+        "</table>\n");
+}
+
Added: sandbox/explore/libs/explore/test/stream/multi_dim_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/multi_dim_test.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,160 @@
+// Boost.Explore library
+
+// Copyright Jeffrey Faust 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( two_dimension_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    std::vector<std::vector<int> > vvi;
+
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+
+    explore::print(vvi, str_out/*, ??? */);
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|");
+}
+
+std::ostream& format_2d(std::ostream& ostr)
+{
+    using namespace explore;
+
+    // level 0
+    ostr << start("") << explore::end("") << separator("\n");
+
+    // level 1
+    ostr << start("|", 1) << explore::end("|", 1) << separator(" ", 1);
+
+    return ostr;
+}
+
+BOOST_AUTO_TEST_CASE( two_dimension_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    std::vector<std::vector<int> > vvi;
+
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+
+    str_out << format_2d << vvi;
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|");
+}
+
+BOOST_AUTO_TEST_CASE( three_dimension_print_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    std::vector<std::vector<int> > vvi;
+    std::vector<std::vector<std::vector<int> > > vvvi;
+
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+
+    vvvi.push_back(vvi);
+    vvvi.push_back(vvi);
+    vvvi.push_back(vvi);
+
+    explore::print(vvvi, str_out/*, ??? */);
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|"
+    );
+}
+
+std::ostream& format_3d(std::ostream& ostr)
+{
+    using namespace explore;
+
+    // level 0
+    ostr << start("") << explore::end("") << separator("\n\n");
+
+    // level 1
+    ostr << start("", 1) << explore::end("", 1) << separator("\n", 1);
+
+    // level 2
+    ostr << start("|", 2) << explore::end("|", 2) << separator(" ", 2);
+
+    return ostr;
+}
+
+BOOST_AUTO_TEST_CASE( three_dimension_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    std::vector<std::vector<int> > vvi;
+    std::vector<std::vector<std::vector<int> > > vvvi;
+
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+
+    vvvi.push_back(vvi);
+    vvvi.push_back(vvi);
+    vvvi.push_back(vvi);
+
+    str_out << format_3d << vvvi;
+    BOOST_CHECK_EQUAL(str_out.str(),
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "\n"
+        "|1 2 3|\n"
+        "|1 2 3|\n"
+        "|1 2 3|"
+    );
+}
Added: sandbox/explore/libs/explore/test/stream/simple_types.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/simple_types.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,99 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <boost/lexical_cast.hpp>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( int_stream_test )
+{
+    std::stringstream str_out;
+    int i = 123;
+
+    str_out << i;
+    BOOST_CHECK_EQUAL(str_out.str(), "123");
+
+    str_out.str("");
+    int* pi = &i;
+
+    str_out << pi;
+    // technically, we should force this to be true, though
+    // it is highly unlikely to be false. Otherwise this test is only
+    // telling you whether the following is even valid.
+    //BOOST_CHECK(0 != boost::lexical_cast<std::string>((long)pi).compare("123"));
+    //BOOST_CHECK_EQUAL(str_out.str(), "123");
+}
+
+BOOST_AUTO_TEST_CASE( float_stream_test )
+{
+    std::stringstream str_out;
+    float f = 1.234f;
+
+    str_out << std::setprecision(4) << f;
+    BOOST_CHECK_EQUAL(str_out.str(), "1.234");
+
+    //BOOST_CHECK_MESSAGE(false, "Test min precision");
+    //BOOST_CHECK_MESSAGE(false, "Test max precision");
+}
+
+BOOST_AUTO_TEST_CASE( double_stream_test )
+{
+    std::stringstream str_out;
+    double d = 1.2341234f;
+
+    str_out << std::setprecision(7) << d;
+    BOOST_CHECK_EQUAL(str_out.str(), "1.234123");
+
+    //BOOST_CHECK_MESSAGE(false, "Test min precision");
+    //BOOST_CHECK_MESSAGE(false, "Test max precision");
+}
+
+BOOST_AUTO_TEST_CASE( bool_stream_test )
+{
+    std::stringstream str_out;
+    bool b  = true;
+
+    str_out << std::boolalpha << b;
+    BOOST_CHECK_EQUAL(str_out.str(), "true");
+
+    str_out.str("");
+    b  = false;
+
+    str_out << std::boolalpha << b;
+    BOOST_CHECK_EQUAL(str_out.str(), "false");
+}
+
+BOOST_AUTO_TEST_CASE( char_stream_test )
+{
+    std::stringstream str_out;
+    char c = 'c';
+
+    str_out << c;
+    BOOST_CHECK_EQUAL(str_out.str(), "c");
+
+    str_out.str("");
+    char* pc = "c";
+
+    str_out << pc;
+    BOOST_CHECK_EQUAL(str_out.str(), "c");
+}
+
+BOOST_AUTO_TEST_CASE( string_stream_test )
+{
+    std::stringstream str_out;
+    std::string s = "some string";
+
+    str_out << s;
+
+    BOOST_CHECK_EQUAL(str_out.str(), "some string");
+}
Added: sandbox/explore/libs/explore/test/stream/std_deque.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/std_deque.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,74 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <deque>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_deque_stream_test )
+{
+    std::stringstream str_out;
+
+    std::deque<int> di;
+    str_out << di;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    di.push_back(1);
+    str_out << di;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    di.push_back(2);
+    di.push_back(3);
+    str_out << di;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(di.begin(), ++(++di.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( deque_in_deque_stream_test )
+{
+    std::stringstream str_out;
+
+    std::deque<int> di;
+    di.push_back(1);
+    di.push_back(2);
+    di.push_back(3);
+
+    std::deque<std::deque<int> > ddi;
+    str_out << ddi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    ddi.push_back(di);
+    str_out << ddi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    ddi.push_back(di);
+    ddi.push_back(di);
+    str_out << ddi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(ddi.begin(), ++(++ddi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
Added: sandbox/explore/libs/explore/test/stream/std_list.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/std_list.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,75 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <list>
+#include <complex>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_list_stream_test )
+{
+    std::stringstream str_out;
+
+    std::list<std::complex<double> > lc;
+    str_out << lc;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    lc.push_back(std::complex<double>(0,1));
+    str_out << lc;
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1)]");
+
+    str_out.str("");
+
+    lc.push_back(std::complex<double>(2,3));
+    lc.push_back(std::complex<double>(4,5));
+    str_out << lc;
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3), (4,5)]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(lc.begin(), ++(++lc.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[(0,1), (2,3)]");
+}
+
+BOOST_AUTO_TEST_CASE( list_in_list_stream_test )
+{
+    std::stringstream str_out;
+
+    std::list<int> li;
+    li.push_back(1);
+    li.push_back(2);
+    li.push_back(3);
+
+    std::list<std::list<int> > lli;
+    str_out << lli;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    lli.push_back(li);
+    str_out << lli;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    lli.push_back(li);
+    lli.push_back(li);
+    str_out << lli;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(lli.begin(), ++(++lli.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
Added: sandbox/explore/libs/explore/test/stream/std_map.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/std_map.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,109 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <map>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_map_stream_test )
+{
+    std::stringstream str_out;
+
+    std::map<int,std::string> mis;
+    str_out << mis;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(1, "first"));
+    str_out << mis;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
+
+    str_out.str("");
+
+    mis.insert(std::make_pair(2, "second"));
+    mis.insert(std::make_pair(3, "third"));
+    str_out << mis;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second, 3:third]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(mis.begin(), ++(++mis.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 2:second]");
+}
+
+BOOST_AUTO_TEST_CASE( basic_multimap_stream_test )
+{
+    std::stringstream str_out;
+
+    std::multimap<int,std::string> mmis;
+    str_out << mmis;;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    mmis.insert(std::make_pair(1, "first"));
+    str_out << mmis;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first]");
+
+    str_out.str("");
+
+    mmis.insert(std::make_pair(1, "single"));
+    str_out << mmis;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
+
+    str_out.str("");
+
+    mmis.insert(std::make_pair(2, "second"));
+    mmis.insert(std::make_pair(3, "third"));
+    mmis.insert(std::make_pair(3, "triple"));
+    str_out << mmis;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single, 2:second, 3:third, 3:triple]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(mmis.begin(), ++(++mmis.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:first, 1:single]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_map_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::map<int,std::vector<int> > mivi;
+    str_out << mivi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    mivi.insert(std::make_pair(1, vi));
+    str_out << mivi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3]]");
+
+    str_out.str("");
+
+    mivi.insert(std::make_pair(2, vi));
+    mivi.insert(std::make_pair(3, vi));
+    str_out << mivi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3], 3:[1, 2, 3]]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(mivi.begin(), ++(++mivi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1:[1, 2, 3], 2:[1, 2, 3]]");
+}
Added: sandbox/explore/libs/explore/test/stream/std_pair.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/std_pair.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,52 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_pair_stream_test )
+{
+    std::stringstream str_out;
+
+    std::pair<int,int> pi = std::make_pair(1,2);
+    str_out << pi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( pair_in_vector_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<std::pair<int,int> > vpi;
+    str_out << vpi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    std::pair<int,int> pi = std::make_pair(1,2);
+
+    vpi.push_back(pi);
+    str_out << vpi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2]]");
+
+    str_out.str("");
+
+    vpi.push_back(pi);
+    vpi.push_back(pi);
+    str_out << vpi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2], [1, 2]]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(vpi.begin(), ++(++vpi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2], [1, 2]]");
+}
Added: sandbox/explore/libs/explore/test/stream/std_set.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/std_set.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,108 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <string>
+#include <sstream>
+#include <set>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_set_stream_test )
+{
+    std::stringstream str_out;
+
+    std::set<int> si;
+    str_out << si;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    si.insert(1);
+    str_out << si;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    si.insert(2);
+    si.insert(3);
+    str_out << si;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(si.begin(), ++(++si.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( basic_multiset_stream_test )
+{
+    std::stringstream str_out;
+
+    std::multiset<int> msi;
+    str_out << msi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    msi.insert(1);
+    str_out << msi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    msi.insert(1);
+    str_out << msi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");
+
+    str_out.str("");
+
+    msi.insert(2);
+    msi.insert(3);
+    msi.insert(3);
+    str_out << msi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1, 2, 3, 3]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(msi.begin(), ++(++msi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 1]");	
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_set_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::multiset<std::vector<int> > svi;
+    str_out << svi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    svi.insert(vi);
+    str_out << svi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    svi.insert(vi);
+    svi.insert(vi);
+    str_out << svi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(svi.begin(), ++(++svi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
Added: sandbox/explore/libs/explore/test/stream/std_vector.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/std_vector.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,85 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+BOOST_AUTO_TEST_CASE( basic_vector_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    vi.push_back(1);
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1]");
+
+    str_out.str("");
+
+    vi.push_back(2);
+    vi.push_back(3);
+    str_out << vi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(vi.begin(), ++(++vi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_in_vector_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<int> vi;
+    vi.push_back(1);
+    vi.push_back(2);
+    vi.push_back(3);
+
+    std::vector<std::vector<int> > vvi;
+    str_out << vvi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[]");
+
+    str_out.str("");
+
+    vvi.push_back(vi);
+    str_out << vvi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3]]");
+
+    str_out.str("");
+
+    vvi.push_back(vi);
+    vvi.push_back(vi);
+    str_out << vvi;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+
+    str_out.str("");
+
+    str_out << explore::make_iterator_range(vvi.begin(), ++(++vvi.begin()));
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3]]");
+}
+
+BOOST_AUTO_TEST_CASE( vector_with_ugly_string_case_stream_test )
+{
+    std::stringstream str_out;
+
+    std::vector<std::string> vs;
+    vs.push_back("[1, 2, 3], [1, 2, 3], [1, 2, 3]");
+    str_out << vs;
+    BOOST_CHECK_EQUAL(str_out.str(), "[[1, 2, 3], [1, 2, 3], [1, 2, 3]]");
+}
Added: sandbox/explore/libs/explore/test/stream/user_defined_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/explore/libs/explore/test/stream/user_defined_container.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,53 @@
+// Boost.Explore library
+
+// Copyright Jared McIntyre 2007. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_TEST_MODULE PrintLib
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+#include <boost/explore.hpp>
+
+class user_vector
+{
+public:
+    user_vector()
+    {
+        m_vec.push_back(1);
+        m_vec.push_back(2);
+        m_vec.push_back(3);
+    }
+
+    std::vector<int>::const_iterator start() const
+    {
+        return m_vec.begin();
+    }
+
+    std::vector<int>::const_iterator finish() const
+    {
+        return m_vec.end();
+    }
+
+private:
+    std::vector<int> m_vec;
+};
+
+std::ostream& operator<<(std::ostream& ostr, const user_vector& u)
+{
+    return explore::stream_container(ostr, u.start(), u.finish());
+}
+
+BOOST_AUTO_TEST_CASE( user_defined_stream_test )
+{
+    std::stringstream str_out;
+
+    user_vector v;
+    str_out << v;
+    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
+}
+
Deleted: sandbox/explore/libs/explore/test/user_defined_container.cpp
==============================================================================
--- sandbox/explore/libs/explore/test/user_defined_container.cpp	2007-08-03 01:28:26 EDT (Fri, 03 Aug 2007)
+++ (empty file)
@@ -1,63 +0,0 @@
-// Boost.Print library
-
-// Copyright Jared McIntyre 2007. Use, modification and
-// distribution is 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)
-
-// For more information, see http://www.boost.org
-
-#define BOOST_TEST_MODULE PrintLib
-#include <boost/test/unit_test.hpp>
-#include <sstream>
-#include <vector>
-#include "../../../boost/explore/explore.hpp"
-#include "../../../boost/explore/stream_container.hpp"
-
-class user_vector
-{
-public:
-    user_vector()
-    {
-        m_vec.push_back(1);
-        m_vec.push_back(2);
-        m_vec.push_back(3);
-    }
-
-    std::vector<int>::const_iterator start() const
-    {
-        return m_vec.begin();
-    }
-
-    std::vector<int>::const_iterator finish() const
-    {
-        return m_vec.end();
-    }
-
-private:
-    std::vector<int> m_vec;
-};
-
-std::ostream& operator<<(std::ostream& ostr, const user_vector& u)
-{
-    return explore::stream_container(ostr, u.start(), u.finish());
-}
-
-BOOST_AUTO_TEST_CASE( user_defined_print_test )
-{
-    std::stringstream str_out;
-
-    user_vector v;
-    explore::print(v, str_out);
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
-
-BOOST_AUTO_TEST_CASE( user_defined_stream_test )
-{
-    std::stringstream str_out;
-
-    user_vector v;
-    str_out << v;
-    BOOST_CHECK_EQUAL(str_out.str(), "[1, 2, 3]");
-}
-