Adding missing C++20 std::erase implementations (#5735)
There were already implementations for std::erase_if. This adds the counterpart AZStd::erase versions resolves #5734 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
14ad3b025a
commit
97106f9e60
@@ -2376,17 +2376,52 @@ namespace UnitTest
|
||||
static_assert(AZStd::wildcard_match_case(filter1, blahValue));
|
||||
}
|
||||
|
||||
TEST_F(String, StringEraseIf_Succeeds)
|
||||
TEST_F(String, StringCXX20Erase_Succeeds)
|
||||
{
|
||||
|
||||
AZStd::string eraseIfTest = "ABC CBA";
|
||||
auto eraseCount = AZStd::erase_if(eraseIfTest, [](AZStd::string::value_type ch)
|
||||
{
|
||||
return ch == 'C';
|
||||
});
|
||||
auto erasePredicate = [](AZStd::string::value_type ch)
|
||||
{
|
||||
return ch == 'C';
|
||||
};
|
||||
auto eraseCount = AZStd::erase_if(eraseIfTest, erasePredicate);
|
||||
EXPECT_EQ(2, eraseCount);
|
||||
EXPECT_EQ(5, eraseIfTest.size());
|
||||
EXPECT_STREQ("AB BA", eraseIfTest.c_str());
|
||||
|
||||
// Now erase the letter 'A';
|
||||
eraseCount = AZStd::erase(eraseIfTest, 'A');
|
||||
EXPECT_EQ(2, eraseCount);
|
||||
EXPECT_EQ(3, eraseIfTest.size());
|
||||
EXPECT_EQ("B B", eraseIfTest);
|
||||
}
|
||||
|
||||
TEST_F(String, FixedStringCXX20Erase_Succeeds)
|
||||
{
|
||||
// Erase 'l' from the phrase "Hello" World"
|
||||
constexpr auto eraseTest = [](const char* testString) constexpr
|
||||
{
|
||||
AZStd::fixed_string<16> testResult{ testString };
|
||||
AZStd::erase(testResult, 'l');
|
||||
return testResult;
|
||||
}("HelloWorld");
|
||||
|
||||
static_assert(eraseTest == "HeoWord");
|
||||
EXPECT_EQ("HeoWord", eraseTest);
|
||||
|
||||
// Use erase_if to erase both 'H' and 'e' from the remaining eraseTest string
|
||||
constexpr auto eraseIfTest = [](AZStd::string_view testString) constexpr
|
||||
{
|
||||
AZStd::fixed_string<16> testResult{ testString };
|
||||
auto erasePredicate = [](char ch)
|
||||
{
|
||||
return ch == 'H' || ch == 'e';
|
||||
};
|
||||
AZStd::erase_if(testResult, erasePredicate);
|
||||
return testResult;
|
||||
}(eraseTest);
|
||||
|
||||
static_assert(eraseIfTest == "oWord");
|
||||
EXPECT_EQ("oWord", eraseIfTest);
|
||||
}
|
||||
|
||||
template <typename StringType>
|
||||
|
||||
@@ -796,6 +796,37 @@ namespace UnitTest
|
||||
EXPECT_GT(greaterVectorDifferentSize, lessVector);
|
||||
}
|
||||
|
||||
TEST_F(Arrays, FixedVectorCXX20Erase_Succeeds)
|
||||
{
|
||||
// Erase 'l' from the phrase "Hello" World"
|
||||
auto eraseTest = [](AZStd::initializer_list<char> testInit) constexpr
|
||||
{
|
||||
AZStd::fixed_vector<char, 16> testResult{ testInit };
|
||||
AZStd::erase(testResult, 'l');
|
||||
return testResult;
|
||||
}({ 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' });
|
||||
|
||||
constexpr AZStd::string_view expectedEraseString = "HeoWord";
|
||||
AZStd::string_view testEraseString{ eraseTest.begin(), eraseTest.end() };
|
||||
EXPECT_EQ(expectedEraseString, testEraseString);
|
||||
|
||||
// Use erase_if to erase both 'H' and 'e' from the remaining eraseTest string
|
||||
auto eraseIfTest = [](const AZStd::fixed_vector<char, 16>& testVector) constexpr
|
||||
{
|
||||
AZStd::fixed_vector<char, 16> testResult{ testVector };
|
||||
auto erasePredicate = [](char ch)
|
||||
{
|
||||
return ch == 'H' || ch == 'e';
|
||||
};
|
||||
AZStd::erase_if(testResult, erasePredicate);
|
||||
return testResult;
|
||||
}(testEraseString);
|
||||
|
||||
constexpr AZStd::string_view expectedEraseIfString = "oWord";
|
||||
AZStd::string_view testEraseIfString{ eraseIfTest.begin(), eraseIfTest.end() };
|
||||
EXPECT_EQ(expectedEraseIfString, testEraseIfString);
|
||||
}
|
||||
|
||||
TEST_F(Arrays, VectorSwap)
|
||||
{
|
||||
vector<void*> vec1(42, nullptr);
|
||||
|
||||
Reference in New Issue
Block a user