@@ -131,8 +131,8 @@ void SimulationTest(CCoinsView* base, bool fake_best_block)
131
131
std::map<COutPoint, Coin> result;
132
132
133
133
// The cache stack.
134
- std::vector<CCoinsViewCacheTest* > stack; // A stack of CCoinsViewCaches on top.
135
- stack.push_back (new CCoinsViewCacheTest (base)); // Start with one cache.
134
+ std::vector<std::unique_ptr< CCoinsViewCacheTest> > stack; // A stack of CCoinsViewCaches on top.
135
+ stack.push_back (std::make_unique< CCoinsViewCacheTest> (base)); // Start with one cache.
136
136
137
137
// Use a limited set of random transaction ids, so we do test overwriting entries.
138
138
std::vector<uint256> txids;
@@ -218,7 +218,7 @@ void SimulationTest(CCoinsView* base, bool fake_best_block)
218
218
found_an_entry = true ;
219
219
}
220
220
}
221
- for (const CCoinsViewCacheTest * test : stack) {
221
+ for (const auto & test : stack) {
222
222
test->SelfTest ();
223
223
}
224
224
}
@@ -241,31 +241,24 @@ void SimulationTest(CCoinsView* base, bool fake_best_block)
241
241
bool should_erase = InsecureRandRange (4 ) < 3 ;
242
242
BOOST_CHECK (should_erase ? stack.back ()->Flush () : stack.back ()->Sync ());
243
243
flushed_without_erase |= !should_erase;
244
- delete stack.back ();
245
244
stack.pop_back ();
246
245
}
247
246
if (stack.size () == 0 || (stack.size () < 4 && InsecureRandBool ())) {
248
247
// Add a new cache
249
248
CCoinsView* tip = base;
250
249
if (stack.size () > 0 ) {
251
- tip = stack.back ();
250
+ tip = stack.back (). get () ;
252
251
} else {
253
252
removed_all_caches = true ;
254
253
}
255
- stack.push_back (new CCoinsViewCacheTest (tip));
254
+ stack.push_back (std::make_unique< CCoinsViewCacheTest> (tip));
256
255
if (stack.size () == 4 ) {
257
256
reached_4_caches = true ;
258
257
}
259
258
}
260
259
}
261
260
}
262
261
263
- // Clean up the stack.
264
- while (stack.size () > 0 ) {
265
- delete stack.back ();
266
- stack.pop_back ();
267
- }
268
-
269
262
// Verify coverage.
270
263
BOOST_CHECK (removed_all_caches);
271
264
BOOST_CHECK (reached_4_caches);
@@ -321,8 +314,8 @@ BOOST_AUTO_TEST_CASE(updatecoins_simulation_test)
321
314
322
315
// The cache stack.
323
316
CCoinsViewTest base; // A CCoinsViewTest at the bottom.
324
- std::vector<CCoinsViewCacheTest* > stack; // A stack of CCoinsViewCaches on top.
325
- stack.push_back (new CCoinsViewCacheTest (&base)); // Start with one cache.
317
+ std::vector<std::unique_ptr< CCoinsViewCacheTest> > stack; // A stack of CCoinsViewCaches on top.
318
+ stack.push_back (std::make_unique< CCoinsViewCacheTest> (&base)); // Start with one cache.
326
319
327
320
// Track the txids we've used in various sets
328
321
std::set<COutPoint> coinbase_coins;
@@ -487,25 +480,18 @@ BOOST_AUTO_TEST_CASE(updatecoins_simulation_test)
487
480
// Every 100 iterations, change the cache stack.
488
481
if (stack.size () > 0 && InsecureRandBool () == 0 ) {
489
482
BOOST_CHECK (stack.back ()->Flush ());
490
- delete stack.back ();
491
483
stack.pop_back ();
492
484
}
493
485
if (stack.size () == 0 || (stack.size () < 4 && InsecureRandBool ())) {
494
486
CCoinsView* tip = &base;
495
487
if (stack.size () > 0 ) {
496
- tip = stack.back ();
488
+ tip = stack.back (). get () ;
497
489
}
498
- stack.push_back (new CCoinsViewCacheTest (tip));
490
+ stack.push_back (std::make_unique< CCoinsViewCacheTest> (tip));
499
491
}
500
492
}
501
493
}
502
494
503
- // Clean up the stack.
504
- while (stack.size () > 0 ) {
505
- delete stack.back ();
506
- stack.pop_back ();
507
- }
508
-
509
495
// Verify coverage.
510
496
BOOST_CHECK (spent_a_duplicate_coinbase);
511
497
@@ -918,7 +904,7 @@ Coin MakeCoin()
918
904
void TestFlushBehavior (
919
905
CCoinsViewCacheTest* view,
920
906
CCoinsViewDB& base,
921
- std::vector<CCoinsViewCacheTest* >& all_caches,
907
+ std::vector<std::unique_ptr< CCoinsViewCacheTest> >& all_caches,
922
908
bool do_erasing_flush)
923
909
{
924
910
CAmount value;
@@ -928,7 +914,7 @@ void TestFlushBehavior(
928
914
auto flush_all = [&all_caches](bool erase) {
929
915
// Flush in reverse order to ensure that flushes happen from children up.
930
916
for (auto i = all_caches.rbegin (); i != all_caches.rend (); ++i) {
931
- auto cache = *i;
917
+ auto & cache = *i;
932
918
// hashBlock must be filled before flushing to disk; value is
933
919
// unimportant here. This is normally done during connect/disconnect block.
934
920
cache->SetBestBlock (InsecureRand256 ());
@@ -1079,19 +1065,13 @@ BOOST_AUTO_TEST_CASE(ccoins_flush_behavior)
1079
1065
{
1080
1066
// Create two in-memory caches atop a leveldb view.
1081
1067
CCoinsViewDB base{" test" , /* nCacheSize=*/ 1 << 23 , /* fMemory=*/ true , /* fWipe=*/ false };
1082
- std::vector<CCoinsViewCacheTest*> caches;
1083
- caches.push_back (new CCoinsViewCacheTest (&base));
1084
- caches.push_back (new CCoinsViewCacheTest (caches.back ()));
1085
-
1086
- for (CCoinsViewCacheTest* view : caches) {
1087
- TestFlushBehavior (view, base, caches, /* do_erasing_flush=*/ false );
1088
- TestFlushBehavior (view, base, caches, /* do_erasing_flush=*/ true );
1089
- }
1068
+ std::vector<std::unique_ptr<CCoinsViewCacheTest>> caches;
1069
+ caches.push_back (std::make_unique<CCoinsViewCacheTest>(&base));
1070
+ caches.push_back (std::make_unique<CCoinsViewCacheTest>(caches.back ().get ()));
1090
1071
1091
- // Clean up the caches.
1092
- while (caches.size () > 0 ) {
1093
- delete caches.back ();
1094
- caches.pop_back ();
1072
+ for (const auto & view : caches) {
1073
+ TestFlushBehavior (view.get (), base, caches, /* do_erasing_flush=*/ false );
1074
+ TestFlushBehavior (view.get (), base, caches, /* do_erasing_flush=*/ true );
1095
1075
}
1096
1076
}
1097
1077
0 commit comments