[Groonga-commit] groonga/grnxx at e55b16a [master] Add tests for LOGICAL_NOT and BITWISE_NOT.

Back to archive index

susumu.yata null+****@clear*****
Mon Aug 18 16:13:45 JST 2014


susumu.yata	2014-08-18 16:13:45 +0900 (Mon, 18 Aug 2014)

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

  Message:
    Add tests for LOGICAL_NOT and BITWISE_NOT.

  Modified files:
    test/test_expression.cpp

  Modified: test/test_expression.cpp (+107 -0)
===================================================================
--- test/test_expression.cpp    2014-08-18 16:11:49 +0900 (29d022b)
+++ test/test_expression.cpp    2014-08-18 16:13:45 +0900 (d96bbb7)
@@ -63,6 +63,10 @@ void init_test() {
   assert(text_column);
 
   // Generate random values.
+  // Bool: true or false.
+  // Int: [0, 100).
+  // Float: [0.0, 1.0].
+  // Text: length = [1, 4], byte = ['0', '9'].
   constexpr grnxx::Int NUM_ROWS = 1 << 16;
   std::mt19937_64 mersenne_twister;
   assert(test.bool_values.resize(&error, NUM_ROWS + 1));
@@ -305,6 +309,105 @@ void test_column() {
   }
 }
 
+void test_logical_not() {
+  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"));
+  assert(builder->push_operator(&error, grnxx::LOGICAL_NOT_OPERATOR));
+  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());
+
+  grnxx::Array<grnxx::Bool> bool_results;
+  assert(expression->evaluate(&error, records, &bool_results));
+  assert(bool_results.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < bool_results.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(bool_results[i] == !test.bool_values[row_id]);
+  }
+
+  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);
+}
+
+void test_bitwise_not() {
+  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"));
+  assert(builder->push_operator(&error, grnxx::BITWISE_NOT_OPERATOR));
+  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());
+
+  grnxx::Array<grnxx::Bool> bool_results;
+  assert(expression->evaluate(&error, records, &bool_results));
+  assert(bool_results.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < bool_results.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(bool_results[i] == !test.bool_values[row_id]);
+  }
+
+  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"));
+  assert(builder->push_operator(&error, grnxx::BITWISE_NOT_OPERATOR));
+  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]);
+  }
+}
+
+void test_positive() {
+}
+
+void test_negative() {
+}
+
 void test_expression() {
   grnxx::Error error;
 
@@ -738,6 +841,10 @@ int main() {
   init_test();
   test_constant();
   test_column();
+  test_logical_not();
+  test_bitwise_not();
+  test_positive();
+  test_negative();
   test_expression();
   return 0;
 }
-------------- next part --------------
HTML����������������������������...
Download 



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