From 98436072020f41869ee09a39ebc0a98f2468035f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 6 Sep 2012 16:51:56 -0700 Subject: [PATCH] Add test for guac_pool. --- libguac/tests/Makefile.am | 15 +++-- libguac/tests/test_libguac.c | 2 + libguac/tests/util/guac_pool.c | 105 ++++++++++++++++++++++++++++++++ libguac/tests/util/util_suite.c | 71 +++++++++++++++++++++ libguac/tests/util/util_suite.h | 46 ++++++++++++++ 5 files changed, 233 insertions(+), 6 deletions(-) create mode 100644 libguac/tests/util/guac_pool.c create mode 100644 libguac/tests/util/util_suite.c create mode 100644 libguac/tests/util/util_suite.h diff --git a/libguac/tests/Makefile.am b/libguac/tests/Makefile.am index 435258d3..8a4d0254 100644 --- a/libguac/tests/Makefile.am +++ b/libguac/tests/Makefile.am @@ -41,18 +41,21 @@ AM_CFLAGS = -Werror -Wall -pedantic -I../include TESTS = test_libguac check_PROGRAMS = test_libguac -noinst_HEADERS = \ - protocol/suite.h \ - client/client_suite.h +noinst_HEADERS = \ + client/client_suite.h \ + protocol/suite.h \ + util/util_suite.h test_libguac_SOURCES = \ test_libguac.c \ + client/client_suite.c \ + client/buffer_pool.c \ + client/layer_pool.c \ protocol/suite.c \ protocol/instruction_read.c \ protocol/instruction_write.c \ - client/client_suite.c \ - client/buffer_pool.c \ - client/layer_pool.c + util/util_suite.c \ + util/guac_pool.c test_libguac_LDADD = $(top_builddir)/src/libguac.la @CUNIT_LIBS@ diff --git a/libguac/tests/test_libguac.c b/libguac/tests/test_libguac.c index 6549d73b..8648b9e9 100644 --- a/libguac/tests/test_libguac.c +++ b/libguac/tests/test_libguac.c @@ -39,6 +39,7 @@ #include "protocol/suite.h" #include "client/client_suite.h" +#include "util/util_suite.h" int main() { @@ -49,6 +50,7 @@ int main() { /* Register suites */ register_protocol_suite(); register_client_suite(); + register_util_suite(); /* Run tests */ CU_basic_set_mode(CU_BRM_VERBOSE); diff --git a/libguac/tests/util/guac_pool.c b/libguac/tests/util/guac_pool.c new file mode 100644 index 00000000..77783ac7 --- /dev/null +++ b/libguac/tests/util/guac_pool.c @@ -0,0 +1,105 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include "pool.h" +#include "util_suite.h" + +#define UNSEEN 0 +#define SEEN_PHASE_1 1 +#define SEEN_PHASE_2 2 + +#define POOL_SIZE 128 + +void test_guac_pool() { + + guac_pool* pool; + + int i; + int seen[POOL_SIZE] = {0}; + int value; + + /* Get pool */ + pool = guac_pool_alloc(POOL_SIZE); + CU_ASSERT_PTR_NOT_NULL_FATAL(pool); + + /* Fill pool */ + for (i=0; i= 0); + CU_ASSERT(value < POOL_SIZE); + + /* This should be an integer we have not seen yet */ + CU_ASSERT_EQUAL(UNSEEN, seen[value]); + seen[value] = SEEN_PHASE_1; + + /* Return value to pool */ + guac_pool_free_int(pool, value); + + } + + /* Now that pool is filled, we should get ONLY previously seen integers */ + for (i=0; i= 0); + CU_ASSERT(value < POOL_SIZE); + + /* This should be an integer we have seen already */ + CU_ASSERT_EQUAL(SEEN_PHASE_1, seen[value]); + seen[value] = SEEN_PHASE_2; + + } + + /* Pool is filled to minimum now. Next value should be size + 1. */ + value = guac_pool_next_int(pool); + + CU_ASSERT_EQUAL(POOL_SIZE+1, value); + + /* Free pool */ + guac_pool_free(pool); + +} + diff --git a/libguac/tests/util/util_suite.c b/libguac/tests/util/util_suite.c new file mode 100644 index 00000000..394f1dd3 --- /dev/null +++ b/libguac/tests/util/util_suite.c @@ -0,0 +1,71 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include "util_suite.h" + +int util_suite_init() { + return 0; +} + +int util_suite_cleanup() { + return 0; +} + +int register_util_suite() { + + /* Add util test suite */ + CU_pSuite suite = CU_add_suite("util", + util_suite_init, util_suite_cleanup); + if (suite == NULL) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* Add tests */ + if ( + CU_add_test(suite, "guac-pool", test_guac_pool) == NULL + ) { + CU_cleanup_registry(); + return CU_get_error(); + } + + return 0; + +} + diff --git a/libguac/tests/util/util_suite.h b/libguac/tests/util/util_suite.h new file mode 100644 index 00000000..ae7f3912 --- /dev/null +++ b/libguac/tests/util/util_suite.h @@ -0,0 +1,46 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_TEST_UTIL_SUITE_H +#define _GUAC_TEST_UTIL_SUITE_H + +int register_util_suite(); + +void test_guac_pool(); + +#endif +