Skip to content

Commit 76ade85

Browse files
committed
Add test for schema evolution of auto_ptr -> unique_ptr
1 parent 4eb6ddc commit 76ade85

File tree

7 files changed

+106
-24
lines changed

7 files changed

+106
-24
lines changed

DataFormats/TestObjects/interface/SchemaEvolutionTestObjects.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef DataFormats_TestObjects_SchemaEvolutionTestObjects_h
22
#define DataFormats_TestObjects_SchemaEvolutionTestObjects_h
33

4+
#include <memory>
45
#include <vector>
56

67
// Don't delete the following comment line.
@@ -23,7 +24,6 @@
2324

2425
#include <array>
2526
#include <list>
26-
#include <memory>
2727
#include <unordered_map>
2828

2929
#endif
@@ -208,6 +208,37 @@ namespace edmtest {
208208
#endif
209209
};
210210

211+
class SchemaEvolutionAutoPtrToUniquePtr {
212+
public:
213+
SchemaEvolutionAutoPtrToUniquePtr(SchemaEvolutionAutoPtrToUniquePtr&&) = delete;
214+
SchemaEvolutionAutoPtrToUniquePtr& operator=(SchemaEvolutionAutoPtrToUniquePtr const&) = delete;
215+
SchemaEvolutionAutoPtrToUniquePtr& operator=(SchemaEvolutionAutoPtrToUniquePtr&&) = delete;
216+
217+
SchemaEvolutionAutoPtrToUniquePtr() : a_(0), b_(0) {}
218+
~SchemaEvolutionAutoPtrToUniquePtr() {}
219+
#if defined DataFormats_TestObjects_USE_OLD
220+
SchemaEvolutionAutoPtrToUniquePtr(SchemaEvolutionAutoPtrToUniquePtr const& other)
221+
: a_(other.a_), b_(other.b_), contained_(new SchemaEvolutionContained(other.contained_->c_)) {}
222+
223+
SchemaEvolutionAutoPtrToUniquePtr(int a, int b, int c)
224+
: a_(a), b_(b), contained_(new SchemaEvolutionContained(c)) {}
225+
int a_;
226+
int b_;
227+
#pragma GCC diagnostic push
228+
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
229+
std::auto_ptr<SchemaEvolutionContained> contained_;
230+
#pragma GCC diagnostic pop
231+
#else
232+
SchemaEvolutionAutoPtrToUniquePtr(int a, int b, int c)
233+
: a_(a), b_(b), contained_(std::make_unique<SchemaEvolutionContained>(c)) {}
234+
SchemaEvolutionAutoPtrToUniquePtr(SchemaEvolutionAutoPtrToUniquePtr const& other)
235+
: a_(other.a_), b_(other.b_), contained_(std::make_unique<SchemaEvolutionContained>(other.contained_->c_)) {}
236+
int a_;
237+
int b_;
238+
std::unique_ptr<SchemaEvolutionContained> contained_;
239+
#endif
240+
};
241+
211242
class SchemaEvolutionCArrayToStdArray {
212243
public:
213244
#if defined DataFormats_TestObjects_USE_OLD
@@ -285,6 +316,7 @@ namespace edmtest {
285316
SchemaEvolutionAddBase const&,
286317
SchemaEvolutionPointerToMember const&,
287318
SchemaEvolutionPointerToUniquePtr const&,
319+
SchemaEvolutionAutoPtrToUniquePtr const&,
288320
SchemaEvolutionCArrayToStdArray const&,
289321
// SchemaEvolutionCArrayToStdVector const&,
290322
SchemaEvolutionVectorToList const&,
@@ -305,6 +337,7 @@ namespace edmtest {
305337
SchemaEvolutionAddBase addBase_;
306338
SchemaEvolutionPointerToMember pointerToMember_;
307339
SchemaEvolutionPointerToUniquePtr pointerToUniquePtr_;
340+
SchemaEvolutionAutoPtrToUniquePtr autoPtrToUniquePtr_;
308341
SchemaEvolutionCArrayToStdArray cArrayToStdArray_;
309342
// This one is commented out because it fails reading an old format
310343
// input file with an executable built with the modified format.

DataFormats/TestObjects/src/SchemaEvolutionTestObjects.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace edmtest {
1313
SchemaEvolutionAddBase const& addBase,
1414
SchemaEvolutionPointerToMember const& pointerToMember,
1515
SchemaEvolutionPointerToUniquePtr const& pointerToUniquePtr,
16+
SchemaEvolutionAutoPtrToUniquePtr const& autoPtrToUniquePtr,
1617
SchemaEvolutionCArrayToStdArray const& cArrayToStdArray,
1718
// SchemaEvolutionCArrayToStdVector const& cArrayToStdVector,
1819
SchemaEvolutionVectorToList const& vectorToList,
@@ -27,6 +28,7 @@ namespace edmtest {
2728
addBase_(addBase),
2829
pointerToMember_(pointerToMember),
2930
pointerToUniquePtr_(pointerToUniquePtr),
31+
autoPtrToUniquePtr_(autoPtrToUniquePtr),
3032
cArrayToStdArray_(cArrayToStdArray),
3133
// cArrayToStdVector_(cArrayToStdVector),
3234
vectorToList_(vectorToList),

DataFormats/TestObjects/src/classes_def.xml

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,20 @@ exception when running testMissingDictionaryChecking_cfg.py.
295295
</class>
296296
<class name="edm::Wrapper<edmtest::VectorVectorTop>"/>
297297

298+
<!-- about VectorVectorElement versioning below
299+
300+
* v3 is with DataFormats_TestObjects_USE_OLD defined in
301+
SchemaEvolutionTestObjects.h, but without
302+
SchemaEvolutionAutoPtrToUniquePtr member. It was used for the 13_0_0
303+
test file that did not include ROOT StreamerInfo in some cases.
304+
* v4 is with DataFormats_TestObjects_USE_OLD defined in
305+
SchemaEvolutionTestObjects.h and with
306+
SchemaEvolutionAutoPtrToUniquePtr member
307+
* v5 is with DataFormats_TestObjects_USE_OLD undefined in
308+
SchemaEvolutionTestObjects.h and with
309+
SchemaEvolutionAutoPtrToUniquePtr member
310+
-->
311+
298312
<!--
299313
<class name="edmtest::SchemaEvolutionChangeOrder" ClassVersion="3">
300314
<version ClassVersion="3" checksum="3343384061"/>
@@ -329,6 +343,10 @@ exception when running testMissingDictionaryChecking_cfg.py.
329343
<class name="edmtest::SchemaEvolutionPointerToUniquePtr" ClassVersion="3">
330344
<version ClassVersion="3" checksum="1545257825"/>
331345
</class>
346+
<class name="std::auto_ptr<edmtest::SchemaEvolutionContained>"/>
347+
<class name="edmtest::SchemaEvolutionAutoPtrToUniquePtr" ClassVersion="3">
348+
<version ClassVersion="3" checksum="1427898213"/>
349+
</class>
332350
<class name="edmtest::SchemaEvolutionCArrayToStdArray" ClassVersion="3">
333351
<version ClassVersion="3" checksum="2848265407"/>
334352
</class>
@@ -341,7 +359,8 @@ exception when running testMissingDictionaryChecking_cfg.py.
341359
<class name="edmtest::SchemaEvolutionMapToUnorderedMap" ClassVersion="3">
342360
<version ClassVersion="3" checksum="4049010227"/>
343361
</class>
344-
<class name="edmtest::VectorVectorElement" ClassVersion="3">
362+
<class name="edmtest::VectorVectorElement" ClassVersion="4">
363+
<version ClassVersion="4" checksum="1382603781"/>
345364
<version ClassVersion="3" checksum="62209940"/>
346365
</class>
347366
<class name="edmtest::VectorVectorElementNonSplit" ClassVersion="3">
@@ -350,70 +369,76 @@ exception when running testMissingDictionaryChecking_cfg.py.
350369
-->
351370

352371
<class name="edmtest::SchemaEvolutionChangeOrder" ClassVersion="4">
353-
<version ClassVersion="3" checksum="3343384061"/>
354372
<version ClassVersion="4" checksum="3343403663"/>
373+
<version ClassVersion="3" checksum="3343384061"/>
355374
</class>
356375
<class name="edmtest::SchemaEvolutionAddMember" ClassVersion="4">
357-
<version ClassVersion="3" checksum="1610659294"/>
358376
<version ClassVersion="4" checksum="548196481"/>
377+
<version ClassVersion="3" checksum="1610659294"/>
359378
</class>
360379
<class name="edmtest::SchemaEvolutionRemoveMember" ClassVersion="4">
361-
<version ClassVersion="3" checksum="868607665"/>
362380
<version ClassVersion="4" checksum="2937585049"/>
381+
<version ClassVersion="3" checksum="868607665"/>
363382
</class>
364383
<class name="edmtest::SchemaEvolutionMoveToBase" ClassVersion="4">
365-
<version ClassVersion="3" checksum="765817207"/>
366384
<version ClassVersion="4" checksum="288892591"/>
385+
<version ClassVersion="3" checksum="765817207"/>
367386
</class>
368387
<class name="edmtest::SchemaEvolutionBase" ClassVersion="4">
369-
<version ClassVersion="3" checksum="3149060785"/>
370388
<version ClassVersion="4" checksum="717584440"/>
389+
<version ClassVersion="3" checksum="3149060785"/>
371390
</class>
372391
<class name="edmtest::SchemaEvolutionChangeType" ClassVersion="4">
373-
<version ClassVersion="3" checksum="1127956593"/>
374392
<version ClassVersion="4" checksum="231165691"/>
393+
<version ClassVersion="3" checksum="1127956593"/>
375394
</class>
376395
<class name="edmtest::SchemaEvolutionBaseA" ClassVersion="3">
377396
<version ClassVersion="3" checksum="857239365"/>
378397
</class>
379398
<class name="edmtest::SchemaEvolutionAddBase" ClassVersion="4">
380-
<version ClassVersion="3" checksum="2069239453"/>
381399
<version ClassVersion="4" checksum="1505648056"/>
400+
<version ClassVersion="3" checksum="2069239453"/>
382401
</class>
383402
<class name="edmtest::SchemaEvolutionContained" ClassVersion="3">
384403
<version ClassVersion="3" checksum="726645586"/>
385404
</class>
386405
<class name="edmtest::SchemaEvolutionPointerToMember" ClassVersion="4">
387-
<version ClassVersion="3" checksum="113169654"/>
388406
<version ClassVersion="4" checksum="37723204"/>
407+
<version ClassVersion="3" checksum="113169654"/>
389408
</class>
390409
<class name="edmtest::SchemaEvolutionPointerToUniquePtr" ClassVersion="4">
391-
<version ClassVersion="3" checksum="1545257825"/>
392410
<version ClassVersion="4" checksum="3437951039"/>
411+
<version ClassVersion="3" checksum="1545257825"/>
412+
</class>
413+
<class name="std::auto_ptr<edmtest::SchemaEvolutionContained>"/>
414+
<class name="edmtest::SchemaEvolutionAutoPtrToUniquePtr" ClassVersion="4">
415+
<version ClassVersion="4" checksum="2908944573"/>
416+
<version ClassVersion="3" checksum="1427898213"/>
393417
</class>
394418
<class name="edmtest::SchemaEvolutionCArrayToStdArray" ClassVersion="4">
395-
<version ClassVersion="3" checksum="2848265407"/>
396419
<version ClassVersion="4" checksum="66373354"/>
420+
<version ClassVersion="3" checksum="2848265407"/>
397421
</class>
398422
<class name="edmtest::SchemaEvolutionCArrayToStdVector" ClassVersion="4">
399-
<version ClassVersion="3" checksum="3834066865"/>
400423
<version ClassVersion="4" checksum="1835343327"/>
424+
<version ClassVersion="3" checksum="3834066865"/>
401425
</class>
402426
<class name="edmtest::SchemaEvolutionVectorToList" ClassVersion="4">
403-
<version ClassVersion="3" checksum="354293136"/>
404427
<version ClassVersion="4" checksum="3857065429"/>
428+
<version ClassVersion="3" checksum="354293136"/>
405429
</class>
406430
<class name="edmtest::SchemaEvolutionMapToUnorderedMap" ClassVersion="4">
407-
<version ClassVersion="3" checksum="4049010227"/>
408431
<version ClassVersion="4" checksum="3999644942"/>
432+
<version ClassVersion="3" checksum="4049010227"/>
409433
</class>
410-
<class name="edmtest::VectorVectorElement" ClassVersion="4">
434+
<class name="edmtest::VectorVectorElement" ClassVersion="5">
435+
<version ClassVersion="5" checksum="4210670970"/>
436+
<version ClassVersion="4" checksum="1382603781"/>
411437
<version ClassVersion="3" checksum="62209940"/>
412-
<version ClassVersion="4" checksum="4237216747"/>
413438
</class>
414439
<class name="edmtest::VectorVectorElementNonSplit" ClassVersion="4">
415-
<version ClassVersion="3" checksum="15875282"/>
416440
<version ClassVersion="4" checksum="3857705420"/>
441+
<version ClassVersion="3" checksum="15875282"/>
417442
</class>
418443

419444
</lcgdict>

IOPool/Input/test/SchemaEvolutionTestRead.cc

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,14 @@ namespace edmtest {
4848
const std::vector<int> expectedVectorVectorIntegralValues_;
4949
const edm::EDGetTokenT<VectorVectorTop> vectorVectorToken_;
5050
const edm::EDGetTokenT<VectorVectorTopNonSplit> vectorVectorNonSplitToken_;
51+
const bool testAutoPtrToUniquePtr_;
5152
};
5253

5354
SchemaEvolutionTestRead::SchemaEvolutionTestRead(edm::ParameterSet const& iPSet)
5455
: expectedVectorVectorIntegralValues_(iPSet.getParameter<std::vector<int>>("expectedVectorVectorIntegralValues")),
5556
vectorVectorToken_(consumes(iPSet.getParameter<edm::InputTag>("vectorVectorTag"))),
56-
vectorVectorNonSplitToken_(consumes(iPSet.getParameter<edm::InputTag>("vectorVectorTag"))) {
57+
vectorVectorNonSplitToken_(consumes(iPSet.getParameter<edm::InputTag>("vectorVectorTag"))),
58+
testAutoPtrToUniquePtr_(iPSet.getParameter<bool>("testAutoPtrToUniquePtr")) {
5759
if (expectedVectorVectorIntegralValues_.size() != 15) {
5860
throwWithMessageFromConstructor("test configuration error, expectedVectorVectorIntegralValues must have size 15");
5961
}
@@ -68,6 +70,7 @@ namespace edmtest {
6870
edm::ParameterSetDescription desc;
6971
desc.add<std::vector<int>>("expectedVectorVectorIntegralValues");
7072
desc.add<edm::InputTag>("vectorVectorTag");
73+
desc.add<bool>("testAutoPtrToUniquePtr", false);
7174
descriptions.addDefault(desc);
7275
}
7376

@@ -170,6 +173,19 @@ namespace edmtest {
170173
throwWithMessage("analyzeVectorVector, pointerToUniquePtr c_ does not contain expected value");
171174
}
172175

176+
if (testAutoPtrToUniquePtr_){
177+
SchemaEvolutionAutoPtrToUniquePtr const& autoPtrToUniquePtr = element.autoPtrToUniquePtr_;
178+
if (autoPtrToUniquePtr.a_ != expectedVectorVectorIntegralValues_[8] + iOffset + j * 23) {
179+
throwWithMessage("analyzeVectorVector, autoPtrToUniquePtr a_ does not contain expected value");
180+
}
181+
if (autoPtrToUniquePtr.b_ != expectedVectorVectorIntegralValues_[8] + iOffset + j * 123) {
182+
throwWithMessage("analyzeVectorVector, autoPtrToUniquePtr b_ does not contain expected value");
183+
}
184+
if (autoPtrToUniquePtr.contained_->c_ != expectedVectorVectorIntegralValues_[8] + iOffset + j * 1023) {
185+
throwWithMessage("analyzeVectorVector, autoPtrToUniquePtr c_ does not contain expected value");
186+
}
187+
}
188+
173189
SchemaEvolutionCArrayToStdArray const& cArrayToStdArray = element.cArrayToStdArray_;
174190
if (cArrayToStdArray.a_[0] != expectedVectorVectorIntegralValues_[9] + iOffset + j * 19) {
175191
throwWithMessage("analyzeVectorVector, cArrayToStdArray a_[0] does not contain expected value");

IOPool/Input/test/SchemaEvolutionTestWrite.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ namespace edmtest {
103103
SchemaEvolutionPointerToUniquePtr pointerToUniquePtr(testIntegralValues_[8] + iOffset + j * 18,
104104
testIntegralValues_[8] + iOffset + j * 108,
105105
testIntegralValues_[8] + iOffset + j * 1008);
106+
SchemaEvolutionAutoPtrToUniquePtr autoPtrToUniquePtr(testIntegralValues_[8] + iOffset + j * 23,
107+
testIntegralValues_[8] + iOffset + j * 123,
108+
testIntegralValues_[8] + iOffset + j * 1023);
106109
SchemaEvolutionCArrayToStdArray cArrayToStdArray(testIntegralValues_[9] + iOffset + j * 19,
107110
testIntegralValues_[9] + iOffset + j * 109,
108111
testIntegralValues_[9] + iOffset + j * 1009);
@@ -128,6 +131,7 @@ namespace edmtest {
128131
addBase,
129132
pointerToMember,
130133
pointerToUniquePtr,
134+
autoPtrToUniquePtr,
131135
cArrayToStdArray,
132136
// cArrayToStdVector,
133137
vectorToList,

IOPool/Input/test/SchemaEvolution_test_read_cfg.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
parser.add_argument("--inputFile", type=str, help="Input file name (default: SchemaEvolutionTest.root)", default="SchemaEvolutionTest.root")
1010
parser.add_argument("--outputFileName", type=str, help="Output file name (default: SchemaEvolutionTest2.root)", default="SchemaEvolutionTest2.root")
1111
parser.add_argument("--enableStreamerInfosFix", action="store_true", help="Enable service that fixes missing streamer infos")
12+
parser.add_argument("--testAutoPtrToUniquePtr", action="store_true", help="Test AutoPtrToUniquePtr evolution")
1213
args = parser.parse_args()
1314

1415
process = cms.Process("READ")
@@ -82,7 +83,8 @@
8283
expectedVectorVectorIntegralValues = cms.vint32(
8384
11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151
8485
),
85-
vectorVectorTag = cms.InputTag("writeSchemaEvolutionTest", "", "PROD")
86+
vectorVectorTag = cms.InputTag("writeSchemaEvolutionTest", "", "PROD"),
87+
testAutoPtrToUniquePtr = cms.bool(args.testAutoPtrToUniquePtr)
8688
)
8789

8890
process.out = cms.OutputModule("PoolOutputModule",

IOPool/Input/test/testSchemaEvolution.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ LOCAL_TEST_DIR=${SCRAM_TEST_PATH}
1515
# in the later cmsRun processes, they are more likely to be
1616
# caused by a failure in ROOT schema evolution.
1717
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_create_test_file_cfg.py --splitLevel 0 || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 0' $?
18-
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel0.root || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 0' $?
18+
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel0.root --testAutoPtrToUniquePtr || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 0' $?
1919

2020
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_create_test_file_cfg.py --splitLevel 99 || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 99' $?
21-
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel99.root || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 99' $?
21+
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel99.root --testAutoPtrToUniquePtr || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 99' $?
2222

2323

2424
# For each StreamerInfo in the input file, test for existence of StreamerInfo for
@@ -94,11 +94,11 @@ done
9494

9595
file=SchemaEvolutionTestOLD15_1_0_pre5_splitLevel0.root
9696
inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $?
97-
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" || die "Failed to read old file $file" $?
97+
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" --testAutoPtrToUniquePtr || die "Failed to read old file $file" $?
9898

9999
file=SchemaEvolutionTestOLD15_1_0_pre5_splitLevel99.root
100100
inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $?
101-
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" || die "Failed to read old file $file" $?
101+
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" --testAutoPtrToUniquePtr || die "Failed to read old file $file" $?
102102

103103
file=SchemaEvolutionTestOLD13_0_0.root
104104
inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $?

0 commit comments

Comments
 (0)