The boost::replace_all uses insert and erase to perform a change, those method are missing from sstring. Following the std:string implemntation the implementation of both functionalities is based on the replace method, either as c string replace or with templated iterators. Not all the variation of insert, replace and erase where added, but it will be possible to add them in the future if needed by calling the existing functionality. Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
124 lines
4.4 KiB
C++
124 lines
4.4 KiB
C++
/*
|
|
* This file is open source software, licensed to you under the terms
|
|
* of the Apache License, Version 2.0 (the "License"). See the NOTICE file
|
|
* distributed with this work for additional information regarding copyright
|
|
* ownership. You may not use this file except in compliance with the License.
|
|
*
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
/*
|
|
* Copyright 2014 Cloudius Systems
|
|
*/
|
|
|
|
#define BOOST_TEST_DYN_LINK
|
|
#define BOOST_TEST_MODULE core
|
|
|
|
#include <boost/test/included/unit_test.hpp>
|
|
#include "core/sstring.hh"
|
|
|
|
BOOST_AUTO_TEST_CASE(test_equality) {
|
|
BOOST_REQUIRE_EQUAL(sstring("aaa"), sstring("aaa"));
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_to_sstring) {
|
|
BOOST_REQUIRE_EQUAL(to_sstring(1234567), sstring("1234567"));
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_add_literal_to_sstring) {
|
|
BOOST_REQUIRE_EQUAL("x" + sstring("y"), sstring("xy"));
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_find_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abcde").find('b'), 1);
|
|
BOOST_REQUIRE_EQUAL(sstring("babcde").find('b',1), 2);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_not_find_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abcde").find('x'), sstring::npos);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_str_find_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abcde").find("bc"), 1);
|
|
BOOST_REQUIRE_EQUAL(sstring("abcbcde").find("bc", 2), 3);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_str_not_find_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abcde").find("x"), sstring::npos);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_substr_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abcde").substr(1,2), "bc");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").substr(1,2), "bc");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").substr(1,3), "bc");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").substr(0, 2), "ab");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").substr(3, 2), "");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").substr(1), "bc");
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_substr_eor_sstring) {
|
|
BOOST_REQUIRE_THROW(sstring("abcde").substr(6,1), std::out_of_range);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_at_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abcde").at(1), 'b');
|
|
BOOST_REQUIRE_THROW(sstring("abcde").at(6), std::out_of_range);
|
|
sstring s("abcde");
|
|
s.at(1) = 'd';
|
|
BOOST_REQUIRE_EQUAL(s, "adcde");
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_find_last_sstring) {
|
|
BOOST_REQUIRE_EQUAL(sstring("ababa").find_last_of('a'), 4);
|
|
BOOST_REQUIRE_EQUAL(sstring("ababa").find_last_of('a',5), 4);
|
|
BOOST_REQUIRE_EQUAL(sstring("ababa").find_last_of('a',4), 4);
|
|
BOOST_REQUIRE_EQUAL(sstring("ababa").find_last_of('a',3), 2);
|
|
BOOST_REQUIRE_EQUAL(sstring("ababa").find_last_of('x'), sstring::npos);
|
|
BOOST_REQUIRE_EQUAL(sstring("").find_last_of('a'), sstring::npos);
|
|
}
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(test_append) {
|
|
BOOST_REQUIRE_EQUAL(sstring("aba").append("1234", 3), "aba123");
|
|
BOOST_REQUIRE_EQUAL(sstring("aba").append("1234", 4), "aba1234");
|
|
BOOST_REQUIRE_EQUAL(sstring("aba").append("1234", 0), "aba");
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_replace) {
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").replace(1,1, "xyz", 1), "axc");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").replace(3,2, "xyz", 2), "abcxy");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").replace(2,2, "xyz", 2), "abxy");
|
|
BOOST_REQUIRE_EQUAL(sstring("abc").replace(0,2, "", 0), "c");
|
|
BOOST_REQUIRE_THROW(sstring("abc").replace(4,1, "xyz", 1), std::out_of_range);
|
|
const char* s = "xyz";
|
|
sstring str("abcdef");
|
|
BOOST_REQUIRE_EQUAL(str.replace(str.begin() + 1 , str.begin() + 3, s + 1, s + 3), "ayzdef");
|
|
BOOST_REQUIRE_THROW(sstring("abc").replace(4,1, "xyz", 1), std::out_of_range);
|
|
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_insert) {
|
|
sstring str("abc");
|
|
const char* s = "xyz";
|
|
str.insert(str.begin() +1, s + 1, s + 2);
|
|
BOOST_REQUIRE_EQUAL(str, "aybc");
|
|
str = "abc";
|
|
BOOST_REQUIRE_THROW(str.insert(str.begin() + 5, s + 1, s + 2), std::out_of_range);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_erase) {
|
|
sstring str("abcdef");
|
|
auto i = str.erase(str.begin() + 1, str.begin() + 3);
|
|
BOOST_REQUIRE_EQUAL(*i, 'd');
|
|
BOOST_REQUIRE_EQUAL(str, "adef");
|
|
BOOST_REQUIRE_THROW(str.erase(str.begin() + 5, str.begin() + 6), std::out_of_range);
|
|
}
|