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()); }
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]; }