/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Library/boost/libs/algorithm/test/mismatch_test.cpp
195 строк
10 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
/* 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 <boost/config.hpp> #include <boost/algorithm/cxx14/mismatch.hpp> #include "iterator_test.hpp" #define BOOST_TEST_MAIN #include <boost/test/unit_test.hpp> template <typename T> BOOST_CXX14_CONSTEXPR bool eq ( const T& a, const T& b ) { return a == b; } template <typename T> BOOST_CXX14_CONSTEXPR bool never_eq ( const T&, const T& ) { return false; } namespace ba = boost::algorithm; template <typename Iter1, typename Iter2> BOOST_CXX14_CONSTEXPR bool iter_eq ( std::pair<Iter1, Iter2> 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: BOOST_CXX14_CONSTEXPR 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<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num)), input_iterator<const int *>(num), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num), never_eq<int> ), input_iterator<const int *>(num), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator<const int *>(num), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num), never_eq<int> ), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num))); // Empty vs. non-empty mismatch immediately BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num + 1)), input_iterator<const int *>(num), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 2), input_iterator<const int *>(num), input_iterator<const int *>(num)), input_iterator<const int *>(num + 1), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator<const int *>(num + 1), random_access_iterator<const int *>(num + 2), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num)), random_access_iterator<const int *>(num + 1), random_access_iterator<const int *>(num))); // Single element sequences are equal if they contain the same value BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + 1), input_iterator<const int *>(num), input_iterator<const int *>(num + 1)), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + 1), input_iterator<const int *>(num), input_iterator<const int *>(num + 1), eq<int> ), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator<const int *>(num), random_access_iterator<const int *>(num + 1), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num + 1), eq<int> ), random_access_iterator<const int *>(num + 1), random_access_iterator<const int *>(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + 1), input_iterator<const int *>(num), input_iterator<const int *>(num + 1), never_eq<int> ), input_iterator<const int *>(num), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( random_access_iterator<const int *>(num), random_access_iterator<const int *>(num + 1), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num + 1), never_eq<int> ), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 2)), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 2))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 2), eq<int> ), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 2))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num + 2), input_iterator<const int *>(num + 3), input_iterator<const int *>(num), input_iterator<const int *>(num + 1)), input_iterator<const int *>(num + 2), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num + 2), input_iterator<const int *>(num + 3), input_iterator<const int *>(num), input_iterator<const int *>(num + 1), eq<int> ), input_iterator<const int *>(num + 2), input_iterator<const int *>(num))); // Identical long sequences are equal. BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + sz), input_iterator<const int *>(num), input_iterator<const int *>(num + sz)), input_iterator<const int *>(num + sz), input_iterator<const int *>(num + sz))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + sz), input_iterator<const int *>(num), input_iterator<const int *>(num + sz), eq<int> ), input_iterator<const int *>(num + sz), input_iterator<const int *>(num + sz))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + sz), input_iterator<const int *>(num), input_iterator<const int *>(num + sz), never_eq<int> ), input_iterator<const int *>(num), input_iterator<const int *>(num))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + sz), random_access_iterator<const int *>(num), random_access_iterator<const int *>(num + sz), never_eq<int> ), input_iterator<const int *>(num), random_access_iterator<const int *>(num))); // Different sequences are different BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num + 1), input_iterator<const int *>(num + sz), input_iterator<const int *>(num), input_iterator<const int *>(num + sz)), input_iterator<const int *>(num + 2), input_iterator<const int *>(num + 1))); BOOST_CHECK ( iter_eq ( ba::mismatch ( input_iterator<const int *>(num + 1), input_iterator<const int *>(num + sz), input_iterator<const int *>(num), input_iterator<const int *>(num + sz), eq<int> ), input_iterator<const int *>(num + 2), input_iterator<const int *>(num + 1))); // Checks constexpr BOOST_CXX14_CONSTEXPR bool res = ( // No mismatch for empty iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num)), input_iterator<const int *>(num), input_iterator<const int *>(num)) // Empty vs. non-empty mismatch immediately && iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num), input_iterator<const int *>(num + 1)), input_iterator<const int *>(num), input_iterator<const int *>(num)) // Single element sequences are equal if they contain the same value && iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + 1), input_iterator<const int *>(num), input_iterator<const int *>(num + 1), eq<int>), input_iterator<const int *>(num + 1), input_iterator<const int *>(num + 1)) // Identical long sequences are equal. && iter_eq ( ba::mismatch ( input_iterator<const int *>(num), input_iterator<const int *>(num + sz), input_iterator<const int *>(num), input_iterator<const int *>(num + sz), eq<int> ), input_iterator<const int *>(num + sz), input_iterator<const int *>(num + sz)) ); BOOST_CHECK ( res ); } BOOST_AUTO_TEST_CASE( test_main ) { test_mismatch (); }