Example #1
0
static void Merge(const std::string &Input,
                  const std::vector<std::string> Result,
                  size_t NumNewFeatures) {
  Merger M;
  std::vector<std::string> NewFiles;
  EXPECT_TRUE(M.Parse(Input, true));
  std::stringstream SS;
  M.PrintSummary(SS);
  EXPECT_EQ(NumNewFeatures, M.Merge(&NewFiles));
  EXPECT_EQ(M.AllFeatures(), M.ParseSummary(SS));
  EQ(NewFiles, Result);
}
Example #2
0
TEST(Merge, Good) {
  Merger M;

  EXPECT_TRUE(M.Parse("1\n0\nAA\n", false));
  EXPECT_EQ(M.Files.size(), 1U);
  EXPECT_EQ(M.NumFilesInFirstCorpus, 0U);
  EXPECT_EQ(M.Files[0].Name, "AA");
  EXPECT_TRUE(M.LastFailure.empty());
  EXPECT_EQ(M.FirstNotProcessedFile, 0U);

  EXPECT_TRUE(M.Parse("2\n1\nAA\nBB\nSTARTED 0 42\n", false));
  EXPECT_EQ(M.Files.size(), 2U);
  EXPECT_EQ(M.NumFilesInFirstCorpus, 1U);
  EXPECT_EQ(M.Files[0].Name, "AA");
  EXPECT_EQ(M.Files[1].Name, "BB");
  EXPECT_EQ(M.LastFailure, "AA");
  EXPECT_EQ(M.FirstNotProcessedFile, 1U);

  EXPECT_TRUE(M.Parse("3\n1\nAA\nBB\nC\n"
                        "STARTED 0 1000\n"
                        "DONE 0 1 2 3\n"
                        "STARTED 1 1001\n"
                        "DONE 1 4 5 6 \n"
                        "STARTED 2 1002\n"
                        "", true));
  EXPECT_EQ(M.Files.size(), 3U);
  EXPECT_EQ(M.NumFilesInFirstCorpus, 1U);
  EXPECT_EQ(M.Files[0].Name, "AA");
  EXPECT_EQ(M.Files[0].Size, 1000U);
  EXPECT_EQ(M.Files[1].Name, "BB");
  EXPECT_EQ(M.Files[1].Size, 1001U);
  EXPECT_EQ(M.Files[2].Name, "C");
  EXPECT_EQ(M.Files[2].Size, 1002U);
  EXPECT_EQ(M.LastFailure, "C");
  EXPECT_EQ(M.FirstNotProcessedFile, 3U);
  EQ(M.Files[0].Features, {1, 2, 3});
  EQ(M.Files[1].Features, {4, 5, 6});


  std::vector<std::string> NewFiles;

  EXPECT_TRUE(M.Parse("3\n2\nAA\nBB\nC\n"
                        "STARTED 0 1000\nDONE 0 1 2 3\n"
                        "STARTED 1 1001\nDONE 1 4 5 6 \n"
                        "STARTED 2 1002\nDONE 2 6 1 3 \n"
                        "", true));
  EXPECT_EQ(M.Files.size(), 3U);
  EXPECT_EQ(M.NumFilesInFirstCorpus, 2U);
  EXPECT_TRUE(M.LastFailure.empty());
  EXPECT_EQ(M.FirstNotProcessedFile, 3U);
  EQ(M.Files[0].Features, {1, 2, 3});
  EQ(M.Files[1].Features, {4, 5, 6});
  EQ(M.Files[2].Features, {1, 3, 6});
  EXPECT_EQ(0U, M.Merge(&NewFiles));
  EQ(NewFiles, {});

  EXPECT_TRUE(M.Parse("3\n1\nA\nB\nC\n"
                        "STARTED 0 1000\nDONE 0 1 2 3\n"
                        "STARTED 1 1001\nDONE 1 4 5 6 \n"
                        "STARTED 2 1002\nDONE 2 6 1 3\n"
                        "", true));
  EQ(M.Files[0].Features, {1, 2, 3});
  EQ(M.Files[1].Features, {4, 5, 6});
  EQ(M.Files[2].Features, {1, 3, 6});
  EXPECT_EQ(3U, M.Merge(&NewFiles));
  EQ(NewFiles, {"B"});

  // Same as the above, but with InitialFeatures.
  EXPECT_TRUE(M.Parse("2\n0\nB\nC\n"
                        "STARTED 0 1001\nDONE 0 4 5 6 \n"
                        "STARTED 1 1002\nDONE 1 6 1 3\n"
                        "", true));
  EQ(M.Files[0].Features, {4, 5, 6});
  EQ(M.Files[1].Features, {1, 3, 6});
  EXPECT_EQ(3U, M.Merge({1, 2, 3}, &NewFiles));
  EQ(NewFiles, {"B"});
}