[Groonga-commit] groonga/grnxx at 3ac9304 [master] Add tests for Lhs/RhsMerger. (#67)

Back to archive index

susumu.yata null+****@clear*****
Wed Sep 24 11:05:50 JST 2014


susumu.yata	2014-09-24 11:05:50 +0900 (Wed, 24 Sep 2014)

  New Revision: 3ac930405157879a3bd4ef4f0404e61d7a4a1aa8
  https://github.com/groonga/grnxx/commit/3ac930405157879a3bd4ef4f0404e61d7a4a1aa8

  Message:
    Add tests for Lhs/RhsMerger. (#67)

  Modified files:
    test/test_merger.cpp

  Modified: test/test_merger.cpp (+104 -2)
===================================================================
--- test/test_merger.cpp    2014-09-24 11:05:37 +0900 (4ad54fc)
+++ test/test_merger.cpp    2014-09-24 11:05:50 +0900 (36832a1)
@@ -240,6 +240,108 @@ void test_minus() {
   assert(count == result_records.size());
 }
 
+void test_lhs() {
+  grnxx::Error error;
+
+  // Create cursors to read all the records.
+  auto cursor = test.table->create_cursor(&error);
+  assert(cursor);
+  auto cursor2 = test.table->create_cursor(&error);
+  assert(cursor2);
+
+  // Create expressions to read values.
+  auto expression_builder =
+      grnxx::ExpressionBuilder::create(&error, test.table);
+  assert(expression_builder);
+  assert(expression_builder->push_column(&error, "Bool"));
+  auto expression = expression_builder->release(&error);
+  assert(expression);
+  assert(expression_builder->push_column(&error, "Bool2"));
+  auto expression2 = expression_builder->release(&error);
+  assert(expression2);
+
+  // Create input records.
+  grnxx::Array<grnxx::Record> records;
+  assert(cursor->read_all(&error, &records) == test.table->num_rows());
+  assert(expression->filter(&error, &records));
+  grnxx::Array<grnxx::Record> records2;
+  assert(cursor2->read_all(&error, &records2) == test.table->num_rows());
+  assert(expression2->filter(&error, &records2));
+
+  // Merge records.
+  grnxx::MergerOptions options;
+  options.type = grnxx::LHS_MERGER;
+  options.operator_type = grnxx::PLUS_MERGER_OPERATOR;
+  auto merger = grnxx::Merger::create(&error, options);
+  assert(merger);
+  grnxx::Array<grnxx::Record> result_records;
+  assert(merger->merge(&error, &records, &records2, &result_records));
+
+  for (grnxx::Int i = 0; i < result_records.size(); ++i) {
+    grnxx::Int row_id = result_records.get_row_id(i);
+    assert(test.bool_values[row_id]);
+  }
+
+  grnxx::Int count = 0;
+  for (grnxx::Int i = 1; i <= test.table->max_row_id(); ++i) {
+    if (test.bool_values[i]) {
+      ++count;
+    }
+  }
+  assert(count == result_records.size());
+}
+
+void test_rhs() {
+  grnxx::Error error;
+
+  // Create cursors to read all the records.
+  auto cursor = test.table->create_cursor(&error);
+  assert(cursor);
+  auto cursor2 = test.table->create_cursor(&error);
+  assert(cursor2);
+
+  // Create expressions to read values.
+  auto expression_builder =
+      grnxx::ExpressionBuilder::create(&error, test.table);
+  assert(expression_builder);
+  assert(expression_builder->push_column(&error, "Bool"));
+  auto expression = expression_builder->release(&error);
+  assert(expression);
+  assert(expression_builder->push_column(&error, "Bool2"));
+  auto expression2 = expression_builder->release(&error);
+  assert(expression2);
+
+  // Create input records.
+  grnxx::Array<grnxx::Record> records;
+  assert(cursor->read_all(&error, &records) == test.table->num_rows());
+  assert(expression->filter(&error, &records));
+  grnxx::Array<grnxx::Record> records2;
+  assert(cursor2->read_all(&error, &records2) == test.table->num_rows());
+  assert(expression2->filter(&error, &records2));
+
+  // Merge records.
+  grnxx::MergerOptions options;
+  options.type = grnxx::RHS_MERGER;
+  options.operator_type = grnxx::PLUS_MERGER_OPERATOR;
+  auto merger = grnxx::Merger::create(&error, options);
+  assert(merger);
+  grnxx::Array<grnxx::Record> result_records;
+  assert(merger->merge(&error, &records, &records2, &result_records));
+
+  for (grnxx::Int i = 0; i < result_records.size(); ++i) {
+    grnxx::Int row_id = result_records.get_row_id(i);
+    assert(test.bool2_values[row_id]);
+  }
+
+  grnxx::Int count = 0;
+  for (grnxx::Int i = 1; i <= test.table->max_row_id(); ++i) {
+    if (test.bool2_values[i]) {
+      ++count;
+    }
+  }
+  assert(count == result_records.size());
+}
+
 void test_plus() {
   grnxx::Error error;
 
@@ -315,8 +417,8 @@ int main() {
   test_or();
 //  test_xor();
   test_minus();
-//  test_lhs();
-//  test_rhs();
+  test_lhs();
+  test_rhs();
 
   test_plus();
 
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index