/* Copyright (c) Marshall Clow 2013. 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) For more information, see http://www.boost.org */ #include #include #include "iterator_test.hpp" #define BOOST_TEST_MAIN #include template bool eq ( const T& a, const T& b ) { return a == b; } template bool never_eq ( const T&, const T& ) { return false; } namespace ba = boost::algorithm; template bool iter_eq ( std::pair pr, Iter1 first, Iter2 second ) { return pr.first == first && pr.second == second; } void test_mismatch () { // Note: The literal values here are tested against directly, careful if you change them: int num[] = { 1, 1, 2, 3, 5 }; const int sz = sizeof (num)/sizeof(num[0]); // No mismatch for empty sequences BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num), input_iterator(num), input_iterator(num)), input_iterator(num), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num), input_iterator(num), input_iterator(num), never_eq ), input_iterator(num), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator(num), random_access_iterator(num), random_access_iterator(num), random_access_iterator(num), never_eq ), random_access_iterator(num), random_access_iterator(num))); // Empty vs. non-empty mismatch immediately BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num), input_iterator(num), input_iterator(num + 1)), input_iterator(num), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num + 1), input_iterator(num + 2), input_iterator(num), input_iterator(num)), input_iterator(num + 1), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator(num + 1), random_access_iterator(num + 2), random_access_iterator(num), random_access_iterator(num)), random_access_iterator(num + 1), random_access_iterator(num))); // Single element sequences are equal if they contain the same value BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + 1), input_iterator(num), input_iterator(num + 1)), input_iterator(num + 1), input_iterator(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + 1), input_iterator(num), input_iterator(num + 1), eq ), input_iterator(num + 1), input_iterator(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator(num), random_access_iterator(num + 1), random_access_iterator(num), random_access_iterator(num + 1), eq ), random_access_iterator(num + 1), random_access_iterator(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + 1), input_iterator(num), input_iterator(num + 1), never_eq ), input_iterator(num), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator(num), random_access_iterator(num + 1), random_access_iterator(num), random_access_iterator(num + 1), never_eq ), random_access_iterator(num), random_access_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + 1), input_iterator(num + 1), input_iterator(num + 2)), input_iterator(num + 1), input_iterator(num + 2))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + 1), input_iterator(num + 1), input_iterator(num + 2), eq ), input_iterator(num + 1), input_iterator(num + 2))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num + 2), input_iterator(num + 3), input_iterator(num), input_iterator(num + 1)), input_iterator(num + 2), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num + 2), input_iterator(num + 3), input_iterator(num), input_iterator(num + 1), eq ), input_iterator(num + 2), input_iterator(num))); // Identical long sequences are equal. BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + sz), input_iterator(num), input_iterator(num + sz)), input_iterator(num + sz), input_iterator(num + sz))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + sz), input_iterator(num), input_iterator(num + sz), eq ), input_iterator(num + sz), input_iterator(num + sz))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + sz), input_iterator(num), input_iterator(num + sz), never_eq ), input_iterator(num), input_iterator(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num), input_iterator(num + sz), random_access_iterator(num), random_access_iterator(num + sz), never_eq ), input_iterator(num), random_access_iterator(num))); // different sequences are different BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num + 1), input_iterator(num + sz), input_iterator(num), input_iterator(num + sz)), input_iterator(num + 2), input_iterator(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator(num + 1), input_iterator(num + sz), input_iterator(num), input_iterator(num + sz), eq ), input_iterator(num + 2), input_iterator(num + 1))); } BOOST_AUTO_TEST_CASE( test_main ) { test_mismatch (); }