[Groonga-commit] groonga/grnxx at a055c13 [master] Add a test for Merger in Pipeline (#68)

Back to archive index

susumu.yata null+****@clear*****
Mon Sep 22 17:14:32 JST 2014


susumu.yata	2014-09-22 17:14:32 +0900 (Mon, 22 Sep 2014)

  New Revision: a055c13c3c7e20c8fb6d27ba7c00fa16dd78715d
  https://github.com/groonga/grnxx/commit/a055c13c3c7e20c8fb6d27ba7c00fa16dd78715d

  Message:
    Add a test for Merger in Pipeline (#68)

  Modified files:
    test/test_pipeline.cpp

  Modified: test/test_pipeline.cpp (+81 -0)
===================================================================
--- test/test_pipeline.cpp    2014-09-22 17:14:15 +0900 (769ccb7)
+++ test/test_pipeline.cpp    2014-09-22 17:14:32 +0900 (23e5720)
@@ -330,11 +330,92 @@ void test_sorter() {
   }
 }
 
+void test_merger() {
+  grnxx::Error error;
+
+  // Create an object for building a pipeline.
+  auto pipeline_builder = grnxx::PipelineBuilder::create(&error, test.table);
+  assert(pipeline_builder);
+
+  // Create a cursor which reads all the records.
+  auto cursor = test.table->create_cursor(&error);
+  assert(cursor);
+  assert(pipeline_builder->push_cursor(&error, std::move(cursor)));
+
+  // Create an object for building expressions.
+  auto expression_builder =
+      grnxx::ExpressionBuilder::create(&error, test.table);
+  assert(expression_builder);
+
+  // Create a filter (Bool).
+  assert(expression_builder->push_column(&error, "Bool"));
+  auto expression = expression_builder->release(&error);
+  assert(expression);
+  assert(pipeline_builder->push_filter(&error, std::move(expression)));
+
+  // Create an adjuster (Float).
+  assert(expression_builder->push_column(&error, "Float"));
+  expression = expression_builder->release(&error);
+  assert(expression);
+  assert(pipeline_builder->push_adjuster(&error, std::move(expression)));
+
+  // Create a cursor which reads all the records.
+  cursor = test.table->create_cursor(&error);
+  assert(cursor);
+  assert(pipeline_builder->push_cursor(&error, std::move(cursor)));
+
+  // Create a filter (Int < 50).
+  assert(expression_builder->push_column(&error, "Int"));
+  assert(expression_builder->push_constant(&error, grnxx::Int(50)));
+  assert(expression_builder->push_operator(&error, grnxx::LESS_OPERATOR));
+  expression = expression_builder->release(&error);
+  assert(expression);
+  assert(pipeline_builder->push_filter(&error, std::move(expression)));
+
+  // Create an adjuster (Float * 2.0).
+  assert(expression_builder->push_column(&error, "Float"));
+  assert(expression_builder->push_constant(&error, grnxx::Float(2.0)));
+  assert(expression_builder->push_operator(&error,
+                                           grnxx::MULTIPLICATION_OPERATOR));
+  expression = expression_builder->release(&error);
+  assert(expression);
+  assert(pipeline_builder->push_adjuster(&error, std::move(expression)));
+
+  // Create a merger.
+  grnxx::MergerOptions options;
+  options.type = grnxx::AND_MERGER;
+  options.operator_type = grnxx::PLUS_MERGER_OPERATOR;
+  assert(pipeline_builder->push_merger(&error, options));
+
+  // Complete a pipeline.
+  auto pipeline = pipeline_builder->release(&error);
+  assert(pipeline);
+
+  // Read records through the pipeline.
+  grnxx::Array<grnxx::Record> records;
+  assert(pipeline->flush(&error, &records));
+
+  grnxx::Int count = 0;
+  for (grnxx::Int i = 1; i < test.bool_values.size(); ++i) {
+    if (test.bool_values[i] && (test.int_values[i] < 50)) {
+      ++count;
+    }
+  }
+  assert(records.size() == count);
+
+  for (grnxx::Int i = 0; i < records.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(test.bool_values[row_id] && (test.int_values[row_id] < 50));
+    assert(records.get_score(i) == (test.float_values[row_id] * 3.0));
+  }
+}
+
 int main() {
   init_test();
   test_cursor();
   test_filter();
   test_adjuster();
   test_sorter();
+  test_merger();
   return 0;
 }
-------------- next part --------------
HTML����������������������������...
Télécharger 



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