mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[yul-phaser] Common: Add countSubstringOccurrences()
This commit is contained in:
parent
9b119c014e
commit
26bae6b459
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user