void piecesTest() { VectorType<StringPiece, std::allocator<StringPiece> > pieces; VectorType<StringPiece, std::allocator<StringPiece> > pieces2; split(',', "a,b,c", pieces); EXPECT_EQ(pieces.size(), 3); EXPECT_EQ(pieces[0], "a"); EXPECT_EQ(pieces[1], "b"); EXPECT_EQ(pieces[2], "c"); pieces.clear(); split(',', "a,,c", pieces); EXPECT_EQ(pieces.size(), 3); EXPECT_EQ(pieces[0], "a"); EXPECT_EQ(pieces[1], ""); EXPECT_EQ(pieces[2], "c"); pieces.clear(); split(',', "a,,c", pieces, true); EXPECT_EQ(pieces.size(), 2); EXPECT_EQ(pieces[0], "a"); EXPECT_EQ(pieces[1], "c"); pieces.clear(); split(',', ",,a,,c,,,", pieces, true); EXPECT_EQ(pieces.size(), 2); EXPECT_EQ(pieces[0], "a"); EXPECT_EQ(pieces[1], "c"); pieces.clear(); // test multiple split w/o clear split(',', ",,a,,c,,,", pieces, true); EXPECT_EQ(pieces.size(), 2); EXPECT_EQ(pieces[0], "a"); EXPECT_EQ(pieces[1], "c"); split(',', ",,a,,c,,,", pieces, true); EXPECT_EQ(pieces.size(), 4); EXPECT_EQ(pieces[2], "a"); EXPECT_EQ(pieces[3], "c"); pieces.clear(); // test multiple split rounds split(",", "a_b,c_d", pieces); EXPECT_EQ(pieces.size(), 2); EXPECT_EQ(pieces[0], "a_b"); EXPECT_EQ(pieces[1], "c_d"); split("_", pieces[0], pieces2); EXPECT_EQ(pieces2.size(), 2); EXPECT_EQ(pieces2[0], "a"); EXPECT_EQ(pieces2[1], "b"); pieces2.clear(); split("_", pieces[1], pieces2); EXPECT_EQ(pieces2.size(), 2); EXPECT_EQ(pieces2[0], "c"); EXPECT_EQ(pieces2[1], "d"); pieces.clear(); pieces2.clear(); // test splits that with multi-line delimiter split("ab", "dabcabkdbkab", pieces, true); EXPECT_EQ(pieces.size(), 3); EXPECT_EQ(pieces[0], "d"); EXPECT_EQ(pieces[1], "c"); EXPECT_EQ(pieces[2], "kdbk"); pieces.clear(); string orig = "ab2342asdfv~~!"; split("", orig.c_str(), pieces, true); EXPECT_EQ(pieces.size(), 1); EXPECT_EQ(pieces[0], orig); pieces.clear(); split("452x;o38asfsajsdlfdf.j", "asfds", pieces, true); EXPECT_EQ(pieces.size(), 1); EXPECT_EQ(pieces[0], "asfds"); pieces.clear(); split("a", "", pieces, true); EXPECT_EQ(pieces.size(), 0); pieces.clear(); split("a", "", pieces); EXPECT_EQ(pieces.size(), 1); EXPECT_EQ(pieces[0], ""); pieces.clear(); split("a", "abcdefg", pieces, true); EXPECT_EQ(pieces.size(), 1); EXPECT_EQ(pieces[0], "bcdefg"); pieces.clear(); orig = "All, , your base, are , , belong to us"; split(", ", orig, pieces, true); EXPECT_EQ(pieces.size(), 4); EXPECT_EQ(pieces[0], "All"); EXPECT_EQ(pieces[1], "your base"); EXPECT_EQ(pieces[2], "are "); EXPECT_EQ(pieces[3], "belong to us"); pieces.clear(); split(", ", orig, pieces); EXPECT_EQ(pieces.size(), 6); EXPECT_EQ(pieces[0], "All"); EXPECT_EQ(pieces[1], ""); EXPECT_EQ(pieces[2], "your base"); EXPECT_EQ(pieces[3], "are "); EXPECT_EQ(pieces[4], ""); EXPECT_EQ(pieces[5], "belong to us"); pieces.clear(); orig = ", Facebook, rul,es!, "; split(", ", orig, pieces, true); EXPECT_EQ(pieces.size(), 2); EXPECT_EQ(pieces[0], "Facebook"); EXPECT_EQ(pieces[1], "rul,es!"); pieces.clear(); split(", ", orig, pieces); EXPECT_EQ(pieces.size(), 4); EXPECT_EQ(pieces[0], ""); EXPECT_EQ(pieces[1], "Facebook"); EXPECT_EQ(pieces[2], "rul,es!"); EXPECT_EQ(pieces[3], ""); pieces.clear(); const char* str = "a,b"; split(',', StringPiece(str), pieces); EXPECT_EQ(pieces.size(), 2); EXPECT_EQ(pieces[0], "a"); EXPECT_EQ(pieces[1], "b"); EXPECT_EQ(pieces[0].start(), str); EXPECT_EQ(pieces[1].start(), str + 2); std::set<StringPiece> unique; splitTo<StringPiece>(":", "asd:bsd:asd:asd:bsd:csd::asd", std::inserter(unique, unique.begin()), true); EXPECT_EQ(unique.size(), 3); if (unique.size() == 3) { EXPECT_EQ(*unique.begin(), "asd"); EXPECT_EQ(*--unique.end(), "csd"); } }
void splitTest() { VectorType<string, std::allocator<string> > parts; split(',', "a,b,c", parts); EXPECT_EQ(parts.size(), 3); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "b"); EXPECT_EQ(parts[2], "c"); parts.clear(); split(',', StringPiece("a,b,c"), parts); EXPECT_EQ(parts.size(), 3); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "b"); EXPECT_EQ(parts[2], "c"); parts.clear(); split(',', string("a,b,c"), parts); EXPECT_EQ(parts.size(), 3); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "b"); EXPECT_EQ(parts[2], "c"); parts.clear(); split(',', "a,,c", parts); EXPECT_EQ(parts.size(), 3); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], ""); EXPECT_EQ(parts[2], "c"); parts.clear(); split(',', string("a,,c"), parts); EXPECT_EQ(parts.size(), 3); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], ""); EXPECT_EQ(parts[2], "c"); parts.clear(); split(',', "a,,c", parts, true); EXPECT_EQ(parts.size(), 2); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "c"); parts.clear(); split(',', string("a,,c"), parts, true); EXPECT_EQ(parts.size(), 2); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "c"); parts.clear(); split(',', string(",,a,,c,,,"), parts, true); EXPECT_EQ(parts.size(), 2); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "c"); parts.clear(); // test multiple split w/o clear split(',', ",,a,,c,,,", parts, true); EXPECT_EQ(parts.size(), 2); EXPECT_EQ(parts[0], "a"); EXPECT_EQ(parts[1], "c"); split(',', ",,a,,c,,,", parts, true); EXPECT_EQ(parts.size(), 4); EXPECT_EQ(parts[2], "a"); EXPECT_EQ(parts[3], "c"); parts.clear(); // test splits that with multi-line delimiter split("ab", "dabcabkdbkab", parts, true); EXPECT_EQ(parts.size(), 3); EXPECT_EQ(parts[0], "d"); EXPECT_EQ(parts[1], "c"); EXPECT_EQ(parts[2], "kdbk"); parts.clear(); string orig = "ab2342asdfv~~!"; split("", orig, parts, true); EXPECT_EQ(parts.size(), 1); EXPECT_EQ(parts[0], orig); parts.clear(); split("452x;o38asfsajsdlfdf.j", "asfds", parts, true); EXPECT_EQ(parts.size(), 1); EXPECT_EQ(parts[0], "asfds"); parts.clear(); split("a", "", parts, true); EXPECT_EQ(parts.size(), 0); parts.clear(); split("a", "", parts); EXPECT_EQ(parts.size(), 1); EXPECT_EQ(parts[0], ""); parts.clear(); split("a", StringPiece(), parts, true); EXPECT_EQ(parts.size(), 0); parts.clear(); split("a", StringPiece(), parts); EXPECT_EQ(parts.size(), 1); EXPECT_EQ(parts[0], ""); parts.clear(); split("a", "abcdefg", parts, true); EXPECT_EQ(parts.size(), 1); EXPECT_EQ(parts[0], "bcdefg"); parts.clear(); orig = "All, , your base, are , , belong to us"; split(", ", orig, parts, true); EXPECT_EQ(parts.size(), 4); EXPECT_EQ(parts[0], "All"); EXPECT_EQ(parts[1], "your base"); EXPECT_EQ(parts[2], "are "); EXPECT_EQ(parts[3], "belong to us"); parts.clear(); split(", ", orig, parts); EXPECT_EQ(parts.size(), 6); EXPECT_EQ(parts[0], "All"); EXPECT_EQ(parts[1], ""); EXPECT_EQ(parts[2], "your base"); EXPECT_EQ(parts[3], "are "); EXPECT_EQ(parts[4], ""); EXPECT_EQ(parts[5], "belong to us"); parts.clear(); orig = ", Facebook, rul,es!, "; split(", ", orig, parts, true); EXPECT_EQ(parts.size(), 2); EXPECT_EQ(parts[0], "Facebook"); EXPECT_EQ(parts[1], "rul,es!"); parts.clear(); split(", ", orig, parts); EXPECT_EQ(parts.size(), 4); EXPECT_EQ(parts[0], ""); EXPECT_EQ(parts[1], "Facebook"); EXPECT_EQ(parts[2], "rul,es!"); EXPECT_EQ(parts[3], ""); }
Observations ReadData ::ReadObservations(DataSettings &DS) { Observations Obs; std::ifstream IndivID(DS.GetPathToGroup()); std::ifstream TimePointsFile(DS.GetPathToTimepoints()); std::ifstream LandmarksFile(DS.GetPathToLandmarks()); std::ifstream CognitiveScoresFile(DS.GetPathToCognitiveScores()); std::string GroupLine, TimePointsLine, LandmarksLine, CognitiveScoresLine; unsigned int CurrentSubjectID = -1; VectorType TimePoints; std::vector<VectorType> Landmarks; std::vector<VectorType> CognitiveScores; while(getline(IndivID, GroupLine)) { if(CurrentSubjectID == -1) CurrentSubjectID = std::stoi(GroupLine); unsigned int NewSubjectID = std::stoi(GroupLine); getline(TimePointsFile, TimePointsLine); if(DS.LandmarkPresence()) getline(LandmarksFile, LandmarksLine); if(DS.CognitiveScoresPresence()) getline(CognitiveScoresFile, CognitiveScoresLine); /// New subject if(NewSubjectID != CurrentSubjectID) { IndividualObservations Individual(TimePoints); if(DS.LandmarkPresence()) Individual.AddLandmarks(Landmarks); if(DS.CognitiveScoresPresence()) Individual.AddCognitiveScores(CognitiveScores); Obs.AddIndividualData(Individual); CurrentSubjectID = NewSubjectID; TimePoints.clear(); Landmarks.clear(); CognitiveScores.clear(); } TimePoints.push_back(stod(TimePointsLine)); if(DS.LandmarkPresence()) { VectorType NewObs(DS.GetLandmarksDimension()); int i = 0; std::stringstream LineStream(LandmarksLine); std::string cell; while(std::getline(LineStream, cell, ',')) { NewObs(i) = std::stod(cell); ++i; } Landmarks.push_back(NewObs); } if(DS.CognitiveScoresPresence()) { VectorType NewObs(DS.GetCognitiveScoresDimension()); int i = 0; std::stringstream LineStream(CognitiveScoresLine); std::string cell; while(std::getline(LineStream, cell, ',')) { NewObs(i) = std::stod(cell); ++i; } CognitiveScores.push_back(NewObs); } } IndividualObservations Individual(TimePoints); if(DS.LandmarkPresence()) Individual.AddLandmarks(Landmarks); if(DS.CognitiveScoresPresence()) Individual.AddCognitiveScores(CognitiveScores); Obs.AddIndividualData(Individual); return Obs; }