[Groonga-commit] groonga/grnxx at 683fdda [master] Add tests for Vector<Int>. (#48)

Zurück zum Archiv-Index

susumu.yata null+****@clear*****
Fri Sep 12 16:24:30 JST 2014


susumu.yata	2014-09-12 16:24:30 +0900 (Fri, 12 Sep 2014)

  New Revision: 683fddac5ff7ced71f3de61886759cf2912c426e
  https://github.com/groonga/grnxx/commit/683fddac5ff7ced71f3de61886759cf2912c426e

  Message:
    Add tests for Vector<Int>. (#48)

  Modified files:
    test/test_expression.cpp

  Modified: test/test_expression.cpp (+78 -0)
===================================================================
--- test/test_expression.cpp    2014-09-12 16:24:06 +0900 (23b7fab)
+++ test/test_expression.cpp    2014-09-12 16:24:30 +0900 (28c1da5)
@@ -62,6 +62,10 @@ struct {
   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;
+  grnxx::Array<grnxx::IntVector> ref_vector2_values;
+  grnxx::Array<grnxx::Array<grnxx::Int>> ref_vector_bodies;
+  grnxx::Array<grnxx::Array<grnxx::Int>> ref_vector2_bodies;
 } test;
 
 void generate_text(grnxx::Int min_size, grnxx::Int max_size,
@@ -167,6 +171,14 @@ void init_test() {
   assert(ref_column);
   assert(ref2_column);
 
+  data_type = grnxx::INT_VECTOR_DATA;
+  auto ref_vector_column =
+      test.table->create_column(&error, "RefVector", data_type, options);
+  auto ref_vector2_column =
+      test.table->create_column(&error, "RefVector2", data_type, options);
+  assert(ref_vector_column);
+  assert(ref_vector2_column);
+
   // Generate random values.
   // Bool: true or false.
   // Int: [0, 100).
@@ -214,6 +226,10 @@ void init_test() {
   assert(test.text_vector2_bodies.resize(&error, NUM_ROWS + 1));
   assert(test.ref_values.resize(&error, NUM_ROWS + 1));
   assert(test.ref2_values.resize(&error, NUM_ROWS + 1));
+  assert(test.ref_vector_values.resize(&error, NUM_ROWS + 1));
+  assert(test.ref_vector2_values.resize(&error, NUM_ROWS + 1));
+  assert(test.ref_vector_bodies.resize(&error, NUM_ROWS + 1));
+  assert(test.ref_vector2_bodies.resize(&error, NUM_ROWS + 1));
 
   for (grnxx::Int i = 1; i <= NUM_ROWS; ++i) {
     test.bool_values.set(i, (mersenne_twister() & 1) != 0);
@@ -312,6 +328,21 @@ void init_test() {
 
     test.ref_values.set(i, 1 + (mersenne_twister() % NUM_ROWS));
     test.ref2_values.set(i, 1 + (mersenne_twister() % NUM_ROWS));
+
+    size = mersenne_twister() % (MAX_SIZE + 1);
+    assert(test.ref_vector_bodies[i].resize(&error, size));
+    for (grnxx::Int j = 0; j < size; ++j) {
+      test.ref_vector_bodies[i][j] = 1 + (mersenne_twister() % NUM_ROWS);
+    }
+    test.ref_vector_values.set(
+        i, grnxx::IntVector(test.ref_vector_bodies[i].data(), size));
+    size = mersenne_twister() % (MAX_SIZE + 1);
+    assert(test.ref_vector2_bodies[i].resize(&error, size));
+    for (grnxx::Int j = 0; j < size; ++j) {
+      test.ref_vector2_bodies[i][j] = 1 + (mersenne_twister() % NUM_ROWS);
+    }
+    test.ref_vector2_values.set(
+        i, grnxx::IntVector(test.ref_vector2_bodies[i].data(), size));
   }
 
   // Store generated values into columns.
@@ -356,6 +387,8 @@ void init_test() {
   for (grnxx::Int i = 1; i <= NUM_ROWS; ++i) {
     assert(ref_column->set(&error, i, test.ref_values[i]));
     assert(ref2_column->set(&error, i, test.ref2_values[i]));
+    assert(ref_vector_column->set(&error, i, test.ref_vector_values[i]));
+    assert(ref_vector2_column->set(&error, i, test.ref_vector2_values[i]));
   }
 }
 
@@ -797,6 +830,24 @@ void test_column() {
     grnxx::Int row_id = records.get_row_id(i);
     assert(ref_results[i] == test.ref_values[row_id]);
   }
+
+  // Test an expression (RefVector).
+  assert(builder->push_column(&error, "RefVector"));
+  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::IntVector> ref_vector_results;
+  assert(expression->evaluate(&error, records, &ref_vector_results));
+  assert(ref_vector_results.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < ref_vector_results.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    assert(ref_vector_results[i] == test.ref_vector_values[row_id]);
+  }
 }
 
 void test_logical_not() {
@@ -2983,6 +3034,33 @@ void test_subexpression() {
     const auto text_value = test.text_values[ref_ref_value];
     assert(text_results[i] == text_value);
   }
+
+  // Test an expression (RefVector.Int).
+  assert(builder->push_column(&error, "RefVector"));
+  assert(builder->begin_subexpression(&error));
+  assert(builder->push_column(&error, "Int"));
+  assert(builder->end_subexpression(&error));
+  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::IntVector> int_vector_results;
+  assert(expression->evaluate(&error, records, &int_vector_results));
+  assert(int_vector_results.size() == test.table->num_rows());
+  for (grnxx::Int i = 0; i < int_vector_results.size(); ++i) {
+    grnxx::Int row_id = records.get_row_id(i);
+    const auto ref_vector_value = test.ref_vector_values[row_id];
+    assert(int_vector_results[i].size() == ref_vector_value.size());
+    for (grnxx::Int j = 0; j < ref_vector_value.size(); ++j) {
+      grnxx::Int ref_value = ref_vector_value[j];
+      const auto int_value = test.int_values[ref_value];
+      assert(int_vector_results[i][j] == int_value);
+    }
+  }
 }
 
 void test_sequential_filter() {
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Zurück zum Archiv-Index