susumu.yata
null+****@clear*****
Mon Aug 18 17:10:37 JST 2014
susumu.yata 2014-08-18 17:10:37 +0900 (Mon, 18 Aug 2014) New Revision: 94207bf31677ed26b8cca469f6830162c67de539 https://github.com/groonga/grnxx/commit/94207bf31677ed26b8cca469f6830162c67de539 Message: Add tests for operators PLUS, MINUS, and MULTIPLICATION. (#37) Modified files: test/test_expression.cpp Modified: test/test_expression.cpp (+153 -3) =================================================================== --- test/test_expression.cpp 2014-08-18 16:57:22 +0900 (d60e667) +++ test/test_expression.cpp 2014-08-18 17:10:37 +0900 (165f698) @@ -1580,6 +1580,156 @@ void test_bitwise_xor() { } } +void test_plus() { + grnxx::Error error; + + // Create an object for building expressions. + auto builder = grnxx::ExpressionBuilder::create(&error, test.table); + assert(builder); + + // Test an expression (Int + Int2). + assert(builder->push_column(&error, "Int")); + assert(builder->push_column(&error, "Int2")); + assert(builder->push_operator(&error, grnxx::PLUS_OPERATOR)); + auto expression = builder->release(&error); + assert(expression); + + grnxx::Array<grnxx::Record> records; + auto cursor = test.table->create_cursor(&error); + assert(cursor); + assert(cursor->read_all(&error, &records) == test.table->num_rows()); + + grnxx::Array<grnxx::Int> int_results; + assert(expression->evaluate(&error, records, &int_results)); + assert(int_results.size() == test.table->num_rows()); + for (grnxx::Int i = 0; i < int_results.size(); ++i) { + grnxx::Int row_id = records.get_row_id(i); + assert(int_results[i] == + (test.int_values[row_id] + test.int2_values[row_id])); + } + + // Test an expression (Float + Float2). + assert(builder->push_column(&error, "Float")); + assert(builder->push_column(&error, "Float2")); + assert(builder->push_operator(&error, grnxx::PLUS_OPERATOR)); + 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::Float> float_results; + assert(expression->evaluate(&error, records, &float_results)); + assert(float_results.size() == test.table->num_rows()); + for (grnxx::Int i = 0; i < float_results.size(); ++i) { + grnxx::Int row_id = records.get_row_id(i); + assert(float_results[i] == + (test.float_values[row_id] + test.float2_values[row_id])); + } +} + +void test_minus() { + grnxx::Error error; + + // Create an object for building expressions. + auto builder = grnxx::ExpressionBuilder::create(&error, test.table); + assert(builder); + + // Test an expression (Int - Int2). + assert(builder->push_column(&error, "Int")); + assert(builder->push_column(&error, "Int2")); + assert(builder->push_operator(&error, grnxx::MINUS_OPERATOR)); + auto expression = builder->release(&error); + assert(expression); + + grnxx::Array<grnxx::Record> records; + auto cursor = test.table->create_cursor(&error); + assert(cursor); + assert(cursor->read_all(&error, &records) == test.table->num_rows()); + + grnxx::Array<grnxx::Int> int_results; + assert(expression->evaluate(&error, records, &int_results)); + assert(int_results.size() == test.table->num_rows()); + for (grnxx::Int i = 0; i < int_results.size(); ++i) { + grnxx::Int row_id = records.get_row_id(i); + assert(int_results[i] == + (test.int_values[row_id] - test.int2_values[row_id])); + } + + // Test an expression (Float - Float2). + assert(builder->push_column(&error, "Float")); + assert(builder->push_column(&error, "Float2")); + assert(builder->push_operator(&error, grnxx::MINUS_OPERATOR)); + 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::Float> float_results; + assert(expression->evaluate(&error, records, &float_results)); + assert(float_results.size() == test.table->num_rows()); + for (grnxx::Int i = 0; i < float_results.size(); ++i) { + grnxx::Int row_id = records.get_row_id(i); + assert(float_results[i] == + (test.float_values[row_id] - test.float2_values[row_id])); + } +} + +void test_multiplication() { + grnxx::Error error; + + // Create an object for building expressions. + auto builder = grnxx::ExpressionBuilder::create(&error, test.table); + assert(builder); + + // Test an expression (Int * Int2). + assert(builder->push_column(&error, "Int")); + assert(builder->push_column(&error, "Int2")); + assert(builder->push_operator(&error, grnxx::MULTIPLICATION_OPERATOR)); + auto expression = builder->release(&error); + assert(expression); + + grnxx::Array<grnxx::Record> records; + auto cursor = test.table->create_cursor(&error); + assert(cursor); + assert(cursor->read_all(&error, &records) == test.table->num_rows()); + + grnxx::Array<grnxx::Int> int_results; + assert(expression->evaluate(&error, records, &int_results)); + assert(int_results.size() == test.table->num_rows()); + for (grnxx::Int i = 0; i < int_results.size(); ++i) { + grnxx::Int row_id = records.get_row_id(i); + assert(int_results[i] == + (test.int_values[row_id] * test.int2_values[row_id])); + } + + // Test an expression (Float * Float2). + assert(builder->push_column(&error, "Float")); + assert(builder->push_column(&error, "Float2")); + assert(builder->push_operator(&error, grnxx::MULTIPLICATION_OPERATOR)); + 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::Float> float_results; + assert(expression->evaluate(&error, records, &float_results)); + assert(float_results.size() == test.table->num_rows()); + for (grnxx::Int i = 0; i < float_results.size(); ++i) { + grnxx::Int row_id = records.get_row_id(i); + assert(float_results[i] == + (test.float_values[row_id] * test.float2_values[row_id])); + } +} + // TODO: To be removed. void test_expression() { grnxx::Error error; @@ -2037,9 +2187,9 @@ int main() { test_bitwise_and(); test_bitwise_or(); test_bitwise_xor(); -// test_plus(); -// test_minus(); -// test_multiplication(); + test_plus(); + test_minus(); + test_multiplication(); // test_division(); // test_modulus(); -------------- next part -------------- HTML����������������������������...Descargar