[Groonga-commit] groonga/grnxx at d3ccbdb [new_data_types] Enable tests for Text in expressions. (#106)

Back to archive index

susumu.yata null+****@clear*****
Mon Nov 17 11:23:26 JST 2014


susumu.yata	2014-11-17 11:23:26 +0900 (Mon, 17 Nov 2014)

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

  Message:
    Enable tests for Text in expressions. (#106)

  Modified files:
    test/test_expression.cpp

  Modified: test/test_expression.cpp (+203 -208)
===================================================================
--- test/test_expression.cpp    2014-11-17 11:22:58 +0900 (c876eb2)
+++ test/test_expression.cpp    2014-11-17 11:23:26 +0900 (364450a)
@@ -39,10 +39,10 @@ struct {
   grnxx::Array<grnxx::Float> float2_values;
   grnxx::Array<grnxx::GeoPoint> geo_point_values;
   grnxx::Array<grnxx::GeoPoint> geo_point2_values;
-//  grnxx::Array<grnxx::Text> text_values;
-//  grnxx::Array<grnxx::Text> text2_values;
-//  grnxx::Array<std::string> text_bodies;
-//  grnxx::Array<std::string> text2_bodies;
+  grnxx::Array<grnxx::Text> text_values;
+  grnxx::Array<grnxx::Text> text2_values;
+  grnxx::Array<std::string> text_bodies;
+  grnxx::Array<std::string> text2_bodies;
 //  grnxx::Array<grnxx::BoolVector> bool_vector_values;
 //  grnxx::Array<grnxx::BoolVector> bool_vector2_values;
 //  grnxx::Array<grnxx::IntVector> int_vector_values;
@@ -69,14 +69,14 @@ struct {
 //  grnxx::Array<grnxx::Array<grnxx::Int>> ref_vector2_bodies;
 } test;
 
-//void generate_text(grnxx::Int min_size, grnxx::Int max_size,
-//                   std::string *str) {
-//  grnxx::Int size = (mersenne_twister() % (max_size - min_size + 1)) + min_size;
-//  str->resize(size);
-//  for (grnxx::Int i = 0; i < size; ++i) {
-//    (*str)[i] = '0' + (mersenne_twister() % 10);
-//  }
-//}
+void generate_text(size_t min_size, size_t max_size, std::string *string) {
+  size_t size = (mersenne_twister() % (max_size - min_size + 1)) + min_size;
+  string->resize(size);
+  char *string_buffer = &(*string)[0];
+  for (size_t i = 0; i < size; ++i) {
+    string_buffer[i] = '0' + (mersenne_twister() % 10);
+  }
+}
 
 void init_test() try {
   // Create a database with the default options.
@@ -102,11 +102,9 @@ void init_test() try {
   auto geo_point_column = test.table->create_column("GeoPoint", data_type);
   auto geo_point2_column = test.table->create_column("GeoPoint2", data_type);
 
-//  data_type = grnxx::TEXT_DATA;
-//  auto text_column = test.table->create_column(&error, "Text", data_type);
-//  auto text2_column = test.table->create_column(&error, "Text2", data_type);
-//  assert(text_column);
-//  assert(text2_column);
+  data_type = grnxx::TEXT_DATA;
+  auto text_column = test.table->create_column("Text", data_type);
+  auto text2_column = test.table->create_column("Text2", data_type);
 
 //  data_type = grnxx::BOOL_VECTOR_DATA;
 //  auto bool_vector_column =
@@ -185,10 +183,10 @@ void init_test() try {
   test.float2_values.resize(NUM_ROWS);
   test.geo_point_values.resize(NUM_ROWS);
   test.geo_point2_values.resize(NUM_ROWS);
-//  assert(test.text_values.resize(&error, NUM_ROWS + 1));
-//  assert(test.text2_values.resize(&error, NUM_ROWS + 1));
-//  assert(test.text_bodies.resize(&error, NUM_ROWS + 1));
-//  assert(test.text2_bodies.resize(&error, NUM_ROWS + 1));
+  test.text_values.resize(NUM_ROWS);
+  test.text2_values.resize(NUM_ROWS);
+  test.text_bodies.resize(NUM_ROWS);
+  test.text2_bodies.resize(NUM_ROWS);
 //  assert(test.bool_vector_values.resize(&error, NUM_ROWS + 1));
 //  assert(test.bool_vector2_values.resize(&error, NUM_ROWS + 1));
 //  assert(test.int_vector_values.resize(&error, NUM_ROWS + 1));
@@ -222,8 +220,10 @@ void init_test() try {
     test.int2_values.set(i, grnxx::Int(mersenne_twister() % 100));
 
     constexpr auto MAX_VALUE = mersenne_twister.max();
-    test.float_values.set(i, grnxx::Float(1.0 * mersenne_twister() / MAX_VALUE));
-    test.float2_values.set(i, grnxx::Float(1.0 * mersenne_twister() / MAX_VALUE));
+    test.float_values.set(i, grnxx::Float(1.0 * mersenne_twister() /
+                                          MAX_VALUE));
+    test.float2_values.set(i, grnxx::Float(1.0 * mersenne_twister() /
+                                           MAX_VALUE));
 
     test.geo_point_values.set(
         i, grnxx::GeoPoint(grnxx::Int(mersenne_twister() % 100),
@@ -232,13 +232,15 @@ void init_test() try {
         i, grnxx::GeoPoint(grnxx::Int(mersenne_twister() % 100),
                            grnxx::Int(mersenne_twister() % 100)));
 
-//    std::string *text_body = &test.text_bodies[i];
-//    generate_text(MIN_LENGTH, MAX_LENGTH, text_body);
-//    test.text_values.set(i, grnxx::Text(text_body->data(), text_body->length()));
+    std::string *text_body = &test.text_bodies[i];
+    generate_text(MIN_LENGTH, MAX_LENGTH, text_body);
+    test.text_values.set(i, grnxx::Text(text_body->data(),
+                                        text_body->length()));
 
-//    text_body = &test.text2_bodies[i];
-//    generate_text(MIN_LENGTH, MAX_LENGTH, text_body);
-//    test.text2_values.set(i, grnxx::Text(text_body->data(), text_body->length()));
+    text_body = &test.text2_bodies[i];
+    generate_text(MIN_LENGTH, MAX_LENGTH, text_body);
+    test.text2_values.set(i, grnxx::Text(text_body->data(),
+                             text_body->length()));
 
 //    grnxx::uint64_t bits = mersenne_twister();
 //    grnxx::Int size = mersenne_twister() % 59;
@@ -343,8 +345,8 @@ void init_test() try {
     float2_column->set(row_id, test.float2_values[i]);
     geo_point_column->set(row_id, test.geo_point_values[i]);
     geo_point2_column->set(row_id, test.geo_point2_values[i]);
-//    assert(text_column->set(&error, row_id, test.text_values[i]));
-//    assert(text2_column->set(&error, row_id, test.text2_values[i]));
+    text_column->set(row_id, test.text_values[i]);
+    text2_column->set(row_id, test.text2_values[i]);
 //    assert(bool_vector_column->set(&error, row_id,
 //                                   test.bool_vector_values[i]));
 //    assert(bool_vector2_column->set(&error, row_id,
@@ -477,7 +479,7 @@ void test_constant() try {
   expression->evaluate(records, &text_results);
   assert(text_results.size() == test.table->num_rows());
   for (size_t i = 0; i < text_results.size(); ++i) {
-//    assert(text_results[i] == grnxx::Text("ABC"));
+    assert((text_results[i] == grnxx::Text("ABC")).is_true());
   }
 
 //  // Test an expression ({ true, false, true }).
@@ -677,20 +679,19 @@ void test_column() {
            test.geo_point_values[row_id].longitude());
   }
 
-//  // Test an expression (Text).
-//  assert(builder->push_column(&error, "Text"));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Text).
+  builder->push_column("Text");
+  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);
-//    assert(text_results[i] == test.text_values[row_id]);
-//  }
+  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();
+    assert((text_results[i] == test.text_values[row_id]).is_true());
+  }
 
 //  // Test an expression (BoolVector).
 //  assert(builder->push_column(&error, "BoolVector"));
@@ -1185,32 +1186,32 @@ void test_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (Text == Text2).
-//  builder->push_column("Text");
-//  builder->push_column("Text2");
-//  builder->push_operator(grnxx::EQUAL_OPERATOR);
-//  expression = builder->release();
+  // Test an expression (Text == Text2).
+  builder->push_column("Text");
+  builder->push_column("Text2");
+  builder->push_operator(grnxx::EQUAL_OPERATOR);
+  expression = builder->release();
 
-//  records = create_input_records();
+  records = create_input_records();
 
-//  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_values[row_id] == test.text2_values[row_id]).value());
-//  }
+  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_values[row_id] == test.text2_values[row_id]).value());
+  }
 
-//  expression->filter(&records);
-//  count = 0;
-//  for (size_t i = 1; i < test.text_values.size(); ++i) {
-//    if ((test.text_values[i] == test.text2_values[i]).is_true()) {
-//      assert(records[count].row_id.value() == grnxx::Int(i).value());
-//      ++count;
-//    }
-//  }
-//  assert(records.size() == count);
+  expression->filter(&records);
+  count = 0;
+  for (size_t i = 0; i < test.text_values.size(); ++i) {
+    if ((test.text_values[i] == test.text2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
 //  // Test an expression (BoolVector == BoolVector2).
 //  assert(builder->push_column(&error, "BoolVector"));
@@ -1465,33 +1466,32 @@ void test_not_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (Text != Text2).
-//  assert(builder->push_column(&error, "Text"));
-//  assert(builder->push_column(&error, "Text2"));
-//  assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Text != Text2).
+  builder->push_column("Text");
+  builder->push_column("Text2");
+  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_values[row_id] != test.text2_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_values[row_id] != test.text2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_values.size(); ++i) {
-//    if (test.text_values[i] != test.text2_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_values.size(); ++i) {
+    if ((test.text_values[i] != test.text2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 
 //  // Test an expression (BoolVector != BoolVector2).
 //  assert(builder->push_column(&error, "BoolVector"));
@@ -1692,33 +1692,32 @@ void test_less() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (Text < Text2).
-//  assert(builder->push_column(&error, "Text"));
-//  assert(builder->push_column(&error, "Text2"));
-//  assert(builder->push_operator(&error, grnxx::LESS_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Text < Text2).
+  builder->push_column("Text");
+  builder->push_column("Text2");
+  builder->push_operator(grnxx::LESS_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_values[row_id] < test.text2_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_values[row_id] < test.text2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_values.size(); ++i) {
-//    if (test.text_values[i] < test.text2_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_values.size(); ++i) {
+    if ((test.text_values[i] < test.text2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 }
 
 void test_less_equal() {
@@ -1779,33 +1778,32 @@ void test_less_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (Text <= Text2).
-//  assert(builder->push_column(&error, "Text"));
-//  assert(builder->push_column(&error, "Text2"));
-//  assert(builder->push_operator(&error, grnxx::LESS_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Text <= Text2).
+  builder->push_column("Text");
+  builder->push_column("Text2");
+  builder->push_operator(grnxx::LESS_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_values[row_id] <= test.text2_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_values[row_id] <= test.text2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_values.size(); ++i) {
-//    if (test.text_values[i] <= test.text2_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_values.size(); ++i) {
+    if ((test.text_values[i] <= test.text2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 }
 
 void test_greater() {
@@ -1866,33 +1864,32 @@ void test_greater() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (Text > Text2).
-//  assert(builder->push_column(&error, "Text"));
-//  assert(builder->push_column(&error, "Text2"));
-//  assert(builder->push_operator(&error, grnxx::GREATER_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Text > Text2).
+  builder->push_column("Text");
+  builder->push_column("Text2");
+  builder->push_operator(grnxx::GREATER_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_values[row_id] > test.text2_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_values[row_id] > test.text2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_values.size(); ++i) {
-//    if (test.text_values[i] > test.text2_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_values.size(); ++i) {
+    if ((test.text_values[i] > test.text2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 }
 
 void test_greater_equal() {
@@ -1953,33 +1950,32 @@ void test_greater_equal() {
   }
   assert(records.size() == count);
 
-//  // Test an expression (Text >= Text2).
-//  assert(builder->push_column(&error, "Text"));
-//  assert(builder->push_column(&error, "Text2"));
-//  assert(builder->push_operator(&error, grnxx::GREATER_EQUAL_OPERATOR));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Text >= Text2).
+  builder->push_column("Text");
+  builder->push_column("Text2");
+  builder->push_operator(grnxx::GREATER_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_values[row_id] >= test.text2_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_values[row_id] >= test.text2_values[row_id]).value());
+  }
 
-//  assert(expression->filter(&error, &records));
-//  count = 0;
-//  for (grnxx::Int i = 1; i < test.text_values.size(); ++i) {
-//    if (test.text_values[i] >= test.text2_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_values.size(); ++i) {
+    if ((test.text_values[i] >= test.text2_values[i]).is_true()) {
+      assert(records[count].row_id.value() == grnxx::Int(i).value());
+      ++count;
+    }
+  }
+  assert(records.size() == count);
 }
 
 void test_bitwise_and() {
@@ -2576,29 +2572,28 @@ void test_subexpression() {
     assert(records[i].score.value() == float_value.value());
   }
 
-//  // Test an expression (Ref.(Ref.Text)).
-//  assert(builder->push_column(&error, "Ref"));
-//  assert(builder->begin_subexpression(&error));
-//  assert(builder->push_column(&error, "Ref"));
-//  assert(builder->begin_subexpression(&error));
-//  assert(builder->push_column(&error, "Text"));
-//  assert(builder->end_subexpression(&error));
-//  assert(builder->end_subexpression(&error));
-//  expression = builder->release(&error);
-//  assert(expression);
+  // Test an expression (Ref.(Ref.Text)).
+  builder->push_column("Ref");
+  builder->begin_subexpression();
+  builder->push_column("Ref");
+  builder->begin_subexpression();
+  builder->push_column("Text");
+  builder->end_subexpression();
+  builder->end_subexpression();
+  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 ref_value = test.ref_values[row_id];
-//    const auto ref_ref_value = test.ref_values[ref_value];
-//    const auto text_value = test.text_values[ref_ref_value];
-//    assert(text_results[i] == text_value);
-//  }
+  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 ref_value = test.ref_values[row_id];
+    const auto ref_ref_value = test.ref_values[ref_value.value()];
+    const auto text_value = test.text_values[ref_ref_value.value()];
+    assert((text_results[i] == text_value).is_true());
+  }
 
   // Test an expression ((Ref.Ref).Int).
   builder->push_column("Ref");
-------------- next part --------------
HTML����������������������������...
下載 



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