susumu.yata
null+****@clear*****
Wed Sep 24 11:05:50 JST 2014
susumu.yata 2014-09-24 11:05:50 +0900 (Wed, 24 Sep 2014) New Revision: 3ac930405157879a3bd4ef4f0404e61d7a4a1aa8 https://github.com/groonga/grnxx/commit/3ac930405157879a3bd4ef4f0404e61d7a4a1aa8 Message: Add tests for Lhs/RhsMerger. (#67) Modified files: test/test_merger.cpp Modified: test/test_merger.cpp (+104 -2) =================================================================== --- test/test_merger.cpp 2014-09-24 11:05:37 +0900 (4ad54fc) +++ test/test_merger.cpp 2014-09-24 11:05:50 +0900 (36832a1) @@ -240,6 +240,108 @@ void test_minus() { assert(count == result_records.size()); } +void test_lhs() { + grnxx::Error error; + + // Create cursors to read all the records. + auto cursor = test.table->create_cursor(&error); + assert(cursor); + auto cursor2 = test.table->create_cursor(&error); + assert(cursor2); + + // Create expressions to read values. + auto expression_builder = + grnxx::ExpressionBuilder::create(&error, test.table); + assert(expression_builder); + assert(expression_builder->push_column(&error, "Bool")); + auto expression = expression_builder->release(&error); + assert(expression); + assert(expression_builder->push_column(&error, "Bool2")); + auto expression2 = expression_builder->release(&error); + assert(expression2); + + // Create input records. + grnxx::Array<grnxx::Record> records; + assert(cursor->read_all(&error, &records) == test.table->num_rows()); + assert(expression->filter(&error, &records)); + grnxx::Array<grnxx::Record> records2; + assert(cursor2->read_all(&error, &records2) == test.table->num_rows()); + assert(expression2->filter(&error, &records2)); + + // Merge records. + grnxx::MergerOptions options; + options.type = grnxx::LHS_MERGER; + options.operator_type = grnxx::PLUS_MERGER_OPERATOR; + auto merger = grnxx::Merger::create(&error, options); + assert(merger); + grnxx::Array<grnxx::Record> result_records; + assert(merger->merge(&error, &records, &records2, &result_records)); + + for (grnxx::Int i = 0; i < result_records.size(); ++i) { + grnxx::Int row_id = result_records.get_row_id(i); + assert(test.bool_values[row_id]); + } + + grnxx::Int count = 0; + for (grnxx::Int i = 1; i <= test.table->max_row_id(); ++i) { + if (test.bool_values[i]) { + ++count; + } + } + assert(count == result_records.size()); +} + +void test_rhs() { + grnxx::Error error; + + // Create cursors to read all the records. + auto cursor = test.table->create_cursor(&error); + assert(cursor); + auto cursor2 = test.table->create_cursor(&error); + assert(cursor2); + + // Create expressions to read values. + auto expression_builder = + grnxx::ExpressionBuilder::create(&error, test.table); + assert(expression_builder); + assert(expression_builder->push_column(&error, "Bool")); + auto expression = expression_builder->release(&error); + assert(expression); + assert(expression_builder->push_column(&error, "Bool2")); + auto expression2 = expression_builder->release(&error); + assert(expression2); + + // Create input records. + grnxx::Array<grnxx::Record> records; + assert(cursor->read_all(&error, &records) == test.table->num_rows()); + assert(expression->filter(&error, &records)); + grnxx::Array<grnxx::Record> records2; + assert(cursor2->read_all(&error, &records2) == test.table->num_rows()); + assert(expression2->filter(&error, &records2)); + + // Merge records. + grnxx::MergerOptions options; + options.type = grnxx::RHS_MERGER; + options.operator_type = grnxx::PLUS_MERGER_OPERATOR; + auto merger = grnxx::Merger::create(&error, options); + assert(merger); + grnxx::Array<grnxx::Record> result_records; + assert(merger->merge(&error, &records, &records2, &result_records)); + + for (grnxx::Int i = 0; i < result_records.size(); ++i) { + grnxx::Int row_id = result_records.get_row_id(i); + assert(test.bool2_values[row_id]); + } + + grnxx::Int count = 0; + for (grnxx::Int i = 1; i <= test.table->max_row_id(); ++i) { + if (test.bool2_values[i]) { + ++count; + } + } + assert(count == result_records.size()); +} + void test_plus() { grnxx::Error error; @@ -315,8 +417,8 @@ int main() { test_or(); // test_xor(); test_minus(); -// test_lhs(); -// test_rhs(); + test_lhs(); + test_rhs(); test_plus(); -------------- next part -------------- HTML����������������������������...Download