susumu.yata
null+****@clear*****
Wed Aug 20 16:03:19 JST 2014
susumu.yata 2014-08-20 16:03:19 +0900 (Wed, 20 Aug 2014) New Revision: 09a0a8d903c37c4bc0d54107a4a9065ff7704a16 https://github.com/groonga/grnxx/commit/09a0a8d903c37c4bc0d54107a4a9065ff7704a16 Message: Add a test for partial filtering. Modified files: test/test_expression.cpp Modified: test/test_expression.cpp (+41 -0) =================================================================== --- test/test_expression.cpp 2014-08-20 16:02:06 +0900 (dea5e37) +++ test/test_expression.cpp 2014-08-20 16:03:19 +0900 (e00eefc) @@ -2028,6 +2028,44 @@ void test_sequential_evaluate() { } } +void test_partial_filter() { + grnxx::Error error; + + // Create an object for building expressions. + auto builder = grnxx::ExpressionBuilder::create(&error, test.table); + assert(builder); + + // Test an expression ((Float * Float2) > 0.25). + assert(builder->push_column(&error, "Float")); + assert(builder->push_column(&error, "Float2")); + assert(builder->push_operator(&error, grnxx::MULTIPLICATION_OPERATOR)); + assert(builder->push_datum(&error, grnxx::Float(0.25))); + assert(builder->push_operator(&error, grnxx::GREATER_OPERATOR)); + auto expression = builder->release(&error); + assert(expression); + + // Read all records. + auto cursor = test.table->create_cursor(&error); + assert(cursor); + grnxx::Array<grnxx::Record> records; + assert(cursor->read_all(&error, &records) == test.table->num_rows()); + + // Extract a part of true records. + constexpr grnxx::Int OFFSET = 12345; + constexpr grnxx::Int LIMIT = 5000; + assert(expression->filter(&error, &records, 0, OFFSET, LIMIT)); + assert(records.size() == 5000); + grnxx::Int count = 0; + for (grnxx::Int i = 1; i < test.bool_values.size(); ++i) { + if ((test.float_values[i] * test.float2_values[i]) > 0.25) { + if ((count >= OFFSET) && (count < (OFFSET + LIMIT))) { + assert(records.get_row_id(count - OFFSET) == i); + } + ++count; + } + } +} + int main() { init_test(); @@ -2066,5 +2104,8 @@ int main() { test_sequential_adjust(); test_sequential_evaluate(); + // Test partial filtering. + test_partial_filter(); + return 0; } -------------- next part -------------- HTML����������������������������... 下载