[Groonga-commit] groonga/grnxx at 8042b28 [master] Support equality test operators for Vector<T>. (#106)

Back to archive index

susumu.yata null+****@clear*****
Tue Dec 16 10:53:52 JST 2014


susumu.yata	2014-11-17 19:50:01 +0900 (Mon, 17 Nov 2014)

  New Revision: 8042b286f0f71525977b661e0554c9cbb94e580a
  https://github.com/groonga/grnxx/commit/8042b286f0f71525977b661e0554c9cbb94e580a

  Message:
    Support equality test operators for Vector<T>. (#106)

  Modified files:
    lib/grnxx/impl/expression.cpp
    test/test_expression.cpp

  Modified: lib/grnxx/impl/expression.cpp (+16 -16)
===================================================================
--- lib/grnxx/impl/expression.cpp    2014-11-17 19:42:30 +0900 (bc4e2a3)
+++ lib/grnxx/impl/expression.cpp    2014-11-17 19:50:01 +0900 (e71e841)
@@ -1859,22 +1859,22 @@ Node *ExpressionBuilder::create_binary_node(
           return create_equality_test_node<Text>(
             operator_type, std::move(arg1), std::move(arg2));
         }
-//        case BOOL_VECTOR_DATA: {
-//          return create_equality_test_node<Vector<Bool>>(
-//            operator_type, std::move(arg1), std::move(arg2));
-//        }
-//        case INT_VECTOR_DATA: {
-//          return create_equality_test_node<Vector<Int>>(
-//            operator_type, std::move(arg1), std::move(arg2));
-//        }
-//        case FLOAT_VECTOR_DATA: {
-//          return create_equality_test_node<Vector<Float>>(
-//            operator_type, std::move(arg1), std::move(arg2));
-//        }
-//        case GEO_POINT_VECTOR_DATA: {
-//          return create_equality_test_node<Vector<GeoPoint>>(
-//            operator_type, std::move(arg1), std::move(arg2));
-//        }
+        case BOOL_VECTOR_DATA: {
+          return create_equality_test_node<Vector<Bool>>(
+            operator_type, std::move(arg1), std::move(arg2));
+        }
+        case INT_VECTOR_DATA: {
+          return create_equality_test_node<Vector<Int>>(
+            operator_type, std::move(arg1), std::move(arg2));
+        }
+        case FLOAT_VECTOR_DATA: {
+          return create_equality_test_node<Vector<Float>>(
+            operator_type, std::move(arg1), std::move(arg2));
+        }
+        case GEO_POINT_VECTOR_DATA: {
+          return create_equality_test_node<Vector<GeoPoint>>(
+            operator_type, std::move(arg1), std::move(arg2));
+        }
 //        case TEXT_VECTOR_DATA: {
 //          return create_equality_test_node<Vector<Text>>(
 //            operator_type, std::move(arg1), std::move(arg2));

  Modified: test/test_expression.cpp (+192 -192)
===================================================================
--- test/test_expression.cpp    2014-11-17 19:42:30 +0900 (e01b2a3)
+++ test/test_expression.cpp    2014-11-17 19:50:01 +0900 (2bf8b4d)
@@ -1236,117 +1236,117 @@ void test_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (BoolVector == BoolVector2).
-//  assert(builder->push_column(&error, "BoolVector"));
-//  assert(builder->push_column(&error, "BoolVector2"));
-//  assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (BoolVector == BoolVector2).
+  builder->push_column("BoolVector");
+  builder->push_column("BoolVector2");
+  builder->push_operator(grnxx::EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.bool_vector_values[row_id] ==
-//                          test.bool_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() == (test.bool_vector_values[row_id] ==
+                                  test.bool_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.bool_vector_values.size(); ++i) {
-//    if (test.bool_vector_values[i] == test.bool_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.bool_vector_values.size(); ++i) {
+    if ((test.bool_vector_values[i] ==
+         test.bool_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
-//  // Test an expression (IntVector == IntVector2).
-//  assert(builder->push_column(&error, "IntVector"));
-//  assert(builder->push_column(&error, "IntVector2"));
-//  assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (IntVector == IntVector2).
+  builder->push_column("IntVector");
+  builder->push_column("IntVector2");
+  builder->push_operator(grnxx::EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.int_vector_values[row_id] ==
-//                          test.int_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() == (test.int_vector_values[row_id] ==
+                                  test.int_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.int_vector_values.size(); ++i) {
-//    if (test.int_vector_values[i] == test.int_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.int_vector_values.size(); ++i) {
+    if ((test.int_vector_values[i] == test.int_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
-//  // Test an expression (FloatVector == FloatVector2).
-//  assert(builder->push_column(&error, "FloatVector"));
-//  assert(builder->push_column(&error, "FloatVector2"));
-//  assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (FloatVector == FloatVector2).
+  builder->push_column("FloatVector");
+  builder->push_column("FloatVector2");
+  builder->push_operator(grnxx::EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.float_vector_values[row_id] ==
-//                          test.float_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() == (test.float_vector_values[row_id] ==
+                                  test.float_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.float_vector_values.size(); ++i) {
-//    if (test.float_vector_values[i] == test.float_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.float_vector_values.size(); ++i) {
+    if ((test.float_vector_values[i] ==
+         test.float_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
-//  // Test an expression (GeoPointVector == GeoPointVector2).
-//  assert(builder->push_column(&error, "GeoPointVector"));
-//  assert(builder->push_column(&error, "GeoPointVector2"));
-//  assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (GeoPointVector == GeoPointVector2).
+  builder->push_column("GeoPointVector");
+  builder->push_column("GeoPointVector2");
+  builder->push_operator(grnxx::EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.geo_point_vector_values[row_id] ==
-//                          test.geo_point_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() ==
+           (test.geo_point_vector_values[row_id] ==
+            test.geo_point_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.geo_point_vector_values.size(); ++i) {
-//    if (test.geo_point_vector_values[i] == test.geo_point_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.geo_point_vector_values.size(); ++i) {
+    if ((test.geo_point_vector_values[i] ==
+         test.geo_point_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
 //  // Test an expression (TextVector == TextVector2).
 //  assert(builder->push_column(&error, "TextVector"));
@@ -1516,117 +1516,117 @@ void test_not_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (BoolVector != BoolVector2).
-//  assert(builder->push_column(&error, "BoolVector"));
-//  assert(builder->push_column(&error, "BoolVector2"));
-//  assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (BoolVector != BoolVector2).
+  builder->push_column("BoolVector");
+  builder->push_column("BoolVector2");
+  builder->push_operator(grnxx::NOT_EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.bool_vector_values[row_id] !=
-//                          test.bool_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() == (test.bool_vector_values[row_id] !=
+                                  test.bool_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.bool_vector_values.size(); ++i) {
-//    if (test.bool_vector_values[i] != test.bool_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.bool_vector_values.size(); ++i) {
+    if ((test.bool_vector_values[i] !=
+         test.bool_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
-//  // Test an expression (IntVector != IntVector2).
-//  assert(builder->push_column(&error, "IntVector"));
-//  assert(builder->push_column(&error, "IntVector2"));
-//  assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (IntVector != IntVector2).
+  builder->push_column("IntVector");
+  builder->push_column("IntVector2");
+  builder->push_operator(grnxx::NOT_EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.int_vector_values[row_id] !=
-//                          test.int_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() == (test.int_vector_values[row_id] !=
+                                  test.int_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.int_vector_values.size(); ++i) {
-//    if (test.int_vector_values[i] != test.int_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.int_vector_values.size(); ++i) {
+    if ((test.int_vector_values[i] != test.int_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
-//  // Test an expression (FloatVector != FloatVector2).
-//  assert(builder->push_column(&error, "FloatVector"));
-//  assert(builder->push_column(&error, "FloatVector2"));
-//  assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (FloatVector != FloatVector2).
+  builder->push_column("FloatVector");
+  builder->push_column("FloatVector2");
+  builder->push_operator(grnxx::NOT_EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.float_vector_values[row_id] !=
-//                          test.float_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() == (test.float_vector_values[row_id] !=
+                                  test.float_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.float_vector_values.size(); ++i) {
-//    if (test.float_vector_values[i] != test.float_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.float_vector_values.size(); ++i) {
+    if ((test.float_vector_values[i] !=
+         test.float_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
-//  // Test an expression (GeoPointVector != GeoPointVector2).
-//  assert(builder->push_column(&error, "GeoPointVector"));
-//  assert(builder->push_column(&error, "GeoPointVector2"));
-//  assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (GeoPointVector != GeoPointVector2).
+  builder->push_column("GeoPointVector");
+  builder->push_column("GeoPointVector2");
+  builder->push_operator(grnxx::NOT_EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  results.clear();
-//  assert(expression->evaluate(&error, records, &results));
-//  assert(results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(results[i] == (test.geo_point_vector_values[row_id] !=
-//                          test.geo_point_vector2_values[row_id]));
-//  }
+  results.clear();
+  expression->evaluate(records, &results);
+  assert(results.size() == test.table->num_rows());
+  for (size_t i = 0; i < results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert(results[i].value() ==
+           (test.geo_point_vector_values[row_id] !=
+            test.geo_point_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.geo_point_vector_values.size(); ++i) {
-//    if (test.geo_point_vector_values[i] != test.geo_point_vector2_values[i]) {
-//      assert(records.get_row_id(count) == i);
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.geo_point_vector_values.size(); ++i) {
+    if ((test.geo_point_vector_values[i] !=
+         test.geo_point_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
 //  // Test an expression (TextVector != TextVector2).
 //  assert(builder->push_column(&error, "TextVector"));
-------------- next part --------------
HTML����������������������������...
Download 



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