[Groonga-commit] groonga/grnxx at 7ca6c33 [new_data_types] Add tests for Vector<Text> in Expression. (#104, #106)

Back to archive index

susumu.yata null+****@clear*****
Tue Nov 18 16:51:16 JST 2014


susumu.yata	2014-11-18 16:51:16 +0900 (Tue, 18 Nov 2014)

  New Revision: 7ca6c33433cdd4e52e477e88714d30405c4d2ffe
  https://github.com/groonga/grnxx/commit/7ca6c33433cdd4e52e477e88714d30405c4d2ffe

  Message:
    Add tests for Vector<Text> in Expression. (#104, #106)

  Modified files:
    test/test_expression.cpp

  Modified: test/test_expression.cpp (+125 -133)
===================================================================
--- test/test_expression.cpp    2014-11-18 16:49:42 +0900 (9e47c50)
+++ test/test_expression.cpp    2014-11-18 16:51:16 +0900 (0a8d2f1)
@@ -59,10 +59,10 @@ struct {
   grnxx::Array<grnxx::GeoPointVector> geo_point_vector2_values;
   grnxx::Array<grnxx::Array<grnxx::GeoPoint>> geo_point_vector_bodies;
   grnxx::Array<grnxx::Array<grnxx::GeoPoint>> geo_point_vector2_bodies;
-//  grnxx::Array<grnxx::TextVector> text_vector_values;
-//  grnxx::Array<grnxx::TextVector> text_vector2_values;
-//  grnxx::Array<grnxx::Array<grnxx::Text>> text_vector_bodies;
-//  grnxx::Array<grnxx::Array<grnxx::Text>> text_vector2_bodies;
+  grnxx::Array<grnxx::TextVector> text_vector_values;
+  grnxx::Array<grnxx::TextVector> text_vector2_values;
+  grnxx::Array<grnxx::Array<grnxx::Text>> text_vector_bodies;
+  grnxx::Array<grnxx::Array<grnxx::Text>> text_vector2_bodies;
   grnxx::Array<grnxx::Int> ref_values;
   grnxx::Array<grnxx::Int> ref2_values;
   grnxx::Array<grnxx::IntVector> ref_vector_values;
@@ -132,13 +132,11 @@ void init_test() try {
   auto geo_point_vector2_column =
       test.table->create_column("GeoPointVector2", data_type);
 
-//  data_type = grnxx::TEXT_VECTOR_DATA;
-//  auto text_vector_column =
-//      test.table->create_column(&error, "TextVector", data_type);
-//  auto text_vector2_column =
-//      test.table->create_column(&error, "TextVector2", data_type);
-//  assert(text_vector_column);
-//  assert(text_vector2_column);
+  data_type = grnxx::TEXT_VECTOR_DATA;
+  auto text_vector_column =
+      test.table->create_column("TextVector", data_type);
+  auto text_vector2_column =
+      test.table->create_column("TextVector2", data_type);
 
   data_type = grnxx::INT_DATA;
   grnxx::ColumnOptions options;
@@ -195,10 +193,10 @@ void init_test() try {
   test.geo_point_vector2_values.resize(NUM_ROWS);
   test.geo_point_vector_bodies.resize(NUM_ROWS);
   test.geo_point_vector2_bodies.resize(NUM_ROWS);
-//  assert(test.text_vector_values.resize(&error, NUM_ROWS + 1));
-//  assert(test.text_vector2_values.resize(&error, NUM_ROWS + 1));
-//  assert(test.text_vector_bodies.resize(&error, NUM_ROWS + 1));
-//  assert(test.text_vector2_bodies.resize(&error, NUM_ROWS + 1));
+  test.text_vector_values.resize(NUM_ROWS);
+  test.text_vector2_values.resize(NUM_ROWS);
+  test.text_vector_bodies.resize(NUM_ROWS);
+  test.text_vector2_bodies.resize(NUM_ROWS);
   test.ref_values.resize(NUM_ROWS + 1);
   test.ref2_values.resize(NUM_ROWS + 1);
   test.ref_vector_values.resize(NUM_ROWS);
@@ -236,13 +234,6 @@ void init_test() try {
     test.text2_values.set(i, grnxx::Text(text_body->data(),
                              text_body->length()));
 
-//    grnxx::uint64_t bits = mersenne_twister();
-//    size_t size = mersenne_twister() % 59;
-//    test.bool_vector_values.set(i, grnxx::BoolVector(bits, size));
-//    bits = mersenne_twister();
-//    size = mersenne_twister() % 59;
-//    test.bool_vector2_values.set(i, grnxx::BoolVector(bits, size));
-
     size_t size = mersenne_twister() % (MAX_SIZE + 1);
     test.bool_vector_bodies[i].resize(size);
     for (size_t j = 0; j < size; ++j) {
@@ -314,22 +305,22 @@ void init_test() try {
     test.geo_point_vector2_values.set(
         i, grnxx::GeoPointVector(geo_point_data, size));
 
-//    size = mersenne_twister() % (MAX_SIZE + 1);
-//    assert(test.text_vector_bodies[i].resize(&error, size));
-//    for (grnxx::Int j = 0; j < size; ++j) {
-//      test.text_vector_bodies[i][j] =
-//          test.text_values[1 + (mersenne_twister() % NUM_ROWS)];
-//    }
-//    test.text_vector_values.set(
-//        i, grnxx::TextVector(test.text_vector_bodies[i].data(), size));
-//    size = mersenne_twister() % (MAX_SIZE + 1);
-//    assert(test.text_vector2_bodies[i].resize(&error, size));
-//    for (grnxx::Int j = 0; j < size; ++j) {
-//      test.text_vector2_bodies[i][j] =
-//          test.text_values[1 + (mersenne_twister() % NUM_ROWS)];
-//    }
-//    test.text_vector2_values.set(
-//        i, grnxx::TextVector(test.text_vector2_bodies[i].data(), size));
+    size = mersenne_twister() % (MAX_SIZE + 1);
+    test.text_vector_bodies[i].resize(size);
+    for (size_t j = 0; j < size; ++j) {
+      test.text_vector_bodies[i][j] =
+          test.text_values[mersenne_twister() % NUM_ROWS];
+    }
+    test.text_vector_values.set(
+        i, grnxx::TextVector(test.text_vector_bodies[i].data(), size));
+    size = mersenne_twister() % (MAX_SIZE + 1);
+    test.text_vector2_bodies[i].resize(size);
+    for (size_t j = 0; j < size; ++j) {
+      test.text_vector2_bodies[i][j] =
+          test.text_values[mersenne_twister() % NUM_ROWS];
+    }
+    test.text_vector2_values.set(
+        i, grnxx::TextVector(test.text_vector2_bodies[i].data(), size));
 
     test.ref_values.set(i, grnxx::Int(mersenne_twister() % NUM_ROWS));
     test.ref2_values.set(i, grnxx::Int(mersenne_twister() % NUM_ROWS));
@@ -375,10 +366,8 @@ void init_test() try {
     float_vector2_column->set(row_id, test.float_vector2_values[i]);
     geo_point_vector_column->set(row_id, test.geo_point_vector_values[i]);
     geo_point_vector2_column->set(row_id, test.geo_point_vector2_values[i]);
-//    assert(text_vector_column->set(&error, row_id,
-//                                   test.text_vector_values[i]));
-//    assert(text_vector2_column->set(&error, row_id,
-//                                    test.text_vector2_values[i]));
+    text_vector_column->set(row_id, test.text_vector_values[i]);
+    text_vector2_column->set(row_id, test.text_vector2_values[i]);
   }
 
   for (size_t i = 0; i < NUM_ROWS; ++i) {
@@ -562,18 +551,22 @@ void test_constant() try {
     assert((geo_point_vector_results[i] == geo_point_vector).is_true());
   }
 
-//  // Test an expression ({ "abc", "DEF", "ghi" }).
-//  grnxx::Text text_values[] = { "abc", "DEF", "ghi" };
-//  assert(builder->push_constant(&error, grnxx::TextVector(text_values, 3)));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression ({ "abc", "DEF", "ghi" }).
+  grnxx::Text text_values[] = {
+    grnxx::Text("abc"),
+    grnxx::Text("DEF"),
+    grnxx::Text("ghi")
+  };
+  grnxx::TextVector text_vector(text_values, 3);
+  builder->push_constant(text_vector);
+  expression = builder->release();
 
-//  grnxx::Array<grnxx::TextVector> text_vector_results;
-//  assert(expression->evaluate(&error, records, &text_vector_results));
-//  assert(text_vector_results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < text_vector_results.size(); ++i) {
-//    assert(text_vector_results[i] == grnxx::TextVector(text_values, 3));
-//  }
+  grnxx::Array<grnxx::TextVector> text_vector_results;
+  expression->evaluate(records, &text_vector_results);
+  assert(text_vector_results.size() == test.table->num_rows());
+  for (size_t i = 0; i < text_vector_results.size(); ++i) {
+    assert((text_vector_results[i] == text_vector).is_true());
+  }
 } catch (const char *msg) {
   std::cout << msg << std::endl;
   throw;
@@ -776,20 +769,20 @@ void test_column() {
             test.geo_point_vector_values[row_id]).is_true());
   }
 
-//  // Test an expression (TextVector).
-//  assert(builder->push_column(&error, "TextVector"));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (TextVector).
+  builder->push_column("TextVector");
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  grnxx::Array<grnxx::TextVector> text_vector_results;
-//  assert(expression->evaluate(&error, records, &text_vector_results));
-//  assert(text_vector_results.size() == test.table->num_rows());
-//  for (grnxx::Int i = 0; i < text_vector_results.size(); ++i) {
-//    grnxx::Int row_id = records.get_row_id(i);
-//    assert(text_vector_results[i] == test.text_vector_values[row_id]);
-//  }
+  grnxx::Array<grnxx::TextVector> text_vector_results;
+  expression->evaluate(records, &text_vector_results);
+  assert(text_vector_results.size() == test.table->num_rows());
+  for (size_t i = 0; i < text_vector_results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    assert((text_vector_results[i] ==
+            test.text_vector_values[row_id]).is_true());
+  }
 
   // Test an expression (Ref).
   builder->push_column("Ref");
@@ -1348,33 +1341,33 @@ void test_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (TextVector == TextVector2).
-//  assert(builder->push_column(&error, "TextVector"));
-//  assert(builder->push_column(&error, "TextVector2"));
-//  assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (TextVector == TextVector2).
+  builder->push_column("TextVector");
+  builder->push_column("TextVector2");
+  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.text_vector_values[row_id] ==
-//                          test.text_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.text_vector_values[row_id] ==
+                                  test.text_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_vector_values.size(); ++i) {
-//    if (test.text_vector_values[i] == test.text_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.text_vector_values.size(); ++i) {
+    if ((test.text_vector_values[i] ==
+         test.text_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 }
 
 void test_not_equal() {
@@ -1628,33 +1621,33 @@ void test_not_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (TextVector != TextVector2).
-//  assert(builder->push_column(&error, "TextVector"));
-//  assert(builder->push_column(&error, "TextVector2"));
-//  assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (TextVector != TextVector2).
+  builder->push_column("TextVector");
+  builder->push_column("TextVector2");
+  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.text_vector_values[row_id] !=
-//                          test.text_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.text_vector_values[row_id] !=
+                                  test.text_vector2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_vector_values.size(); ++i) {
-//    if (test.text_vector_values[i] != test.text_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.text_vector_values.size(); ++i) {
+    if ((test.text_vector_values[i] !=
+         test.text_vector2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 }
 
 void test_less() {
@@ -2508,28 +2501,27 @@ void test_subscript() {
     }
   }
 
-//  // Test an expression (TextVector[Int]).
-//  assert(builder->push_column(&error, "TextVector"));
-//  assert(builder->push_column(&error, "Int"));
-//  assert(builder->push_operator(&error, grnxx::SUBSCRIPT_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (TextVector[Int]).
+  builder->push_column("TextVector");
+  builder->push_column("Int");
+  builder->push_operator(grnxx::SUBSCRIPT_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  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);
-//    const auto int_value = test.int_values[row_id];
-//    const auto &text_vector_value = test.text_vector_values[row_id];
-//    if (int_value < text_vector_value.size()) {
-//      assert(text_results[i] == text_vector_value[int_value]);
-//    } else {
-//      assert(text_results[i] == grnxx::StringCRef(""));
-//    }
-//  }
+  grnxx::Array<grnxx::Text> text_results;
+  expression->evaluate(records, &text_results);
+  assert(text_results.size() == test.table->num_rows());
+  for (size_t i = 0; i < text_results.size(); ++i) {
+    size_t row_id = records[i].row_id.value();
+    const auto int_value = test.int_values[row_id];
+    const auto &text_vector_value = test.text_vector_values[row_id];
+    if ((int_value < text_vector_value.size()).is_true()) {
+      assert((text_results[i] == text_vector_value[int_value]).is_true());
+    } else {
+      assert(text_results[i].is_na());
+    }
+  }
 }
 
 void test_subexpression() {
-------------- next part --------------
HTML����������������������������...
Download 



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