null+****@clear*****
null+****@clear*****
2012年 3月 27日 (火) 17:53:34 JST
Susumu Yata 2012-03-27 17:53:34 +0900 (Tue, 27 Mar 2012)
New Revision: a96bcb65b9ab4528e46e2f5579e3cfc2506cbb52
Log:
Add tests of grn_tiny_array.
Added files:
test/unit/core/test-tiny-array.c
Modified files:
test/unit/core/Makefile.am
Modified: test/unit/core/Makefile.am (+1 -0)
===================================================================
--- test/unit/core/Makefile.am 2012-03-27 15:47:39 +0900 (3ce79cf)
+++ test/unit/core/Makefile.am 2012-03-27 17:53:34 +0900 (a219280)
@@ -4,6 +4,7 @@ SUBDIRS = \
if WITH_CUTTER
noinst_LTLIBRARIES = \
test-context.la \
+ test-tiny-array.la \
test-hash.la \
test-hash-sort.la \
test-hash-cursor.la \
Added: test/unit/core/test-tiny-array.c (+131 -0) 100644
===================================================================
--- /dev/null
+++ test/unit/core/test-tiny-array.c 2012-03-27 17:53:34 +0900 (6fd0ab5)
@@ -0,0 +1,131 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2012 Brazil Inc.
+
+ 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 <gcutter.h>
+#include <glib/gstdio.h>
+
+#include "../lib/grn-assertions.h"
+
+#include <string.h>
+
+#include <hash.h>
+
+static grn_ctx ctx;
+
+void
+cut_setup(void)
+{
+ grn_ctx_init(&ctx, 0);
+}
+
+void
+cut_teardown(void)
+{
+ grn_ctx_fin(&ctx);
+}
+
+void
+test_basic_operations(uint16_t element_size, uint16_t flags)
+{
+ grn_id id;
+ grn_tiny_array array;
+ grn_tiny_array_init(&ctx, &array, element_size, flags);
+ cut_assert_null(grn_tiny_array_at(&array, 0));
+ for (id = 1; id < (1 << 8); id++) {
+ void * const ptr = grn_tiny_array_at(&array, id);
+ cut_assert_not_null(ptr);
+ memset(ptr, (unsigned char)id, element_size);
+ }
+ for (id = 1; id < (1 << 8); id++) {
+ uint16_t byte_id;
+ const unsigned char expected_byte = (unsigned char)id;
+ const unsigned char * const ptr =
+ (const unsigned char *)grn_tiny_array_at(&array, id);
+ for (byte_id = 0; byte_id < element_size; byte_id++) {
+ cut_assert_equal_int(expected_byte, ptr[byte_id]);
+ }
+ }
+ grn_tiny_array_fin(&array);
+}
+
+void
+test_at(void)
+{
+ uint16_t element_size;
+ for (element_size = 1; element_size < 16; element_size++) {
+ test_basic_operations(element_size, 0);
+ }
+}
+
+void
+test_id(void)
+{
+ grn_id id;
+ grn_tiny_array array;
+ grn_tiny_array_init(&ctx, &array, sizeof(int), GRN_TINY_ARRAY_CLEAR);
+ grn_test_assert_equal_id(&ctx, (grn_id)0, grn_tiny_array_id(&array, NULL));
+ for (id = 1; id < (1 << 10); id++) {
+ const void * const ptr = grn_tiny_array_at(&array, id);
+ cut_assert_not_null(ptr);
+ grn_test_assert_equal_id(&ctx, (grn_id)id, grn_tiny_array_id(&array, ptr));
+ }
+ grn_tiny_array_fin(&array);
+}
+
+void
+test_clear(void)
+{
+ grn_id id;
+ grn_tiny_array array;
+ grn_tiny_array_init(&ctx, &array, sizeof(int), GRN_TINY_ARRAY_CLEAR);
+ for (id = 1; id < (1 << 10); id++) {
+ const int expected_value = 0;
+ const int * const value_ptr = (const int *)grn_tiny_array_at(&array, id);
+ cut_assert_not_null(value_ptr);
+ cut_assert_equal_memory(&expected_value, sizeof(expected_value),
+ value_ptr, sizeof(int));
+ }
+ grn_tiny_array_fin(&array);
+
+ {
+ uint16_t element_size;
+ for (element_size = 1; element_size < 16; element_size++) {
+ test_basic_operations(element_size, GRN_TINY_ARRAY_CLEAR);
+ }
+ }
+}
+
+void
+test_threadsafe(void)
+{
+ /* TODO: A multi-threaded test should be done. */
+
+ uint16_t element_size;
+ for (element_size = 1; element_size < 16; element_size++) {
+ test_basic_operations(element_size, GRN_TINY_ARRAY_THREADSAFE);
+ }
+}
+
+void
+test_use_malloc(void)
+{
+ uint16_t element_size;
+ for (element_size = 1; element_size < 16; element_size++) {
+ test_basic_operations(element_size, GRN_TINY_ARRAY_USE_MALLOC);
+ }
+}