Files
scylladb/tests/sstring_test.cc
Amnon Heiman 04b5bad2b7 Adding insert replace and erase to sstring
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>
2015-04-05 09:51:28 +03:00

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);
}