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����������������������������... 다운로드