[Groonga-commit] groonga/grnxx at e1ac250 [master] Add a test for reverse cursor.

Back to archive index

susumu.yata null+****@clear*****
Wed Dec 3 20:15:41 JST 2014


susumu.yata	2014-12-03 20:15:41 +0900 (Wed, 03 Dec 2014)

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

  Message:
    Add a test for reverse cursor.

  Modified files:
    test/test_index.cpp

  Modified: test/test_index.cpp (+59 -60)
===================================================================
--- test/test_index.cpp    2014-12-03 20:01:00 +0900 (fd2acfa)
+++ test/test_index.cpp    2014-12-03 20:15:41 +0900 (e1d5517)
@@ -441,7 +441,7 @@ void test_int_range() {
   grnxx::Array<grnxx::Int> values;
   values.resize(NUM_ROWS);
   for (size_t i = 0; i < NUM_ROWS; ++i) {
-    if ((rng() % 100) == 0) {
+    if ((rng() % 128) != 0) {
       values[i] = grnxx::Int::na();
     } else {
       values[i] = grnxx::Int(rng() % 100);
@@ -494,7 +494,7 @@ void test_float_range() {
   grnxx::Array<grnxx::Float> values;
   values.resize(NUM_ROWS);
   for (size_t i = 0; i < NUM_ROWS; ++i) {
-    if ((rng() % 100) == 0) {
+    if ((rng() % 128) != 0) {
       values[i] = grnxx::Float::na();
     } else {
       values[i] = grnxx::Float((rng() % 256) / 256.0);
@@ -551,7 +551,7 @@ void test_text_range() {
     std::sprintf(bodies[i], "%d", i);
   }
   for (size_t i = 0; i < NUM_ROWS; ++i) {
-    if ((rng() % 100) == 0) {
+    if ((rng() % 128) != 0) {
       values[i] = grnxx::Text::na();
     } else {
       values[i] = grnxx::Text(bodies[rng() % 100]);
@@ -608,7 +608,7 @@ void test_text_find_starts_with() {
     std::sprintf(bodies[i], "%d", i);
   }
   for (size_t i = 0; i < NUM_ROWS; ++i) {
-    if ((rng() % 100) == 0) {
+    if ((rng() % 128) != 0) {
       values[i] = grnxx::Text::na();
     } else {
       values[i] = grnxx::Text(bodies[rng() % 100]);
@@ -692,7 +692,7 @@ void test_text_find_prefixes() {
     std::sprintf(bodies[i], "%d", i);
   }
   for (size_t i = 0; i < NUM_ROWS; ++i) {
-    if ((rng() % 100) == 0) {
+    if ((rng() % 128) != 0) {
       values[i] = grnxx::Text::na();
     } else {
       values[i] = grnxx::Text(bodies[rng() % 100]);
@@ -727,66 +727,65 @@ void test_text_find_prefixes() {
   }
 }
 
-//void test_reverse() {
-//  grnxx::Error error;
-
-//  // Create a database with the default options.
-//  auto db = grnxx::open_db(&error, "");
-//  assert(db);
-
-//  // Create a table with the default options.
-//  auto table = db->create_table(&error, "Table");
-//  assert(table);
-
-//  // Create a column.
-//  auto column = table->create_column(&error, "Int", grnxx::INT_DATA);
-//  assert(column);
+void test_reverse() {
+  // Create a column.
+  auto db = grnxx::open_db("");
+  auto table = db->create_table("Table");
+  auto column = table->create_column("Int", grnxx::INT_DATA);
 
-//  // Create an index.
-//  auto index = column->create_index(&error, "Index", grnxx::TREE_INDEX);
-//  assert(index);
+  // Create an index.
+  auto index = column->create_index("Index", grnxx::TREE_INDEX);
 
-//  // Generate random values.
-//  // Int: [0, 100).
-//  grnxx::Array<grnxx::Int> values;
-//  assert(values.resize(&error, NUM_ROWS + 1));
-//  for (grnxx::Int i = 1; i <= NUM_ROWS; ++i) {
-//    values.set(i, rng() % 100);
-//  }
+  // Generate random values.
+  // Int: [0, 100).
+  grnxx::Array<grnxx::Int> values;
+  values.resize(NUM_ROWS);
+  for (size_t i = 0; i < NUM_ROWS; ++i) {
+    if ((rng() % 128) != 0) {
+      values[i] = grnxx::Int(rng() % 100);
+    } else {
+      values[i] = grnxx::Int::na();
+    }
+  }
 
-//  // Store generated values into columns.
-//  for (grnxx::Int i = 1; i <= NUM_ROWS; ++i) {
-//    grnxx::Int row_id;
-//    assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
-//                             grnxx::Datum(), &row_id));
-//    assert(row_id == i);
-//    assert(column->set(&error, row_id, values[i]));
-//  }
+  // Store generated values into columns.
+  for (size_t i = 0; i < NUM_ROWS; ++i) {
+    grnxx::Int row_id = table->insert_row();
+    column->set(row_id, values[i]);
+  }
 
-//  // Create a cursor.
-//  grnxx::IndexRange range;
-//  range.set_lower_bound(grnxx::Int(10), grnxx::INCLUSIVE_END_POINT);
-//  range.set_upper_bound(grnxx::Int(90), grnxx::EXCLUSIVE_END_POINT);
-//  grnxx::CursorOptions options;
-//  options.order_type = grnxx::REVERSE_ORDER;
-//  auto cursor = index->find_in_range(&error, range, options);
-//  assert(cursor);
+  // Create a cursor.
+  grnxx::IndexRange range;
+  range.set_lower_bound(grnxx::Int(10), grnxx::INCLUSIVE_END_POINT);
+  range.set_upper_bound(grnxx::Int(90), grnxx::EXCLUSIVE_END_POINT);
+  grnxx::CursorOptions options;
+  options.order_type = grnxx::CURSOR_REVERSE_ORDER;
+  auto cursor = index->find_in_range(range, options);
 
-//  grnxx::Array<grnxx::Record> records;
-//  auto result = cursor->read_all(&error, &records);
-//  assert(result.is_ok);
-//  for (grnxx::Int i = 1; i < records.size(); ++i) {
-//    assert(values[records.get_row_id(i - 1)] >= values[records.get_row_id(i)]);
-//  }
+  grnxx::Array<grnxx::Record> records;
+  cursor->read_all(&records);
+  for (size_t i = 1; i < records.size(); ++i) {
+    size_t lhs_row_id = records[i - 1].row_id.raw();
+    size_t rhs_row_id = records[i].row_id.raw();
+    grnxx::Int lhs_value = values[lhs_row_id];
+    grnxx::Int rhs_value = values[rhs_row_id];
+    assert(!lhs_value.is_na());
+    assert(!rhs_value.is_na());
+    assert(lhs_value.raw() >= rhs_value.raw());
+    if (lhs_value.match(rhs_value)) {
+      assert(lhs_row_id < rhs_row_id);
+    }
+  }
 
-//  grnxx::Int count = 0;
-//  for (grnxx::Int i = 1; i <= NUM_ROWS; ++i) {
-//    if ((values[i] >= 10) && (values[i] < 90)) {
-//      ++count;
-//    }
-//  }
-//  assert(count == records.size());
-//}
+  size_t count = 0;
+  for (size_t i = 0; i < NUM_ROWS; ++i) {
+    if ((values[i] >= grnxx::Int(10)).is_true() &&
+        (values[i] < grnxx::Int(90)).is_true()) {
+      ++count;
+    }
+  }
+  assert(count == records.size());
+}
 
 //void test_offset_and_limit() {
 //  grnxx::Error error;
@@ -885,7 +884,7 @@ int main() {
   test_text_find_starts_with();
   test_text_find_prefixes();
 
-//  test_reverse();
+  test_reverse();
 //  test_offset_and_limit();
 
   return 0;
-------------- next part --------------
HTML����������������������������...
다운로드 



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