[groonga-dev,00034] Re: grn_obj_set_value()のGRN_OBJ_SETはGRN_OBJ_INCRも含む?

アーカイブの一覧に戻る

morit****@razil***** morit****@razil*****
2009年 4月 13日 (月) 08:25:31 JST


森です。

ありがとうございます!!
とりこませていただきました。

>>> Kouhei Sutou さんは書きました:
> 須藤です。
> 
> In <20090****@epepe*****>
>   "[groonga-dev,00030] Re: grn_obj_set_value()のGRN_OBJ_SETはGRN_OBJ_INCRも含む?" on Sun, 12 Apr 2009 00:53:57 +0900,
>   morit****@razil***** wrote:
> 
> > ご指摘ありがとうございます!
> > breakが抜けてました・・
> 
> テストを書いてみました。
> INCRDECRの方のテストにもなっていると思います。
> 
> diff --git a/test/unit/core/Makefile.am b/test/unit/core/Makefile.am
> index 60c45c6..63759c2 100644
> --- a/test/unit/core/Makefile.am
> +++ b/test/unit/core/Makefile.am
> @@ -12,7 +12,8 @@ noinst_LTLIBRARIES =				\
>  	test-stress.la				\
>  	test-public-context.la			\
>  	test-query.la				\
> -	test-table.la
> +	test-table.la				\
> +	test-column.la
>  endif
>  
>  INCLUDES =			\
> @@ -46,3 +47,4 @@ test_stress_la_SOURCES			= test-stress.c
>  test_public_context_la_SOURCES		= test-public-context.c
>  test_query_la_SOURCES			= test-query.c
>  test_table_la_SOURCES			= test-table.c
> +test_column_la_SOURCES			= test-column.c
> diff --git a/test/unit/core/test-column.c b/test/unit/core/test-column.c
> new file mode 100644
> index 0000000..6c15163
> --- /dev/null
> +++ b/test/unit/core/test-column.c
> @@ -0,0 +1,153 @@
> +/* -*- c-basic-offset: 2; coding: utf-8 -*- */
> +/*
> +  Copyright (C) 2009  Kouhei Sutou <kou****@clear*****>
> +
> +  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> +*/
> +
> +#include <groonga.h>
> +
> +#include <gcutter.h>
> +#include <glib/gstdio.h>
> +
> +#include "../lib/grn-assertions.h"
> +
> +#define LOOKUP(name) (grn_ctx_lookup(&context, name, strlen(name)))
> +
> +void test_fix_size_set_value_set(void);
> +
> +static grn_logger_info *logger;
> +static grn_ctx context;
> +static grn_obj *database;
> +static grn_obj *bookmarks;
> +static grn_obj *count_column;
> +static grn_id groonga_bookmark_id;
> +
> +static void
> +create_bookmarks_table(void)
> +{
> +  const gchar bookmarks_table_name[] = "bookmarks";
> +
> +  bookmarks = grn_table_create(&context,
> +                               bookmarks_table_name,
> +                               strlen(bookmarks_table_name),
> +                               NULL,
> +                               GRN_OBJ_TABLE_HASH_KEY,
> +                               LOOKUP("<shorttext>"),
> +                               1024,
> +                               GRN_ENC_DEFAULT);
> +  grn_test_assert_context(&context);
> +  cut_set_message("%s", cut_take_string(grn_collect_logger_to_string(logger)));
> +  cut_assert_not_null(bookmarks);
> +}
> +
> +static void
> +add_count_column_to_bookmarks_table (void)
> +{
> +  const gchar count_column_name[] = "count";
> +
> +  count_column = grn_column_create(&context,
> +                                   bookmarks,
> +                                   count_column_name,
> +                                   strlen(count_column_name),
> +                                   NULL, 0,
> +                                   LOOKUP("<int>"));
> +  grn_test_assert_context(&context);
> +  cut_set_message("%s", cut_take_string(grn_collect_logger_to_string(logger)));
> +  cut_assert_not_null(count_column);
> +}
> +
> +static void
> +add_groonga_bookmark(void)
> +{
> +  gchar key[] = "groonga";
> +  grn_search_flags flags = GRN_TABLE_ADD;
> +
> +  groonga_bookmark_id = grn_table_lookup(&context, bookmarks,
> +                                         &key, strlen(key),
> +                                         &flags);
> +  grn_test_assert_context(&context);
> +  cut_set_message("%s", cut_take_string(grn_collect_logger_to_string(logger)));
> +  grn_test_assert_not_nil(groonga_bookmark_id);
> +}
> +
> +void
> +setup(void)
> +{
> +  logger = setup_grn_logger();
> +  grn_ctx_init(&context, 0, GRN_ENC_DEFAULT);
> +  database = grn_db_create(&context, NULL, NULL);
> +
> +  create_bookmarks_table();
> +  add_count_column_to_bookmarks_table();
> +  add_groonga_bookmark();
> +}
> +
> +void
> +teardown(void)
> +{
> +  grn_ctx_fin(&context);
> +  teardown_grn_logger(logger);
> +}
> +
> +void
> +test_fix_size_set_value_set(void)
> +{
> +  gint32 count = 29;
> +  gint32 retrieved_count;
> +  grn_obj *record_value;
> +  grn_obj *retrieved_record_value;
> +
> +  record_value = grn_obj_open(&context, GRN_BULK, 0, 0);
> +  grn_bulk_write(&context, record_value, (const char *)&count, sizeof(count));
> +  grn_test_assert(grn_obj_set_value(&context, count_column, groonga_bookmark_id,
> +                                    record_value, GRN_OBJ_SET));
> +
> +  retrieved_record_value = grn_obj_get_value(&context, count_column,
> +                                             groonga_bookmark_id, NULL);
> +  memcpy(&retrieved_count,
> +         GRN_BULK_HEAD(retrieved_record_value),
> +         GRN_BULK_VSIZE(retrieved_record_value));
> +  cut_assert_equal_int(count, retrieved_count);
> +}
> +
> +void
> +test_fix_size_set_value_increment(void)
> +{
> +  gint32 count = 29;
> +  gint32 increment_count = 5;
> +  gint32 retrieved_count;
> +  grn_obj *record_value;
> +  grn_obj *retrieved_record_value;
> +
> +  record_value = grn_obj_open(&context, GRN_BULK, 0, 0);
> +  grn_bulk_write(&context, record_value, (const char *)&count, sizeof(count));
> +  grn_test_assert(grn_obj_set_value(&context, count_column, groonga_bookmark_id,
> +                                    record_value, GRN_OBJ_SET));
> +  grn_obj_close(&context, record_value);
> +
> +  record_value = grn_obj_open(&context, GRN_BULK, 0, 0);
> +  grn_bulk_write(&context, record_value,
> +                 (const char *)&increment_count, sizeof(increment_count));
> +  grn_test_assert(grn_obj_set_value(&context, count_column, groonga_bookmark_id,
> +                                    record_value, GRN_OBJ_INCR));
> +  grn_obj_close(&context, record_value);
> +
> +  retrieved_record_value = grn_obj_get_value(&context, count_column,
> +                                             groonga_bookmark_id, NULL);
> +  memcpy(&retrieved_count,
> +         GRN_BULK_HEAD(retrieved_record_value),
> +         GRN_BULK_VSIZE(retrieved_record_value));
> +  cut_assert_equal_int(count + increment_count, retrieved_count);
> +}
> diff --git a/test/unit/lib/grn-assertions.c b/test/unit/lib/grn-assertions.c
> index a3af69f..8316562 100644
> --- a/test/unit/lib/grn-assertions.c
> +++ b/test/unit/lib/grn-assertions.c
> @@ -76,3 +76,23 @@ grn_test_assert_not_nil_helper(grn_id id, const gchar *expression)
>                                    expression, id, GRN_ID_NIL));
>    }
>  }
> +
> +void
> +grn_test_assert_context_helper (grn_ctx *context, const gchar *expression)
> +{
> +  if (!context) {
> +    cut_set_message("context should not NULL");
> +    cut_assert_null_helper(context, expression);
> +  } else if (context->rc == GRN_SUCCESS) {
> +    cut_test_pass();
> +  } else {
> +    cut_test_fail(cut_take_printf("<(%s)->rc> != <GRN_SUCCESS>\n"
> +                                  "expected: <%s> is <%s>\n"
> +                                  "%s:%d: %s(): %s",
> +                                  expression,
> +                                  grn_rc_to_string(context->rc),
> +                                  grn_rc_to_string(GRN_SUCCESS),
> +                                  context->errfile, context->errline,
> +                                  context->errfunc, context->errbuf));
> +  }
> +}
> diff --git a/test/unit/lib/grn-assertions.h b/test/unit/lib/grn-assertions.h
> index f0f07b8..5691d2c 100644
> --- a/test/unit/lib/grn-assertions.h
> +++ b/test/unit/lib/grn-assertions.h
> @@ -42,6 +42,11 @@
>      grn_test_assert_not_nil_helper((expression), #expression),  \
>      grn_test_assert_not_nil(expression))
>  
> +#define grn_test_assert_context(expression)                     \
> +  cut_trace_with_info_expression(                               \
> +    grn_test_assert_context_helper((expression), #expression),  \
> +    grn_test_assert_context(expression))
> +
>  
>  void     grn_test_assert_helper         (grn_rc       rc,
>                                           const gchar *expression);
> @@ -53,5 +58,7 @@ void     grn_test_assert_nil_helper     (grn_id       id,
>                                           const gchar *expression);
>  void     grn_test_assert_not_nil_helper (grn_id       id,
>                                           const gchar *expression);
> +void     grn_test_assert_context_helper (grn_ctx     *context,
> +                                         const gchar *expression);
>  
>  #endif
> diff --git a/test/unit/lib/grn-test-utils.c b/test/unit/lib/grn-test-utils.c
> index 3f1a953..169965d 100644
> --- a/test/unit/lib/grn-test-utils.c
> +++ b/test/unit/lib/grn-test-utils.c
> @@ -305,6 +305,36 @@ grn_collect_logger_get_messages(grn_logger_info *logger)
>    return context->messages;
>  }
>  
> +gchar *
> +grn_collect_logger_to_string(grn_logger_info *logger)
> +{
> +  GString *string;
> +  const GList *messages;
> +
> +  string = g_string_new(NULL);
> +  for (messages = grn_collect_logger_get_messages(logger);
> +       messages;
> +       messages = g_list_next(messages)) {
> +    const gchar *message = messages->data;
> +    g_string_append_printf(string, "%s\n", message);
> +  }
> +
> +  return g_string_free(string, FALSE);
> +}
> +
> +void
> +grn_collect_logger_print_messages(grn_logger_info *logger)
> +{
> +  const GList *messages;
> +
> +  for (messages = grn_collect_logger_get_messages(logger);
> +       messages;
> +       messages = g_list_next(messages)) {
> +    const gchar *message = messages->data;
> +    g_print("%s\n", message);
> +  }
> +}
> +
>  void
>  grn_collect_logger_free(grn_logger_info *logger)
>  {
> diff --git a/test/unit/lib/grn-test-utils.h b/test/unit/lib/grn-test-utils.h
> index 3d78489..5abd7f6 100644
> --- a/test/unit/lib/grn-test-utils.h
> +++ b/test/unit/lib/grn-test-utils.h
> @@ -41,6 +41,8 @@ const gchar *grn_test_get_base_dir(void);
>  grn_logger_info *grn_collect_logger_new(void);
>  void grn_collect_logger_clear_messages(grn_logger_info *logger);
>  const GList *grn_collect_logger_get_messages(grn_logger_info *logger);
> +gchar *grn_collect_logger_to_string(grn_logger_info *logger);
> +void grn_collect_logger_print_messages(grn_logger_info *logger);
>  void grn_collect_logger_free(grn_logger_info *logger);
>  
>  grn_logger_info *setup_grn_logger(void);
> 
> --
> 須藤 功平 <kou****@clear*****>
> 
> 株式会社クリアコード (http://www.clear-code.com/)
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> 
--
morita




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る