示例#1
0
TEST_F(MergeTests, simple_merge_test_valid_rows) {
  auto main = io::Loader::shortcuts::load("test/merge1_main.tbl");
  auto delta = io::Loader::shortcuts::load("test/merge1_delta.tbl");
  auto correct_result = io::Loader::shortcuts::load("test/merge1_result.tbl");

  std::vector<hyrise::storage::c_atable_ptr_t > tables;
  tables.push_back(main);
  tables.push_back(delta);

  TableMerger merger(new DefaultMergeStrategy(), new SequentialHeapMerger());

  // First test with no valid
  std::vector<bool> validOne(main->size() + delta->size(), false);  
  auto result = merger.merge(tables, true, validOne);
  ASSERT_EQ(0u, result[0]->size());

  // Second test with only some valid
  std::vector<bool> valid(main->size() + delta->size(), false);
  valid[3] = true;
  valid[valid.size() - 1] = true;

  result = merger.merge(tables, true, valid);

  ASSERT_EQ(2u, result[0]->size());
  ASSERT_EQ(2u, result[0]->dictionaryAt(0)->size());
  ASSERT_EQ(2u, result[0]->dictionaryAt(1)->size());
  ASSERT_EQ(2u, result[0]->dictionaryAt(2)->size());

}
示例#2
0
 int numDecodings(string s) {
     if (s.empty()) return 0;
     if (s.size() == 1) return validOne(s[0]);
     
     int n = s.size(); // now n >= 2
     vector<int> dp(3, 0); // dp[i] = number of decode ways for s[0:i]
     // initialize dp[0]
     if (!validOne(s[0])) return 0;
     dp[0] = 1;
     
     if (validOne(s[1])) {
         dp[1] = dp[0];
         if (validTwo(s[0], s[1])) dp[1]++;
     } else {
         if (validTwo(s[0], s[1])) dp[1] = 1;
         else return 0;
     }
     
     for (int i = 2; i < n; i++) {
         if (validOne(s[i]) && validTwo(s[i-1], s[i])) dp[i%3] = dp[(i-1)%3] + dp[(i-2)%3];
         if (validOne(s[i]) && !validTwo(s[i-1], s[i])) dp[i%3] = dp[(i-1)%3];
         if (!validOne(s[i]) && validTwo(s[i-1], s[i])) dp[i%3] = dp[(i-2)%3];
         if (!validOne(s[i]) && !validTwo(s[i-1], s[i])) return 0;
     }
     return dp[(n-1)%3];
 }