blob: f786b96c20d441ff61ee18306982705ebab45151 [file] [log] [blame]
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2017. 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/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <boost/container/string.hpp>
#include <boost/utility/string_view.hpp>
#include <boost/core/lightweight_test.hpp>
void conversion_test()
{
#ifndef BOOST_CONTAINER_TEMPLATED_CONVERSION_OPERATOR_BROKEN
{
const boost::container::string s = "some text";
boost::string_view sv(s);
BOOST_TEST(s.data() == sv.data() && s.size() == sv.size());
boost::string_view sv2;
sv2 = s;
BOOST_TEST(s.data() == sv2.data() && s.size() == sv2.size());
const boost::string_view csv(s);
BOOST_TEST(s.data() == sv.data() && s.size() == csv.size());
}
#endif
}
void to_view_test()
{
const boost::container::string s = "some text";
boost::string_view sv(s.to_view<boost::string_view>());
BOOST_TEST(s.data() == sv.data() && s.size() == sv.size());
boost::string_view sv2;
sv2 = s.to_view<boost::string_view>();
BOOST_TEST(s.data() == sv2.data() && s.size() == sv2.size());
const boost::string_view csv(s.to_view<boost::string_view>());
BOOST_TEST(s.data() == csv.data() && s.size() == csv.size());
}
void equal_test()
{
const boost::string_view sv = "same text";
const boost::string_view svd = "different text";
const boost::container::string s = "same text";
BOOST_TEST(sv == s);
BOOST_TEST(s == sv);
BOOST_TEST(!(svd == s));
BOOST_TEST(!(s == svd));
}
void unequal_test()
{
const boost::string_view sv = "same text";
const boost::string_view svd = "different text";
const boost::container::string s = "same text";
BOOST_TEST(!(sv != s));
BOOST_TEST(!(s != sv));
BOOST_TEST(svd != s);
BOOST_TEST(s != svd);
}
void less_test()
{
boost::string_view sv = "0123456";
boost::container::string s = "0123459";
BOOST_TEST(sv < s);
BOOST_TEST(!(s < sv));
sv = "0123459";
s = "0123456";
BOOST_TEST(!(sv < s));
BOOST_TEST(s < sv);
sv = "0123456";
BOOST_TEST(!(sv < s));
BOOST_TEST(!(s < sv));
}
void greater_test()
{
boost::string_view sv = "0123459";
boost::container::string s = "0123456";
BOOST_TEST(sv > s);
BOOST_TEST(!(s > sv));
sv = "0123456";
s = "0123459";
BOOST_TEST(!(sv > s));
BOOST_TEST(s > sv);
sv = "0123459";
BOOST_TEST(!(sv > s));
BOOST_TEST(!(s > sv));
}
void less_equal_test()
{
boost::string_view sv = "0123456";
boost::container::string s = "0123459";
BOOST_TEST(sv <= s);
BOOST_TEST(!(s <= sv));
sv = "0123459";
s = "0123456";
BOOST_TEST(!(sv <= s));
BOOST_TEST(s <= sv);
sv = "0123456";
BOOST_TEST(sv <= s);
BOOST_TEST(s <= sv);
}
void greater_equal_test()
{
boost::string_view sv = "0123459";
boost::container::string s = "0123456";
BOOST_TEST(sv >= s);
BOOST_TEST(!(s >= sv));
sv = "0123456";
s = "0123459";
BOOST_TEST(!(sv >= s));
BOOST_TEST(s >= sv);
sv = "0123459";
BOOST_TEST(sv >= s);
BOOST_TEST(s >= sv);
}
void constructor_test()
{
boost::string_view sv = "0123459";
boost::container::string s(sv);
BOOST_TEST(sv == s);
boost::container::string s2(sv, s.get_allocator());
BOOST_TEST(sv == s);
}
void assignment_test()
{
boost::string_view sv = "0123459";
boost::container::string s;
s = sv;
BOOST_TEST(sv == s);
}
void assign_test()
{
boost::string_view sv = "0123459";
boost::container::string s;
s.assign(sv);
BOOST_TEST(sv == s);
}
void plus_equal_test()
{
boost::string_view sv = "23459";
boost::container::string s("01");
s += sv;
BOOST_TEST(s == "0123459");
}
void append_test()
{
boost::string_view sv = "23459";
boost::container::string s("01");
s.append(sv);
BOOST_TEST(s == "0123459");
}
void insert_test()
{
boost::string_view sv = "34";
boost::container::string s("01259");
s.insert(3u, sv);
BOOST_TEST(s == "0123459");
}
void replace_test()
{
boost::string_view sv = "5678";
boost::container::string s("01259");
s.replace(2u, 2u, sv);
BOOST_TEST(s == "0156789");
s.replace(s.begin()+3, s.begin()+6, sv);
BOOST_TEST(s == "01556789");
s.replace(5u, 3u, sv, 2u, 2u);
BOOST_TEST(s == "0155678");
}
void find_test()
{
const boost::string_view sv = "25";
boost::container::string s("0125925123");
BOOST_TEST(s.find(sv,4) == 5);
}
void rfind_test()
{
const boost::string_view sv = "25";
boost::container::string s("0125925123");
BOOST_TEST(s.rfind(sv,4) == 2);
}
void find_first_of_test()
{
const boost::string_view sv = "52";
boost::container::string s("0125925123");
BOOST_TEST(s.find_first_of(sv,4) == 5);
}
void find_last_of_test()
{
const boost::string_view sv = "52";
boost::container::string s("520125925123");
BOOST_TEST(s.find_last_of(sv,6) == 5);
}
void find_first_not_of_test()
{
const boost::string_view sv = "52";
boost::container::string s("0125925123");
BOOST_TEST(s.find_first_not_of(sv,2) == 4);
}
void find_last_not_of_test()
{
const boost::string_view sv = "52";
boost::container::string s("0125925123");
BOOST_TEST(s.find_last_not_of(sv,6) == 4);
}
void compare_test()
{
const boost::string_view sv = "52";
boost::container::string s("0125925123");
BOOST_TEST(s.compare(sv) < 0);
BOOST_TEST(s.compare(boost::string_view("0125925123")) == 0);
BOOST_TEST(s.compare(2u, s.size() - 2u, boost::string_view("25925123")) == 0);
boost::string_view sv2("5212592512389");
BOOST_TEST(s.compare(2u, s.size() - 2u, sv2, 3, sv2.size()-5u) == 0);
}
int main()
{
conversion_test();
to_view_test();
equal_test();
unequal_test();
less_test();
greater_test();
less_equal_test();
greater_equal_test();
constructor_test();
assignment_test();
assign_test();
plus_equal_test();
append_test();
insert_test();
replace_test();
find_test();
rfind_test();
find_first_of_test();
find_last_of_test();
find_first_not_of_test();
find_last_not_of_test();
compare_test();
return boost::report_errors();
}