From d5b67c7fab505e7fffb6288d082eb4b317880aa6 Mon Sep 17 00:00:00 2001 From: morinmorin Date: Thu, 29 Jun 2017 22:09:26 +0900 Subject: [PATCH] Add tests for boost::advance/distance --- test/advance_test.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++ test/distance_test.cpp | 63 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 test/advance_test.cpp create mode 100644 test/distance_test.cpp diff --git a/test/advance_test.cpp b/test/advance_test.cpp new file mode 100644 index 0000000..230d07e --- /dev/null +++ b/test/advance_test.cpp @@ -0,0 +1,65 @@ +// Copyright (C) 2017 Michel Morin. +// +// 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 +#include +#include +#include +#include +#include + +int twice(int x) { return x + x; } + +template +void test_advance(Iterator it_from, Iterator it_to, int n) +{ + boost::advance(it_from, n); + BOOST_TEST(it_from == it_to); +} + +int main() +{ + int array[3] = {1, 2, 3}; + int* ptr1 = array; + int* ptr2 = array + 3; + + { + test_advance(ptr1, ptr2, 3); + test_advance(ptr2, ptr1, -3); + } + + { + std::vector ints(ptr1, ptr2); + test_advance(ints.begin(), ints.end(), 3); + test_advance(ints.end(), ints.begin(), -3); + } + + { + test_advance( + boost::make_transform_iterator(ptr1, twice) + , boost::make_transform_iterator(ptr2, twice) + , 3 + ); + test_advance( + boost::make_transform_iterator(ptr2, twice) + , boost::make_transform_iterator(ptr1, twice) + , -3 + ); + } + + { + std::list ints(ptr1, ptr2); + test_advance(ints.begin(), ints.end(), 3); + test_advance(ints.end(), ints.begin(), -3); + } + + { + boost::container::slist ints(ptr1, ptr2); + test_advance(ints.begin(), ints.end(), 3); + } + + return boost::report_errors(); +} diff --git a/test/distance_test.cpp b/test/distance_test.cpp new file mode 100644 index 0000000..494b0d5 --- /dev/null +++ b/test/distance_test.cpp @@ -0,0 +1,63 @@ +// Copyright (C) 2017 Michel Morin. +// +// 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 +#include +#include +#include +#include +#include + +int twice(int x) { return x + x; } + +template +void test_distance(Iterator it_from, Iterator it_to, int n) +{ + BOOST_TEST(boost::distance(it_from, it_to) == n); +} + +int main() +{ + int array[3] = {1, 2, 3}; + int* ptr1 = array; + int* ptr2 = array + 3; + + { + test_distance(ptr1, ptr2, 3); + test_distance(ptr2, ptr1, -3); + } + + { + std::vector ints(ptr1, ptr2); + test_distance(ints.begin(), ints.end(), 3); + test_distance(ints.end(), ints.begin(), -3); + } + + { + test_distance( + boost::make_transform_iterator(ptr1, twice) + , boost::make_transform_iterator(ptr2, twice) + , 3 + ); + test_distance( + boost::make_transform_iterator(ptr2, twice) + , boost::make_transform_iterator(ptr1, twice) + , -3 + ); + } + + { + std::list ints(ptr1, ptr2); + test_distance(ints.begin(), ints.end(), 3); + } + + { + boost::container::slist ints(ptr1, ptr2); + test_distance(ints.begin(), ints.end(), 3); + } + + return boost::report_errors(); +}