[Groonga-commit] groonga/grnxx at 785c9b7 [master] Add a test for columns in Expression. (#37)

Back to archive index

susumu.yata null+****@clear*****
Mon Aug 18 15:35:05 JST 2014


susumu.yata	2014-08-18 15:35:05 +0900 (Mon, 18 Aug 2014)

  New Revision: 785c9b7ffdf568c2722ea85f2e33846e5927c08c
  https://github.com/groonga/grnxx/commit/785c9b7ffdf568c2722ea85f2e33846e5927c08c

  Message:
    Add a test for columns in Expression. (#37)

  Modified files:
    test/test_expression.cpp

  Modified: test/test_expression.cpp (+90 -8)
===================================================================
--- test/test_expression.cpp    2014-08-18 15:12:08 +0900 (6ce7b50)
+++ test/test_expression.cpp    2014-08-18 15:35:05 +0900 (c7ddf3d)
@@ -49,17 +49,17 @@ void init_test() {
   assert(test.table);
 
   // Create columns for Bool, Int, Float, and Text values.
-  auto bool_column = test.table->create_column(&error, "BoolColumn",
-                                          grnxx::BOOL_DATA);
+  auto bool_column =
+      test.table->create_column(&error, "Bool", grnxx::BOOL_DATA);
   assert(bool_column);
-  auto int_column = test.table->create_column(&error, "IntColumn",
-                                         grnxx::INT_DATA);
+  auto int_column =
+      test.table->create_column(&error, "Int", grnxx::INT_DATA);
   assert(int_column);
-  auto float_column = test.table->create_column(&error, "FloatColumn",
-                                           grnxx::FLOAT_DATA);
+  auto float_column =
+      test.table->create_column(&error, "Float", grnxx::FLOAT_DATA);
   assert(float_column);
-  auto text_column = test.table->create_column(&error, "TextColumn",
-                                           grnxx::TEXT_DATA);
+  auto text_column =
+      test.table->create_column(&error, "Text", grnxx::TEXT_DATA);
   assert(text_column);
 
   // Generate random values.
@@ -82,6 +82,16 @@ void init_test() {
     }
     test.text_values.set(i, grnxx::Text(test.text_bodies[i].data(), length));
   }
+
+  for (grnxx::Int i = 1; i <= NUM_ROWS; ++i) {
+    grnxx::Int row_id;
+    assert(test.table->insert_row(&error, grnxx::NULL_ROW_ID,
+                                  grnxx::Datum(), &row_id));
+    assert(bool_column->set(&error, row_id, test.bool_values[i]));
+    assert(int_column->set(&error, row_id, test.int_values[i]));
+    assert(float_column->set(&error, row_id, test.float_values[i]));
+    assert(text_column->set(&error, row_id, test.text_values[i]));
+  }
 }
 
 void test_constant() {
@@ -152,6 +162,77 @@ void test_constant() {
   }
 }
 
+void test_column() {
+  grnxx::Error error;
+
+  // Create an object for building expressions.
+  auto builder = grnxx::ExpressionBuilder::create(&error, test.table);
+  assert(builder);
+
+  // Test an expression (Bool).
+  assert(builder->push_column(&error, "Bool"));
+  auto expression = builder->release(&error);
+  assert(expression);
+
+  grnxx::Array<grnxx::Record> records;
+  auto cursor = test.table->create_cursor(&error);
+  assert(cursor);
+  assert(cursor->read_all(&error, &records) == test.table->num_rows());
+
+  assert(expression->filter(&error, &records));
+  grnxx::Int count = 0;
+  for (grnxx::Int i = 1; i < test.bool_values.size(); ++i) {
+    if (test.bool_values[i]) {
+      assert(records.get_row_id(count) == i);
+      ++count;
+    }
+  }
+  assert(records.size() == count);
+
+  // Test an expression (Int).
+  assert(builder->push_column(&error, "Int"));
+  expression = builder->release(&error);
+  assert(expression);
+
+  records.clear();
+  cursor = test.table->create_cursor(&error);
+  assert(cursor);
+  assert(cursor->read_all(&error, &records) == test.table->num_rows());
+
+  grnxx::Array<grnxx::Int> int_results;
+  assert(expression->evaluate(&error, records, &int_results));
+  assert(int_results.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < int_results.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(int_results[i] == test.int_values[row_id]);
+  }
+
+  // Test an expression (Float).
+  assert(builder->push_column(&error, "Float"));
+  expression = builder->release(&error);
+  assert(expression);
+
+  assert(expression->adjust(&error, &records));
+  assert(records.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < records.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(records.get_score(i) == test.float_values[row_id]);
+  }
+
+  // Test an expression (Text).
+  assert(builder->push_column(&error, "Text"));
+  expression = builder->release(&error);
+  assert(expression);
+
+  grnxx::Array<grnxx::Text> text_results;
+  assert(expression->evaluate(&error, records, &text_results));
+  assert(text_results.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < text_results.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(text_results[i] == test.text_values[row_id]);
+  }
+}
+
 void test_expression() {
   grnxx::Error error;
 
@@ -584,6 +665,7 @@ void test_expression() {
 int main() {
   init_test();
   test_constant();
+  test_column();
   test_expression();
   return 0;
 }
-------------- next part --------------
HTML����������������������������...
Download 



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