179 lines
4.0 KiB
C++
179 lines
4.0 KiB
C++
/*
|
|
*
|
|
* Copyright (c) 2004
|
|
* John Maddock
|
|
*
|
|
* Use, modification and distribution are 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)
|
|
*
|
|
*/
|
|
|
|
#include "test.hpp"
|
|
#include <iostream>
|
|
#include <iomanip>
|
|
|
|
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\
|
|
&& !BOOST_WORKAROUND(__HP_aCC, BOOST_TESTED_AT(55500))\
|
|
&& !(defined(__GNUC__) && (__GNUC__ < 3) && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)))
|
|
|
|
template <class T1, class T2>
|
|
void test_less(const T1& t1, const T2& t2)
|
|
{
|
|
if(!(t1 < t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed < comparison", char);
|
|
}
|
|
if(!(t1 <= t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed <= comparison", char);
|
|
}
|
|
if(!(t1 != t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed != comparison", char);
|
|
}
|
|
if(t1 == t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed == comparison", char);
|
|
}
|
|
if(t1 >= t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed >= comparison", char);
|
|
}
|
|
if(t1 > t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed > comparison", char);
|
|
}
|
|
}
|
|
|
|
template <class T1, class T2>
|
|
void test_greater(const T1& t1, const T2& t2)
|
|
{
|
|
if(t1 < t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed < comparison", char);
|
|
}
|
|
if(t1 <= t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed <= comparison", char);
|
|
}
|
|
if(!(t1 != t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed != comparison", char);
|
|
}
|
|
if(t1 == t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed == comparison", char);
|
|
}
|
|
if(!(t1 >= t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed >= comparison", char);
|
|
}
|
|
if(!(t1 > t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed > comparison", char);
|
|
}
|
|
}
|
|
|
|
template <class T1, class T2>
|
|
void test_equal(const T1& t1, const T2& t2)
|
|
{
|
|
if(t1 < t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed < comparison", char);
|
|
}
|
|
if(!(t1 <= t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed <= comparison", char);
|
|
}
|
|
if(t1 != t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed != comparison", char);
|
|
}
|
|
if(!(t1 == t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed == comparison", char);
|
|
}
|
|
if(!(t1 >= t2))
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed >= comparison", char);
|
|
}
|
|
if(t1 > t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed > comparison", char);
|
|
}
|
|
}
|
|
|
|
template <class T1, class T2, class T3>
|
|
void test_plus(const T1& t1, const T2& t2, const T3& t3)
|
|
{
|
|
if(t1 + t2 != t3)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed addition", char);
|
|
}
|
|
if(t3 != t1 + t2)
|
|
{
|
|
BOOST_REGEX_TEST_ERROR("Failed addition", char);
|
|
}
|
|
}
|
|
|
|
void test_operators()
|
|
{
|
|
test_info<char>::set_typename("sub_match operators");
|
|
|
|
std::string s1("a");
|
|
std::string s2("b");
|
|
boost::sub_match<std::string::const_iterator> sub1, sub2;
|
|
sub1.first = s1.begin();
|
|
sub1.second = s1.end();
|
|
sub1.matched = true;
|
|
sub2.first = s2.begin();
|
|
sub2.second = s2.end();
|
|
sub2.matched = true;
|
|
|
|
test_less(sub1, sub2);
|
|
test_less(sub1, s2.c_str());
|
|
test_less(s1.c_str(), sub2);
|
|
test_less(sub1, *s2.c_str());
|
|
test_less(*s1.c_str(), sub2);
|
|
test_less(sub1, s2);
|
|
test_less(s1, sub2);
|
|
test_greater(sub2, sub1);
|
|
test_greater(sub2, s1.c_str());
|
|
test_greater(s2.c_str(), sub1);
|
|
test_greater(sub2, *s1.c_str());
|
|
test_greater(*s2.c_str(), sub1);
|
|
test_greater(sub2, s1);
|
|
test_greater(s2, sub1);
|
|
test_equal(sub1, sub1);
|
|
test_equal(sub1, s1.c_str());
|
|
test_equal(s1.c_str(), sub1);
|
|
test_equal(sub1, *s1.c_str());
|
|
test_equal(*s1.c_str(), sub1);
|
|
test_equal(sub1, s1);
|
|
test_equal(s1, sub1);
|
|
test_plus(sub2, sub1, "ba");
|
|
test_plus(sub2, s1.c_str(), "ba");
|
|
test_plus(s2.c_str(), sub1, "ba");
|
|
test_plus(sub2, *s1.c_str(), "ba");
|
|
test_plus(*s2.c_str(), sub1, "ba");
|
|
test_plus(sub2, s1, "ba");
|
|
test_plus(s2, sub1, "ba");
|
|
}
|
|
|
|
#else
|
|
|
|
#include <iostream>
|
|
|
|
void test_operators()
|
|
{
|
|
std::cout <<
|
|
"\n<note>\n"
|
|
"This compiler version does not support the sub_match comparison operators\n"
|
|
"tests for these operators are not carried out\n"
|
|
"</note>\n";
|
|
}
|
|
|
|
#endif
|
|
|