diff --git a/include/boost/range/iterator_range_hash.hpp b/include/boost/range/iterator_range_hash.hpp new file mode 100644 index 0000000..615d22f --- /dev/null +++ b/include/boost/range/iterator_range_hash.hpp @@ -0,0 +1,22 @@ +// Boost.Range library +// +// Copyright Neil Groves 2014 +// 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/libs/range/ +// +#include +#include + +namespace boost +{ + +template +std::size_t hash_value(const iterator_range& rng) +{ + return boost::hash_range(rng.begin(), rng.end()); +} + +} // namespace boost diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 8b9463e..c5bf79e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -161,6 +161,7 @@ test-suite range : [ range-test iterator_pair ] [ range-test iterator_range ] [ range-test iterator_range_drop ] + [ range-test iterator_range_hash ] [ range-test iterator_range_variant ] # [ range-test mfc : $(VC71_ROOT)/atlmfc/include ] [ range-test join ] diff --git a/test/iterator_range_hash.cpp b/test/iterator_range_hash.cpp new file mode 100644 index 0000000..3ef9007 --- /dev/null +++ b/test/iterator_range_hash.cpp @@ -0,0 +1,52 @@ +// Boost.Range library +// +// Copyright Neil Groves 2014. 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/libs/range/ +// + +#include + +#include +#include + +#include + +namespace boost_range_test +{ + namespace + { + +void test_iterator_range_hash() +{ + std::vector v; + + for (boost::int32_t i = 0; i < 10; ++i) + { + v.push_back(i); + } + + std::size_t ref_output = boost::hash_range(v.begin(), v.end()); + + boost::iterator_range::iterator> rng(v); + + std::size_t test_output = boost::hash_value(rng); + + BOOST_CHECK_EQUAL(ref_output, test_output); +} + + } // anonymous namespace +} // namespace boost_range_test + +boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] ) +{ + boost::unit_test::test_suite* test = + BOOST_TEST_SUITE("Boost.Range iterator_range hash function"); + + test->add(BOOST_TEST_CASE(&boost_range_test::test_iterator_range_hash)); + + return test; +}