Export of internal Abseil changes.
-- 1f44f8f487aa3afe8248132e4081519e85671965 by CJ Johnson <johnsoncj@google.com>: Updates ScopedAllocatorWorks test for InlinedVector to not depend on specific byte counts of standard library vectors. It's too brittle in the face of capacity-changing changes to InlinedVector and does not provide signal in those breakages. PiperOrigin-RevId: 259590332 -- fef7589547e9cdd04a254f6ae06e2bd9ec2b35f0 by CJ Johnson <johnsoncj@google.com>: Updates the implementation of InlinedVector::insert(...) to be exception safe and adds an exception safety tests for insert(...) PiperOrigin-RevId: 259542968 GitOrigin-RevId: 1f44f8f487aa3afe8248132e4081519e85671965 Change-Id: I514beff56159c9c717f8d29197728011af1fecd7
This commit is contained in:
parent
f3840bc5e3
commit
ad1485c898
4 changed files with 229 additions and 199 deletions
|
|
@ -279,6 +279,82 @@ TYPED_TEST(TwoSizeTest, Resize) {
|
|||
}));
|
||||
}
|
||||
|
||||
TYPED_TEST(OneSizeTest, Insert) {
|
||||
using VecT = typename TypeParam::VecT;
|
||||
using value_type = typename VecT::value_type;
|
||||
constexpr static auto from_size = TypeParam::GetSizeAt(0);
|
||||
|
||||
auto tester = testing::MakeExceptionSafetyTester()
|
||||
.WithInitialValue(VecT{from_size})
|
||||
.WithContracts(InlinedVectorInvariants<VecT>);
|
||||
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin();
|
||||
vec->insert(it, value_type{});
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin() + (vec->size() / 2);
|
||||
vec->insert(it, value_type{});
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->end();
|
||||
vec->insert(it, value_type{});
|
||||
}));
|
||||
}
|
||||
|
||||
TYPED_TEST(TwoSizeTest, Insert) {
|
||||
using VecT = typename TypeParam::VecT;
|
||||
using value_type = typename VecT::value_type;
|
||||
constexpr static auto from_size = TypeParam::GetSizeAt(0);
|
||||
constexpr static auto count = TypeParam::GetSizeAt(1);
|
||||
|
||||
auto tester = testing::MakeExceptionSafetyTester()
|
||||
.WithInitialValue(VecT{from_size})
|
||||
.WithContracts(InlinedVectorInvariants<VecT>);
|
||||
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin();
|
||||
vec->insert(it, count, value_type{});
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin() + (vec->size() / 2);
|
||||
vec->insert(it, count, value_type{});
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->end();
|
||||
vec->insert(it, count, value_type{});
|
||||
}));
|
||||
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin();
|
||||
vec->insert(it, ABSL_INTERNAL_MAKE_INIT_LIST(value_type, count));
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin() + (vec->size() / 2);
|
||||
vec->insert(it, ABSL_INTERNAL_MAKE_INIT_LIST(value_type, count));
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->end();
|
||||
vec->insert(it, ABSL_INTERNAL_MAKE_INIT_LIST(value_type, count));
|
||||
}));
|
||||
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin();
|
||||
std::array<value_type, count> arr{};
|
||||
vec->insert(it, arr.begin(), arr.end());
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->begin() + (vec->size() / 2);
|
||||
std::array<value_type, count> arr{};
|
||||
vec->insert(it, arr.begin(), arr.end());
|
||||
}));
|
||||
EXPECT_TRUE(tester.Test([](VecT* vec) {
|
||||
auto it = vec->end();
|
||||
std::array<value_type, count> arr{};
|
||||
vec->insert(it, arr.begin(), arr.end());
|
||||
}));
|
||||
}
|
||||
|
||||
TYPED_TEST(OneSizeTest, EmplaceBack) {
|
||||
using VecT = typename TypeParam::VecT;
|
||||
constexpr static auto size = TypeParam::GetSizeAt(0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue