diff --git a/test/insert_test.hpp b/test/insert_test.hpp
new file mode 100644
index 0000000..cb862f3
--- /dev/null
+++ b/test/insert_test.hpp
@@ -0,0 +1,75 @@
+#ifndef BOOST_CONTAINER_TEST_INSERT_TEST_HPP
+#define BOOST_CONTAINER_TEST_INSERT_TEST_HPP
+
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <deque>
+#include <boost/core/lightweight_test.hpp>
+#include "check_equal_containers.hpp"
+
+namespace boost {
+namespace container {
+namespace test {
+
+template<class SeqContainer>
+void
+    test_insert_range(
+        std::deque<int> &std_deque
+      , SeqContainer &seq_container
+      , std::deque<int> const& input_deque
+      , std::size_t index
+    )
+{
+    BOOST_TEST(CheckEqualContainers(std_deque, seq_container));
+
+    std_deque.insert(
+        std_deque.begin() + index
+      , input_deque.begin()
+      , input_deque.end()
+    );
+
+    seq_container.insert(
+        seq_container.begin() + index
+      , input_deque.begin()
+      , input_deque.end()
+    );
+    BOOST_TEST(CheckEqualContainers(std_deque, seq_container));
+}
+
+template<class SeqContainer>
+bool test_range_insertion()
+{
+   int err_count = boost::report_errors();
+   typedef typename SeqContainer::value_type value_type;
+   std::deque<int> input_deque;
+   for (int element = -10; element < 10; ++element)
+   {
+      input_deque.push_back(element + 20);
+   }
+
+   for (std::size_t i = 0; i <= input_deque.size(); ++i)
+   {
+      std::deque<int> std_deque;
+      ::boost::movelib::unique_ptr<SeqContainer> const pseqcontainer = ::boost::movelib::make_unique<SeqContainer>();
+      SeqContainer &seq_container = *pseqcontainer;
+
+      for (int element = -10; element < 10; ++element)
+      {
+         std_deque.push_back(element);
+         seq_container.push_back(value_type(element));
+      }
+      test_insert_range(std_deque, seq_container, input_deque, i);
+   }
+
+   return err_count == boost::report_errors();
+}
+
+
+}  //namespace test {
+}  //namespace container {
+}  //namespace boost {
+
+#endif   //#ifndef BOOST_CONTAINER_TEST_INSERT_TEST_HPP
