// Test not yet to scale re: total data points. TEST_F(ProjectFixture,Profile_DeserializeAnalysis) { // ETH@20121108 - When this test is running reasonably well, replace the beginning of // UpdateAnalysis with this. ProjectDatabase db = getPopulatedDatabase(100,500,false,toPath("./UpdateAnalysis")); AnalysisRecordVector records = AnalysisRecord::getAnalysisRecords(db); ASSERT_EQ(1u,records.size()); AnalysisRecord record = records[0]; // time the process of deserializing an analysis ptime start = microsec_clock::local_time(); Analysis analysis = record.analysis(); time_duration deserializeTime = microsec_clock::local_time() - start; std::cout << "Time: " << to_simple_string(deserializeTime) << std::endl; }
TEST_F(AnalysisDriverFixture, DDACE_LatinHypercube_Continuous) { { // GET SIMPLE PROJECT SimpleProject project = getCleanSimpleProject("DDACE_LatinHypercube_Continuous"); Analysis analysis = project.analysis(); // SET PROBLEM Problem problem = retrieveProblem("Continuous",true,false); analysis.setProblem(problem); // DEFINE SEED Model model = model::exampleModel(); openstudio::path p = toPath("./example.osm"); model.save(p,true); FileReference seedModel(p); analysis.setSeed(seedModel); // CREATE ANALYSIS DDACEAlgorithmOptions algOptions(DDACEAlgorithmType::lhs); DDACEAlgorithm algorithm(algOptions); analysis.setAlgorithm(algorithm); // RUN ANALYSIS AnalysisDriver driver = project.analysisDriver(); AnalysisRunOptions runOptions = standardRunOptions(project.projectDir()); CurrentAnalysis currentAnalysis = driver.run(analysis,runOptions); EXPECT_TRUE(driver.waitForFinished()); boost::optional<runmanager::JobErrors> jobErrors = currentAnalysis.dakotaJobErrors(); ASSERT_TRUE(jobErrors); EXPECT_FALSE(jobErrors->errors().empty()); // require specification of number of samples EXPECT_TRUE(driver.currentAnalyses().empty()); Table summary = currentAnalysis.analysis().summaryTable(); EXPECT_EQ(1u,summary.nRows()); // no points project.clearAllResults(); algOptions.setSamples(4); EXPECT_EQ(4,analysis.algorithm()->cast<DDACEAlgorithm>().ddaceAlgorithmOptions().samples()); currentAnalysis = driver.run(analysis,runOptions); EXPECT_TRUE(driver.waitForFinished()); jobErrors = currentAnalysis.dakotaJobErrors(); ASSERT_TRUE(jobErrors); EXPECT_TRUE(jobErrors->errors().empty()); EXPECT_TRUE(driver.currentAnalyses().empty()); summary = currentAnalysis.analysis().summaryTable(); EXPECT_EQ(5u,summary.nRows()); summary.save(project.projectDir() / toPath("summary.csv")); BOOST_FOREACH(const DataPoint& dataPoint,analysis.dataPoints()) { EXPECT_TRUE(dataPoint.isComplete()); EXPECT_FALSE(dataPoint.failed()); // EXPECT_FALSE(dataPoint.responseValues().empty()); } ASSERT_TRUE(analysis.algorithm()); EXPECT_TRUE(analysis.algorithm()->isComplete()); EXPECT_FALSE(analysis.algorithm()->failed()); { AnalysisRecord analysisRecord = project.analysisRecord(); Analysis analysisCopy = analysisRecord.analysis(); ASSERT_TRUE(analysisCopy.algorithm()); EXPECT_TRUE(analysisCopy.algorithm()->isComplete()); EXPECT_FALSE(analysisCopy.algorithm()->failed()); } } LOG(Info,"Restart from existing project."); // Get existing project SimpleProject project = getSimpleProject("DDACE_LatinHypercube_Continuous"); EXPECT_FALSE(project.analysisIsLoaded()); // make sure starting fresh Analysis analysis = project.analysis(); EXPECT_FALSE(analysis.isDirty()); // Add custom data point std::vector<QVariant> values; values.push_back(0.0); values.push_back(0.8); values.push_back(int(0)); OptionalDataPoint dataPoint = analysis.problem().createDataPoint(values); ASSERT_TRUE(dataPoint); analysis.addDataPoint(*dataPoint); EXPECT_EQ(1u,analysis.dataPointsToQueue().size()); ASSERT_TRUE(analysis.algorithm()); EXPECT_TRUE(analysis.algorithm()->isComplete()); EXPECT_FALSE(analysis.algorithm()->failed()); EXPECT_TRUE(analysis.isDirty()); EXPECT_FALSE(analysis.resultsAreInvalid()); EXPECT_FALSE(analysis.dataPointsAreInvalid()); // get last modified time of a file in a completed data point to make sure nothing is re-run DataPointVector completePoints = analysis.completeDataPoints(); ASSERT_FALSE(completePoints.empty()); OptionalFileReference inputFileRef = completePoints[0].osmInputData(); ASSERT_TRUE(inputFileRef); QFileInfo inputFileInfo(toQString(inputFileRef->path())); QDateTime inputFileModifiedTestTime = inputFileInfo.lastModified(); EXPECT_EQ(1u,analysis.dataPointsToQueue().size()); AnalysisDriver driver = project.analysisDriver(); CurrentAnalysis currentAnalysis = driver.run( analysis, standardRunOptions(project.projectDir())); EXPECT_TRUE(driver.waitForFinished()); boost::optional<runmanager::JobErrors> jobErrors = currentAnalysis.dakotaJobErrors(); EXPECT_FALSE(jobErrors); // should not try to re-run DakotaAlgorithm EXPECT_TRUE(driver.currentAnalyses().empty()); EXPECT_TRUE(analysis.dataPointsToQueue().empty()); Table summary = currentAnalysis.analysis().summaryTable(); EXPECT_EQ(6u,summary.nRows()); summary.save(project.projectDir() / toPath("summary_post_restart.csv")); // RunManager should not re-run any data points EXPECT_EQ(inputFileModifiedTestTime,inputFileInfo.lastModified()); }
TEST_F(ProjectFixture, DataPointTagRecords) { // create Analysis with one DataPoint with one Tag ("test tag") analysis::Problem problem("problem",analysis::VariableVector(),runmanager::Workflow()); FileReference seed(toPath("in.osm")); analysis::Analysis analysis("analysis",problem,seed); analysis::DataPoint dataPoint = problem.createDataPoint(std::vector<QVariant>()).get(); dataPoint.addTag("test tag"); analysis.addDataPoint(dataPoint); // make sure tag records follow data points around. // trying to replicate issue where data point tag records get repointed to // file reference record with id 0. { // save analysis to a new database ProjectDatabase database = getCleanDatabase("DataPointTagRecords"); AnalysisRecord analysisRecord(analysis,database); database.save(); ASSERT_EQ(1u,analysisRecord.dataPointRecords().size()); DataPointRecord dataPointRecord = analysisRecord.dataPointRecords()[0]; ASSERT_EQ(1u,dataPointRecord.tagRecords().size()); TagRecord tagRecord = dataPointRecord.tagRecords()[0]; EXPECT_EQ("test tag",tagRecord.name()); analysis::DataPoint dataPoint = dataPointRecord.dataPoint(); ASSERT_EQ(1u,dataPoint.tags().size()); EXPECT_EQ("test tag",dataPoint.tags()[0].name()); analysis::Analysis analysis = analysisRecord.analysis(); ASSERT_EQ(1u,analysis.dataPoints().size()); dataPoint = analysis.dataPoints()[0]; ASSERT_EQ(1u,dataPoint.tags().size()); EXPECT_EQ("test tag",dataPoint.tags()[0].name()); } NameFinder<TagRecord> testRecordFinder("test tag"); NameFinder<TagRecord> anotherTestRecordFinder("another test"); NameFinder<Tag> testTagFinder("test tag"); NameFinder<Tag> anotherTestTagFinder("another test"); { ProjectDatabase database = getExistingDatabase("DataPointTagRecords"); ASSERT_EQ(1u,AnalysisRecord::getAnalysisRecords(database).size()); AnalysisRecord analysisRecord = AnalysisRecord::getAnalysisRecords(database)[0]; ASSERT_EQ(1u,analysisRecord.dataPointRecords().size()); DataPointRecord dataPointRecord = analysisRecord.dataPointRecords()[0]; ASSERT_EQ(1u,dataPointRecord.tagRecords().size()); TagRecord tagRecord = dataPointRecord.tagRecords()[0]; EXPECT_EQ("test tag",tagRecord.name()); analysis::DataPoint dataPoint = dataPointRecord.dataPoint(); ASSERT_EQ(1u,dataPoint.tags().size()); EXPECT_EQ("test tag",dataPoint.tags()[0].name()); analysis::Analysis analysis = analysisRecord.analysis(); ASSERT_EQ(1u,analysis.dataPoints().size()); dataPoint = analysis.dataPoints()[0]; ASSERT_EQ(1u,dataPoint.tags().size()); EXPECT_EQ("test tag",dataPoint.tags()[0].name()); // adding a second tag and resaving the analysis dataPoint.addTag("another test"); analysisRecord = AnalysisRecord(analysis,database); bool test = database.save(); EXPECT_TRUE(test); ASSERT_EQ(1u,analysisRecord.dataPointRecords().size()); dataPointRecord = analysisRecord.dataPointRecords()[0]; TagRecordVector tagRecords = dataPointRecord.tagRecords(); EXPECT_EQ(2u,tagRecords.size()); EXPECT_FALSE(std::find_if(tagRecords.begin(),tagRecords.end(),testRecordFinder) == tagRecords.end()); EXPECT_FALSE(std::find_if(tagRecords.begin(),tagRecords.end(),anotherTestRecordFinder) == tagRecords.end()); dataPoint = dataPointRecord.dataPoint(); TagVector tags = dataPoint.tags(); EXPECT_EQ(2u,tags.size()); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),testTagFinder) == tags.end()); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),anotherTestTagFinder) == tags.end()); analysis = analysisRecord.analysis(); ASSERT_EQ(1u,analysis.dataPoints().size()); dataPoint = analysis.dataPoints()[0]; tags = dataPoint.tags(); EXPECT_EQ(2u,tags.size()); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),testTagFinder) == tags.end()); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),anotherTestTagFinder) == tags.end()); tagRecords = TagRecord::getTagRecords(database); EXPECT_EQ(2u,tagRecords.size()); EXPECT_FALSE(std::find_if(tagRecords.begin(),tagRecords.end(),testRecordFinder) == tagRecords.end()); EXPECT_FALSE(std::find_if(tagRecords.begin(),tagRecords.end(),anotherTestRecordFinder) == tagRecords.end()); } { ProjectDatabase database = getExistingDatabase("DataPointTagRecords"); ASSERT_EQ(1u,AnalysisRecord::getAnalysisRecords(database).size()); AnalysisRecord analysisRecord = AnalysisRecord::getAnalysisRecords(database)[0]; ASSERT_EQ(1u,analysisRecord.dataPointRecords().size()); DataPointRecord dataPointRecord = analysisRecord.dataPointRecords()[0]; TagRecordVector tagRecords = dataPointRecord.tagRecords(); EXPECT_EQ(2u,tagRecords.size()); EXPECT_FALSE(std::find_if(tagRecords.begin(),tagRecords.end(),testRecordFinder) == tagRecords.end()); EXPECT_FALSE(std::find_if(tagRecords.begin(),tagRecords.end(),anotherTestRecordFinder) == tagRecords.end()); dataPoint = dataPointRecord.dataPoint(); TagVector tags = dataPoint.tags(); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),testTagFinder) == tags.end()); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),anotherTestTagFinder) == tags.end()); analysis = analysisRecord.analysis(); ASSERT_EQ(1u,analysis.dataPoints().size()); dataPoint = analysis.dataPoints()[0]; tags = dataPoint.tags(); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),testTagFinder) == tags.end()); EXPECT_FALSE(std::find_if(tags.begin(),tags.end(),anotherTestTagFinder) == tags.end()); } }