@@ -1175,7 +1175,7 @@ TYPED_TEST(Modifiers, Insert) {
11751175 GTEST_SKIP ();
11761176}
11771177
1178- TYPED_TEST (Modifiers, PushBack ) {
1178+ TYPED_TEST (Modifiers, PushBackConstRef ) {
11791179 // constexpr reference push_back(const T& x);
11801180 // constexpr reference push_back(T&& x);
11811181 //
@@ -1186,19 +1186,52 @@ TYPED_TEST(Modifiers, PushBack) {
11861186 // Remarks: If an exception is thrown, there are no effects on *this.
11871187
11881188 using IV = TestFixture::IV;
1189+ using T = TestFixture::T;
11891190
11901191 const auto reference = this ->unique ();
11911192
11921193 IV device;
11931194 for (int i = 0 ; i < reference.size (); ++i) {
1194- EXPECT_EQ (device.push_back (reference[i]), device.back ());
1195+ auto val = reference[i];
1196+ auto res = device.push_back (val);
1197+ EXPECT_EQ (res, device.back ());
11951198 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
11961199 }
1200+
1201+ T val{0 };
1202+ EXPECT_THROW (device.push_back (val), beman::bad_alloc);
1203+ }
1204+
1205+ TYPED_TEST (Modifiers, PushBackRV) {
1206+ // constexpr reference push_back(const T& x);
1207+ // constexpr reference push_back(T&& x);
1208+ //
1209+ // Returns: back().
1210+ // Throws: bad_alloc or any exception thrown by the initialization of the
1211+ // inserted element.
1212+ // Complexity: Constant.
1213+ // Remarks: If an exception is thrown, there are no effects on *this.
1214+
1215+ using IV = TestFixture::IV;
1216+ using T = TestFixture::T;
1217+
1218+ const auto reference = this ->unique ();
1219+
1220+ IV device;
1221+ for (int i = 0 ; i < reference.size (); ++i) {
1222+ T val{reference[i]};
1223+ auto res = device.push_back (std::move (val));
1224+ EXPECT_EQ (res, device.back ());
1225+ EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
1226+ }
1227+
1228+ T val{0 };
1229+ EXPECT_THROW (device.push_back (val), beman::bad_alloc);
11971230}
11981231
11991232// TODO: Check if there's extra copies
12001233
1201- TYPED_TEST (Modifiers, EmplaceBack ) {
1234+ TYPED_TEST (Modifiers, EmplaceBackRV ) {
12021235 // template<class... Args>
12031236 // constexpr reference emplace_back(Args&&... args);
12041237 //
@@ -1214,9 +1247,12 @@ TYPED_TEST(Modifiers, EmplaceBack) {
12141247
12151248 IV device;
12161249 for (int i = 0 ; i < reference.size (); ++i) {
1217- EXPECT_EQ (device.emplace_back (reference[i].value ), device.back ());
1250+ auto res = device.emplace_back (reference[i].value );
1251+ EXPECT_EQ (res, device.back ());
12181252 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
12191253 }
1254+
1255+ EXPECT_THROW (device.emplace_back (0 ), beman::bad_alloc);
12201256}
12211257
12221258TYPED_TEST (Modifiers, TryEmplaceBack) {
@@ -1247,15 +1283,18 @@ TYPED_TEST(Modifiers, TryEmplaceBack) {
12471283 IV device;
12481284 if (!reference.empty ()) {
12491285 for (int i = 0 ; i < reference.size (); ++i) {
1250- EXPECT_EQ (device.try_emplace_back (reference[i].value ),
1286+ auto res = device.try_emplace_back (reference[i].value );
1287+ EXPECT_EQ (res,
12511288 std::addressof (device.back ()));
12521289 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
12531290 }
12541291
1255- EXPECT_EQ (device.try_emplace_back (reference[0 ].value ), nullptr );
1292+ auto res = device.try_emplace_back (reference[0 ].value );
1293+ EXPECT_EQ (res, nullptr );
12561294 EXPECT_EQ (device, reference);
12571295 } else {
1258- EXPECT_EQ (device.try_emplace_back (0 ), nullptr );
1296+ auto res = device.try_emplace_back (0 );
1297+ EXPECT_EQ (res, nullptr );
12591298 EXPECT_EQ (device, IV ());
12601299 }
12611300}
@@ -1290,16 +1329,20 @@ TYPED_TEST(Modifiers, TryPushBackConstRef) {
12901329
12911330 if (!reference.empty ()) {
12921331 for (int i = 0 ; i < reference.size (); ++i) {
1293- EXPECT_EQ (device.try_push_back (reference[i]),
1332+ auto res = device.try_push_back (reference[i]);
1333+ EXPECT_EQ (res,
12941334 std::addressof (device.back ()));
12951335 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
12961336 }
12971337
1298- EXPECT_EQ (device.try_push_back (reference[0 ]), nullptr );
1338+ auto res = device.try_push_back (reference[0 ]);
1339+ EXPECT_EQ (res, nullptr );
12991340 EXPECT_EQ (device, reference);
13001341 } else {
13011342 T val{0 };
1302- EXPECT_EQ (device.try_push_back (val), nullptr );
1343+
1344+ auto res = device.try_push_back (val);
1345+ EXPECT_EQ (res, nullptr );
13031346 EXPECT_EQ (device, IV ());
13041347 }
13051348}
@@ -1336,16 +1379,21 @@ TYPED_TEST(Modifiers, TryPushBackRV) {
13361379 if (!reference.empty ()) {
13371380 for (int i = 0 ; i < reference.size (); ++i) {
13381381 T val{reference[i].value };
1339- EXPECT_EQ (device.try_push_back (std::move (val)),
1382+
1383+ auto res = device.try_push_back (std::move (val));
1384+ EXPECT_EQ (res,
13401385 std::addressof (device.back ()));
13411386 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
13421387 }
13431388
1344- EXPECT_EQ (device.try_push_back (reference[0 ]), nullptr );
1389+ auto res = device.try_push_back (reference[0 ]);
1390+ EXPECT_EQ (res, nullptr );
13451391 EXPECT_EQ (device, reference);
13461392 } else {
13471393 T val{0 };
1348- EXPECT_EQ (device.try_push_back (std::move (val)), nullptr );
1394+
1395+ auto res = device.try_push_back (std::move (val));
1396+ EXPECT_EQ (res, nullptr );
13491397 EXPECT_EQ (device, IV ());
13501398 }
13511399}
@@ -1388,7 +1436,8 @@ TYPED_TEST(Modifiers, UncheckedEmplacedBack) {
13881436
13891437 IV device;
13901438 for (int i = 0 ; i < reference.size (); ++i) {
1391- EXPECT_EQ (device.unchecked_emplace_back (reference[i].value ), device.back ());
1439+ auto res = device.unchecked_emplace_back (reference[i].value );
1440+ EXPECT_EQ (res, device.back ());
13921441 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
13931442 }
13941443}
@@ -1406,7 +1455,8 @@ TYPED_TEST(Modifiers, UncheckedPushBackConstRef) {
14061455
14071456 IV device;
14081457 for (int i = 0 ; i < reference.size (); ++i) {
1409- EXPECT_EQ (device.unchecked_push_back (reference[i]), device.back ());
1458+ auto res = device.unchecked_push_back (reference[i]);
1459+ EXPECT_EQ (res, device.back ());
14101460 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
14111461 }
14121462}
@@ -1426,7 +1476,9 @@ TYPED_TEST(Modifiers, UncheckedPushBackRV) {
14261476 IV device;
14271477 for (int i = 0 ; i < reference.size (); ++i) {
14281478 T val{reference[i].value };
1429- EXPECT_EQ (device.unchecked_push_back (std::move (val)), device.back ());
1479+
1480+ auto res = device.unchecked_push_back (std::move (val));
1481+ EXPECT_EQ (res, device.back ());
14301482 EXPECT_EQ (device, IV (reference.begin (), reference.begin () + i + 1 ));
14311483 }
14321484}
0 commit comments