MeasureRecord_Impl::MeasureRecord_Impl(const analysis::Measure& measure, const MeasureRecordType& measureRecordType, const MeasureGroupRecord& measureGroupRecord, int measureVectorIndex) : ObjectRecord_Impl(measureGroupRecord.projectDatabase(), measure.uuid(), measure.name(), measure.displayName(), measure.description(), measure.versionUUID()), m_measureRecordType(measureRecordType), m_variableRecordId(measureGroupRecord.id()), m_isSelected(measure.isSelected()), m_measureVectorIndex(measureVectorIndex) {}
TEST_F(ProjectFixture, RubyMeasureRecord_RubyScript) { // Measures MeasureVector measures; // Null Measure measures.push_back(NullMeasure()); openstudio::path rubyLibDirPath = openstudio::toPath(rubyLibDir()); openstudio::path perturbScript = rubyLibDirPath/openstudio::toPath("openstudio/runmanager/rubyscripts/PerturbObject.rb"); RubyMeasure rubyMeasure(perturbScript, FileReferenceType::OSM, FileReferenceType::OSM); rubyMeasure.addArgument("inputPath", "in.osm"); rubyMeasure.addArgument("outputPath", "out.osm"); rubyMeasure.addArgument("objectType", "OS:Material"); rubyMeasure.addArgument("nameRegex", "I02 50mm insulation board"); rubyMeasure.addArgument("field", "3"); rubyMeasure.addArgument("value", "0.10"); // RubyMeasure measures.push_back(rubyMeasure); // Variables VariableVector variables; variables.push_back(MeasureGroup("Wall Construction",measures)); // Workflow openstudio::runmanager::Workflow workflow; // Problem Problem problem("Variable",variables,workflow); // Save to database { ProjectDatabase database = getCleanDatabase("RubyMeasureRecord_RubyScript"); bool didStartTransaction = database.startTransaction(); EXPECT_TRUE(didStartTransaction); // Problem Record ProblemRecord problemRecord = ProblemRecord::factoryFromProblem(problem,database); database.save(); if (didStartTransaction) { EXPECT_TRUE(database.commitTransaction()); } // Variable Records InputVariableRecordVector measureGroupRecords = problemRecord.inputVariableRecords(); EXPECT_EQ(1u,measureGroupRecords.size()); // Discrete Variable Record MeasureGroupRecord measureGroupRecord = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); EXPECT_EQ(2u,measureGroupRecord.measureRecordIds(true).size()); EXPECT_EQ(2u,measureGroupRecord.measureRecords(true).size()); RubyMeasureRecord rubyMeasureRecord(rubyMeasure,measureGroupRecord,0); EXPECT_EQ("MeasureRecords",rubyMeasureRecord.databaseTableName()); ObjectRecordVector objectRecordVector = rubyMeasureRecord.children(); EXPECT_EQ(6u,objectRecordVector.size()); // arguments objectRecordVector = rubyMeasureRecord.resources(); EXPECT_EQ(1u,objectRecordVector.size()); // script FileReferenceRecord scriptRecord = rubyMeasureRecord.fileReferenceRecord(); EXPECT_EQ("FileReferenceRecords",scriptRecord.databaseTableName()); Measure measure = rubyMeasureRecord.measure(); EXPECT_EQ(true,measure.isSelected()); ASSERT_TRUE(measure.optionalCast<RubyMeasure>()); RubyMeasure rubyMeasureCopy = measure.cast<RubyMeasure>(); EXPECT_FALSE(rubyMeasureCopy.usesBCLMeasure()); EXPECT_FALSE(rubyMeasureCopy.isUserScript()); EXPECT_EQ(6u,rubyMeasureCopy.arguments().size()); MeasureGroupRecord measureGroupRecordFromRuby = rubyMeasureRecord.measureGroupRecord().get(); EXPECT_EQ(measureGroupRecord.databaseTableName(),measureGroupRecordFromRuby.databaseTableName()); EXPECT_EQ(measureGroupRecord.id(),measureGroupRecordFromRuby.id()); } // Reopen database { ProjectDatabase database = getExistingDatabase("RubyMeasureRecord_RubyScript"); ProblemRecordVector problemRecords = ProblemRecord::getProblemRecords(database); ASSERT_FALSE(problemRecords.empty()); EXPECT_EQ(1u,problemRecords.size()); ProblemRecord problemRecord = problemRecords[0]; // COPY-PASTED FROM ABOVE // Variable Records InputVariableRecordVector measureGroupRecords = problemRecord.inputVariableRecords(); EXPECT_EQ(1u,measureGroupRecords.size()); // Discrete Variable Record MeasureGroupRecord measureGroupRecord = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); EXPECT_EQ(2u,measureGroupRecord.measureRecordIds(true).size()); EXPECT_EQ(2u,measureGroupRecord.measureRecords(true).size()); RubyMeasureRecord rubyMeasureRecord(rubyMeasure,measureGroupRecord,0); EXPECT_EQ("MeasureRecords",rubyMeasureRecord.databaseTableName()); ObjectRecordVector objectRecordVector = rubyMeasureRecord.children(); EXPECT_EQ(6u,objectRecordVector.size()); // arguments objectRecordVector = rubyMeasureRecord.resources(); EXPECT_EQ(1u,objectRecordVector.size()); // script FileReferenceRecord scriptRecord = rubyMeasureRecord.fileReferenceRecord(); EXPECT_EQ("FileReferenceRecords",scriptRecord.databaseTableName()); Measure measure = rubyMeasureRecord.measure(); EXPECT_EQ(true,measure.isSelected()); ASSERT_TRUE(measure.optionalCast<RubyMeasure>()); RubyMeasure rubyMeasureCopy = measure.cast<RubyMeasure>(); EXPECT_FALSE(rubyMeasureCopy.usesBCLMeasure()); EXPECT_FALSE(rubyMeasureCopy.isUserScript()); EXPECT_EQ(6u,rubyMeasureCopy.arguments().size()); MeasureGroupRecord measureGroupRecordFromRuby = rubyMeasureRecord.measureGroupRecord().get(); EXPECT_EQ(measureGroupRecord.databaseTableName(),measureGroupRecordFromRuby.databaseTableName()); EXPECT_EQ(measureGroupRecord.id(),measureGroupRecordFromRuby.id()); } }
TEST_F(ProjectFixture, ProblemRecord) { //Logger::instance().logLevel(Debug); openstudio::path rubyLibDirPath = openstudio::toPath(rubyLibDir()); openstudio::path perturbScript = rubyLibDirPath/openstudio::toPath("openstudio/runmanager/rubyscripts/PerturbObject.rb"); // Workflow Workflow workflow; // Variables VariableVector variables; // Measures MeasureVector perturbations1; MeasureVector perturbations2; // Discrete Variable Records InputVariableRecordVector measureGroupRecords; { // Problem Problem problem("0 Variables",variables,workflow); // Project Database ProjectDatabase database = getCleanDatabase("ProblemRecord"); // Problem Record ProblemRecord problemRecord = ProblemRecord::factoryFromProblem(problem,database); InputVariableRecordVector measureGroupRecords = problemRecord.inputVariableRecords(); EXPECT_EQ(0u,measureGroupRecords.size()); } { perturbations1.push_back(NullMeasure()); variables.push_back(analysis::MeasureGroup("",perturbations1)); // Problem Problem problem("perturbations1",variables,workflow); // Project Database ProjectDatabase database = getCleanDatabase("ProblemRecord"); // Problem Record ProblemRecord problemRecord = ProblemRecord::factoryFromProblem(problem,database); measureGroupRecords = problemRecord.inputVariableRecords(); EXPECT_EQ(1u,measureGroupRecords.size()); // Discrete Variable Record MeasureGroupRecord measureGroupRecord = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); EXPECT_EQ(1u,measureGroupRecord.measureRecordIds(true).size()); EXPECT_EQ(1u,measureGroupRecord.measureRecords(true).size()); } { variables.push_back(MeasureGroup("Wall Construction",perturbations1)); // Problem Problem problem("perturbations1",variables,workflow); // Project Database ProjectDatabase database = getCleanDatabase("ProblemRecord"); // Problem Record ProblemRecord problemRecord = ProblemRecord::factoryFromProblem(problem,database); measureGroupRecords = problemRecord.inputVariableRecords(); EXPECT_EQ(2u,measureGroupRecords.size()); // Discrete Variable Record MeasureGroupRecord variable1 = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); EXPECT_EQ(static_cast<unsigned>(1), variable1.measureRecords(true).size()); EXPECT_EQ(static_cast<unsigned>(1), variable1.measureRecords(false).size()); EXPECT_EQ(static_cast<unsigned>(2), problemRecord.inputVariableRecords().size()); } { perturbations2.push_back(NullMeasure()); variables.push_back(MeasureGroup("Roof Construction",perturbations2)); // Problem Problem problem("perturbations2",variables,workflow); // Project Database ProjectDatabase database = getCleanDatabase("ProblemRecord"); // Problem Record ProblemRecord problemRecord = ProblemRecord::factoryFromProblem(problem,database); measureGroupRecords = problemRecord.inputVariableRecords(); EXPECT_EQ(3u,measureGroupRecords.size()); // Discrete Variable Record MeasureGroupRecord variable1 = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); MeasureGroupRecord variable2 = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); MeasureGroupRecord variable3 = measureGroupRecords.at(0).cast<MeasureGroupRecord>(); EXPECT_EQ(static_cast<size_t>(1), variable1.measureRecords(true).size()); EXPECT_EQ(static_cast<size_t>(1), variable1.measureRecords(false).size()); EXPECT_EQ(static_cast<size_t>(3), problemRecord.inputVariableRecords().size()); UUID uuid1; UUID versionUUID1; NullMeasure nullMeasure1(uuid1,versionUUID1,"","","",true); NullMeasureRecord nullMeasureRecord1(nullMeasure1,variable1,0); EXPECT_EQ(static_cast<unsigned>(2), variable1.measureRecords(true).size()); EXPECT_EQ(static_cast<unsigned>(2), variable1.measureRecords(false).size()); EXPECT_EQ(static_cast<unsigned>(2), variable2.measureRecords(true).size()); EXPECT_EQ(static_cast<unsigned>(2), variable2.measureRecords(false).size()); UUID uuid2; UUID versionUUID2; NullMeasure nullMeasure2(uuid2,versionUUID2,"","","",true); NullMeasureRecord nullMeasureRecord2(nullMeasure2,variable1,0); EXPECT_EQ(static_cast<unsigned>(2), variable1.measureRecords(true).size()); EXPECT_EQ(static_cast<unsigned>(2), variable1.measureRecords(false).size()); EXPECT_EQ(static_cast<unsigned>(2), variable2.measureRecords(true).size()); EXPECT_EQ(static_cast<unsigned>(2), variable2.measureRecords(false).size()); MeasureVector perturbations; MeasureGroup measureGroup("Wall Construction",perturbations); MeasureGroupRecord measureGroupRecord(measureGroup, problemRecord,0); openstudio::path rubyPath = resourcesPath() / openstudio::toPath("project/rubyscripts/*.rb"); openstudio::path perturbScript = rubyPath/openstudio::toPath("openstudio/runmanager/rubyscripts/PerturbObject.rb"); RubyMeasure rubyMeasure(perturbScript,FileReferenceType::OSM,FileReferenceType::OSM); RubyMeasureRecord rubyMeasureRecord1(rubyMeasure,measureGroupRecord,0); EXPECT_EQ(static_cast<unsigned>(1), measureGroupRecord.numMeasures(true)); EXPECT_EQ(static_cast<unsigned>(1), measureGroupRecord.measureRecordIds(true).size()); EXPECT_EQ(static_cast<unsigned>(1), measureGroupRecord.measureRecords(true).size()); RubyMeasureRecord rubyMeasureRecord(rubyMeasure,measureGroupRecord,0); EXPECT_EQ(static_cast<unsigned>(1), measureGroupRecord.numMeasures(true)); EXPECT_EQ(static_cast<unsigned>(1), measureGroupRecord.measureRecordIds(true).size()); EXPECT_EQ(rubyMeasureRecord.id(), measureGroupRecord.measureRecordIds(true)[0]); EXPECT_EQ(static_cast<unsigned>(1), measureGroupRecord.measureRecords(true).size()); EXPECT_EQ(rubyMeasureRecord.handle(), measureGroupRecord.measureRecords(true)[0].handle()); } }