/* Copyright (c) Alexander Zaitsev , 2016 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) See http://www.boost.org/ for latest version. */ #include #include #define BOOST_TEST_MAIN #include #include #include #include #include namespace ba = boost::algorithm; template bool funcComparator(const T& v1, const T& v2) { return v1 == v2; } struct functorComparator { template bool operator()(const T& v1, const T& v2) const { return v1 == v2; } }; void test_is_palindrome() { const std::list empty; const std::vector singleElement(1, 'z'); int oddNonPalindrome[] = {3,2,2}; const int oddPalindrome[] = {1,2,3,2,1}; const int evenPalindrome[] = {1,2,2,1}; int evenNonPalindrome[] = {1,4,8,8}; const char* stringNullPtr = NULL; // Test a default operator== BOOST_CHECK ( ba::is_palindrome(empty)); BOOST_CHECK ( ba::is_palindrome(singleElement)); BOOST_CHECK (!ba::is_palindrome(boost::begin(oddNonPalindrome), boost::end(oddNonPalindrome))); BOOST_CHECK ( ba::is_palindrome(boost::begin(oddPalindrome), boost::end(oddPalindrome))); BOOST_CHECK ( ba::is_palindrome(boost::begin(evenPalindrome), boost::end(evenPalindrome))); BOOST_CHECK (!ba::is_palindrome(boost::begin(evenNonPalindrome), boost::end(evenNonPalindrome))); //Test the custom comparators BOOST_CHECK ( ba::is_palindrome(empty.begin(), empty.end(), functorComparator())); BOOST_CHECK (!ba::is_palindrome(boost::begin(oddNonPalindrome), boost::end(oddNonPalindrome), funcComparator)); BOOST_CHECK ( ba::is_palindrome(evenPalindrome, std::equal_to())); //Test C-strings like cases BOOST_CHECK ( ba::is_palindrome(stringNullPtr)); BOOST_CHECK ( ba::is_palindrome("")); BOOST_CHECK ( ba::is_palindrome("a")); BOOST_CHECK ( ba::is_palindrome("abacaba", std::equal_to())); BOOST_CHECK ( ba::is_palindrome("abba")); BOOST_CHECK (!ba::is_palindrome("acab")); } BOOST_AUTO_TEST_CASE( test_main ) { test_is_palindrome (); }