Kouhei Sutou
null+****@clear*****
Mon Apr 13 17:04:42 JST 2015
Kouhei Sutou 2015-04-13 17:04:42 +0900 (Mon, 13 Apr 2015) New Revision: 634be4fde03c154bf1ec08f7710c8a745b0b945e https://github.com/ranguba/rroonga/commit/634be4fde03c154bf1ec08f7710c8a745b0b945e Message: Add Groonga::LessEqualOperator#exec Added files: ext/groonga/rb-grn-less-equal-operator.c Modified files: ext/groonga/rb-grn-operator.c ext/groonga/rb-grn.h test/test-operator.rb Added: ext/groonga/rb-grn-less-equal-operator.c (+88 -0) 100644 =================================================================== --- /dev/null +++ ext/groonga/rb-grn-less-equal-operator.c 2015-04-13 17:04:42 +0900 (6cf9e56) @@ -0,0 +1,88 @@ +/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + Copyright (C) 2015 Kouhei Sutou <kou �� clear-code.com> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "rb-grn.h" + +VALUE rb_cGrnLessEqualOperator; + +/* + * Executes a less-or-equal operation. + * + * @example Executes less-or-equal operations with the default context + * Groonga::Operator::LESS_EQUAL.exec(1, 1) # => true + * Groonga::Operator::LESS_EQUAL.exec(1, 2) # => true + * Groonga::Operator::LESS_EQUAL.exec(2, 1) # => false + * + * @example Executes less-or-equal operations with the specified context + * context = Groonga::Context.new + * Groonga::Operator::LESS_EQUAL.exec(1, 1, + * :context => context) # => true + * Groonga::Operator::LESS_EQUAL.exec(1, 2, + * :context => context) # => true + * Groonga::Operator::LESS_EQUAL.exec(2, 1, + * :context => context) # => false + * + * @overload exec(x, y, options={}) + * @param x [::Object] The left hand side value. + * @param y [::Object] The right hand side value. + * @param options [::Hash] The options. + * @option options [Groonga::Context] (Groonga::Context.default) + * The context to executes the operation. + * @return [Boolean] `true` if `x` is less than or equal to`y`, + * `false` otherwise. + */ +static VALUE +rb_grn_less_equal_operator_exec (int argc, VALUE *argv, VALUE self) +{ + grn_bool less_equal; + VALUE rb_x; + VALUE rb_y; + VALUE rb_options; + VALUE rb_context; + grn_ctx *context; + grn_obj x; + grn_obj y; + + rb_scan_args(argc, argv, "21", &rb_x, &rb_y, &rb_options); + + rb_grn_scan_options(rb_options, + "context", &rb_context, + NULL); + context = rb_grn_context_ensure(&rb_context); + + GRN_VOID_INIT(&x); + GRN_VOID_INIT(&y); + RVAL2GRNBULK(rb_x, context, &x); + RVAL2GRNBULK(rb_y, context, &y); + less_equal = grn_operator_exec_less_equal(context, &x, &y); + GRN_OBJ_FIN(context, &x); + GRN_OBJ_FIN(context, &y); + + return CBOOL2RVAL(less_equal); +} + +void +rb_grn_init_less_equal_operator (VALUE mGrn) +{ + rb_cGrnLessEqualOperator = rb_define_class_under(mGrn, + "LessEqualOperator", + rb_cGrnOperator); + + rb_define_method(rb_cGrnLessEqualOperator, "exec", + rb_grn_less_equal_operator_exec, -1); +} Modified: ext/groonga/rb-grn-operator.c (+2 -1) =================================================================== --- ext/groonga/rb-grn-operator.c 2015-04-13 16:59:30 +0900 (bf551e9) +++ ext/groonga/rb-grn-operator.c 2015-04-13 17:04:42 +0900 (2f5840a) @@ -305,6 +305,7 @@ rb_grn_init_operator (VALUE mGrn) rb_grn_init_not_equal_operator(mGrn); rb_grn_init_less_operator(mGrn); rb_grn_init_greater_operator(mGrn); + rb_grn_init_less_equal_operator(mGrn); rb_define_const(rb_cGrnOperator, "PUSH", rb_funcall(rb_cGrnOperator, rb_intern("new"), 2, @@ -444,7 +445,7 @@ rb_grn_init_operator (VALUE mGrn) rb_str_new_cstr("greater"), UINT2NUM(GRN_OP_GREATER))); rb_define_const(rb_cGrnOperator, "LESS_EQUAL", - rb_funcall(rb_cGrnOperator, rb_intern("new"), 2, + rb_funcall(rb_cGrnLessEqualOperator, rb_intern("new"), 2, rb_str_new_cstr("less-equal"), UINT2NUM(GRN_OP_LESS_EQUAL))); rb_define_const(rb_cGrnOperator, "GREATER_EQUAL", Modified: ext/groonga/rb-grn.h (+2 -0) =================================================================== --- ext/groonga/rb-grn.h 2015-04-13 16:59:30 +0900 (23d4ec3) +++ ext/groonga/rb-grn.h 2015-04-13 17:04:42 +0900 (4a7c56c) @@ -290,6 +290,7 @@ RB_GRN_VAR VALUE rb_cGrnEqualOperator; RB_GRN_VAR VALUE rb_cGrnNotEqualOperator; RB_GRN_VAR VALUE rb_cGrnLessOperator; RB_GRN_VAR VALUE rb_cGrnGreaterOperator; +RB_GRN_VAR VALUE rb_cGrnLessEqualOperator; RB_GRN_VAR VALUE rb_cGrnExpression; RB_GRN_VAR VALUE rb_cGrnRecordExpressionBuilder; RB_GRN_VAR VALUE rb_cGrnColumnExpressionBuilder; @@ -333,6 +334,7 @@ void rb_grn_init_equal_operator (VALUE mGrn); void rb_grn_init_not_equal_operator (VALUE mGrn); void rb_grn_init_less_operator (VALUE mGrn); void rb_grn_init_greater_operator (VALUE mGrn); +void rb_grn_init_less_equal_operator (VALUE mGrn); void rb_grn_init_expression (VALUE mGrn); void rb_grn_init_expression_builder (VALUE mGrn); void rb_grn_init_logger (VALUE mGrn); Modified: test/test-operator.rb (+22 -0) =================================================================== --- test/test-operator.rb 2015-04-13 16:59:30 +0900 (c8ba9ea) +++ test/test-operator.rb 2015-04-13 17:04:42 +0900 (99b44cf) @@ -98,4 +98,26 @@ class OperatorTest < Test::Unit::TestCase end end end + + sub_test_case "less-equal" do + sub_test_case "#exec" do + test "equal" do + assert_true(Groonga::Operator::LESS_EQUAL.exec(1, 1)) + end + + test "less" do + assert_true(Groonga::Operator::LESS_EQUAL.exec(1, 2)) + end + + test "greater" do + assert_false(Groonga::Operator::LESS_EQUAL.exec(2, 1)) + end + + test ":context" do + context = Groonga::Context.new + assert_true(Groonga::Operator::LESS_EQUAL.exec(1, 2, + :context => context)) + end + end + end end -------------- next part -------------- HTML����������������������������... 다운로드