[yul-phaser] Common: Add countSubstringOccurrences()

This commit is contained in:
Kamil Śliwak 2020-02-14 20:37:49 +01:00
parent 9b119c014e
commit 26bae6b459
3 changed files with 38 additions and 0 deletions

View File

@ -49,3 +49,18 @@ string phaser::test::stripWhitespace(string const& input)
regex whitespaceRegex("\\s+");
return regex_replace(input, whitespaceRegex, "");
}
size_t phaser::test::countSubstringOccurrences(string const& _inputString, string const& _substring)
{
assert(_substring.size() > 0);
size_t count = 0;
size_t lastOccurrence = 0;
while ((lastOccurrence = _inputString.find(_substring, lastOccurrence)) != string::npos)
{
++count;
lastOccurrence += _substring.size();
}
return count;
}

View File

@ -67,6 +67,10 @@ std::map<std::string, size_t> enumerateOptmisationSteps();
/// Returns the input string with all the whitespace characters (spaces, line endings, etc.) removed.
std::string stripWhitespace(std::string const& input);
/// Counts the number of times one strinng can be found inside another. Only non-overlapping
/// occurrences are counted.
size_t countSubstringOccurrences(std::string const& _inputString, std::string const& _substring);
// STATISTICAL UTILITIES
/// Calculates the mean value of a series of samples given in a vector.

View File

@ -83,6 +83,25 @@ BOOST_AUTO_TEST_CASE(stripWhitespace_should_remove_all_whitespace_characters_fro
BOOST_TEST(stripWhitespace(" a b \n\n c \n\t\v") == "abc");
}
BOOST_AUTO_TEST_CASE(countSubstringOccurrences_should_count_non_overlapping_substring_occurrences_in_a_string)
{
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "a") == 6);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "aa") == 2);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "aaa") == 2);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "aaab") == 1);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "b") == 2);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "d") == 1);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "cdc") == 1);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "x") == 0);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "aaaa") == 0);
BOOST_TEST(countSubstringOccurrences("aaabcdcbaaa", "dcd") == 0);
BOOST_TEST(countSubstringOccurrences("", "a") == 0);
BOOST_TEST(countSubstringOccurrences("", "aa") == 0);
BOOST_TEST(countSubstringOccurrences("a", "aa") == 0);
}
BOOST_AUTO_TEST_CASE(mean_should_calculate_statistical_mean)
{
BOOST_TEST(mean<int>({0}) == 0.0);