update testing framework with "Check"
This commit is contained in:
parent
6bd6b49c87
commit
fec873b411
7 changed files with 184 additions and 16 deletions
|
@ -19,15 +19,17 @@ include_directories(. "${PROJECT_SOURCE_DIR}/include" ${INCLUDE_DIRECTORIES} /op
|
|||
link_directories(${LINK_DIRECTORIES} /opt/local/lib)
|
||||
find_package(PCRE REQUIRED)
|
||||
find_package(Judy REQUIRED)
|
||||
find_package(Jemalloc REQUIRED)
|
||||
|
||||
set(LIBS ${LIBS} ${PCRE_LIBRARIES} ${Judy_LIBRARIES} r3)
|
||||
set(LIBS ${LIBS} ${PCRE_LIBRARIES} ${Judy_LIBRARIES} ${Jemalloc_LIBRARIES} r3)
|
||||
|
||||
set (CMAKE_CFLAGS "-Wall -pipe -g3 -funroll-loops")
|
||||
# set (CMAKE_CXX_FLAGS "-std=c++0x -arch x86_64 -stdlib=libc++ -g3 -Wall -O0")
|
||||
enable_testing()
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(tests)
|
||||
|
||||
add_test(test_tree ${CMAKE_CURRENT_BINARY_DIR}/test_tree)
|
||||
add_test(test_r3 ${CMAKE_CURRENT_BINARY_DIR}/tests/test_r3)
|
||||
|
||||
add_executable(demo demo.c)
|
||||
|
|
44
cmake_modules/FindJemalloc.cmake
Normal file
44
cmake_modules/FindJemalloc.cmake
Normal file
|
@ -0,0 +1,44 @@
|
|||
# - Try to find jemalloc headers and libraries.
|
||||
#
|
||||
# Usage of this module as follows:
|
||||
#
|
||||
# find_package(JeMalloc)
|
||||
#
|
||||
# Variables used by this module, they can change the default behaviour and need
|
||||
# to be set before calling find_package:
|
||||
#
|
||||
# JEMALLOC_ROOT_DIR Set this variable to the root installation of
|
||||
# jemalloc if the module has problems finding
|
||||
# the proper installation path.
|
||||
#
|
||||
# Variables defined by this module:
|
||||
#
|
||||
# JEMALLOC_FOUND System has jemalloc libs/headers
|
||||
# JEMALLOC_LIBRARIES The jemalloc library/libraries
|
||||
# JEMALLOC_INCLUDE_DIR The location of jemalloc headers
|
||||
|
||||
find_path(JEMALLOC_ROOT_DIR
|
||||
NAMES include/jemalloc/jemalloc.h
|
||||
)
|
||||
|
||||
find_library(JEMALLOC_LIBRARIES
|
||||
NAMES jemalloc
|
||||
HINTS ${JEMALLOC_ROOT_DIR}/lib
|
||||
)
|
||||
|
||||
find_path(JEMALLOC_INCLUDE_DIR
|
||||
NAMES jemalloc/jemalloc.h
|
||||
HINTS ${JEMALLOC_ROOT_DIR}/include
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(JeMalloc DEFAULT_MSG
|
||||
JEMALLOC_LIBRARIES
|
||||
JEMALLOC_INCLUDE_DIR
|
||||
)
|
||||
|
||||
mark_as_advanced(
|
||||
JEMALLOC_ROOT_DIR
|
||||
JEMALLOC_LIBRARIES
|
||||
JEMALLOC_INCLUDE_DIR
|
||||
)
|
|
@ -2,8 +2,10 @@
|
|||
include_directories("${PROJECT_SOURCE_DIR}/include")
|
||||
# install(TARGETS swiftnav-static DESTINATION lib${LIB_SUFFIX})
|
||||
|
||||
set(libr3_SRCS node.c)
|
||||
# add_library(r3 STATIC ${libr3_SRCS})
|
||||
set(libr3_SRCS node.c str.c)
|
||||
set(CMAKE_CFLAGS "-Wall -pipe -g3 -funroll-loops")
|
||||
|
||||
# add_library(r3-static STATIC ${libr3_SRCS})
|
||||
add_library(r3 SHARED ${libr3_SRCS})
|
||||
# target_link_libraries(r3 cblas)
|
||||
# install(FILES ${libswiftnav_HEADERS} DESTINATION include/libswiftnav)
|
||||
|
|
11
src/node.c
11
src/node.c
|
@ -1 +1,12 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
// Jemalloc memory management
|
||||
#include <jemalloc/jemalloc.h>
|
||||
|
||||
// Judy array
|
||||
#include <Judy.h>
|
||||
|
||||
// String value as the index http://judy.sourceforge.net/doc/JudySL_3x.htm
|
||||
|
|
99
src/str.c
Normal file
99
src/str.c
Normal file
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* str.c
|
||||
* Copyright (C) 2014 c9s <c9s@c9smba.local>
|
||||
*
|
||||
* Distributed under terms of the MIT license.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include "str.h"
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to split route path into a string array, not for performance.
|
||||
* hence this function should be safe.
|
||||
*
|
||||
* Split "/path/foo/{id}" into [ "/path" , "/foo" , "/{id}" ]
|
||||
* Split "/path/bar/{id}" into [ "/path" , "/foo" , "/{id}" ]
|
||||
* Split "/blog/post/{id}" into [ "/blog" , "/post" , "/{id}" ]
|
||||
* Split "/blog/{id}" into [ "/blog" , "/{id}" ]
|
||||
* Split "/blog" into [ "/blog" ]
|
||||
* Split "/b" into [ "/b" ]
|
||||
*
|
||||
* @param char* pattern
|
||||
* @param int pattern_len
|
||||
*
|
||||
* @return char**
|
||||
*/
|
||||
char** split_route_pattern(char *pattern, int pattern_len) {
|
||||
|
||||
char *p = pattern;
|
||||
|
||||
while (*p) {
|
||||
// a slug
|
||||
if ( *p == '{' ) {
|
||||
char *s1 = p;
|
||||
char *s2;
|
||||
while (*(p++) != '}') {
|
||||
if ( p - pattern > pattern_len ) {
|
||||
// XXX: unexpected error (unclosed slug)
|
||||
}
|
||||
}
|
||||
s2 = p;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
char** str_split(char* a_str, const char a_delim)
|
||||
{
|
||||
char** result = 0;
|
||||
size_t count = 0;
|
||||
char* tmp = a_str;
|
||||
char* last_comma = 0;
|
||||
char delim[2];
|
||||
delim[0] = a_delim;
|
||||
delim[1] = 0;
|
||||
|
||||
/* Count how many elements will be extracted. */
|
||||
while (*tmp)
|
||||
{
|
||||
if (a_delim == *tmp)
|
||||
{
|
||||
count++;
|
||||
last_comma = tmp;
|
||||
}
|
||||
tmp++;
|
||||
}
|
||||
|
||||
/* Add space for trailing token. */
|
||||
count += last_comma < (a_str + strlen(a_str) - 1);
|
||||
|
||||
/* Add space for terminating null string so caller
|
||||
knows where the list of returned strings ends. */
|
||||
count++;
|
||||
|
||||
result = malloc(sizeof(char*) * count);
|
||||
|
||||
if (result)
|
||||
{
|
||||
size_t idx = 0;
|
||||
char* token = strtok(a_str, delim);
|
||||
|
||||
while (token)
|
||||
{
|
||||
assert(idx < count);
|
||||
*(result + idx++) = strdup(token);
|
||||
token = strtok(0, delim);
|
||||
}
|
||||
assert(idx == count - 1);
|
||||
*(result + idx) = 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
|
@ -11,13 +11,13 @@ else (NOT CHECK_FOUND)
|
|||
|
||||
include_directories(${CHECK_INCLUDE_DIRS})
|
||||
# include_directories("${PROJECT_SOURCE_DIR}/include/r2")
|
||||
add_executable(test_tree test_tree.c)
|
||||
target_link_libraries(test_tree ${TEST_LIBS})
|
||||
add_executable(test_r3 test_tree.c)
|
||||
target_link_libraries(test_r3 ${TEST_LIBS})
|
||||
|
||||
add_custom_command(
|
||||
TARGET test_tree POST_BUILD
|
||||
TARGET test_r3 POST_BUILD
|
||||
COMMENT "Running unit tests"
|
||||
COMMAND test_tree
|
||||
COMMAND test_r3
|
||||
)
|
||||
endif (NOT CHECK_FOUND)
|
||||
|
||||
|
|
|
@ -1,25 +1,35 @@
|
|||
#include <stdio.h>
|
||||
#include <check.h>
|
||||
#include "str.h"
|
||||
#include "node.h"
|
||||
|
||||
START_TEST (test_tree)
|
||||
START_TEST (test_route)
|
||||
{
|
||||
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST (test_route2)
|
||||
{
|
||||
|
||||
}
|
||||
END_TEST
|
||||
|
||||
Suite* r3_suite (void) {
|
||||
Suite *suite = suite_create("blah");
|
||||
|
||||
TCase *tcase = tcase_create("testcase");
|
||||
tcase_add_test(tcase, test_route);
|
||||
tcase_add_test(tcase, test_route2);
|
||||
|
||||
Suite* str_suite (void) {
|
||||
Suite *suite = suite_create("test_tree");
|
||||
/*
|
||||
TCase *tcase = tcase_create("case");
|
||||
tcase_add_test(tcase, test_tree);
|
||||
suite_add_tcase(suite, tcase);
|
||||
*/
|
||||
|
||||
return suite;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
int number_failed;
|
||||
Suite *suite = str_suite();
|
||||
Suite *suite = r3_suite();
|
||||
SRunner *runner = srunner_create(suite);
|
||||
srunner_run_all(runner, CK_NORMAL);
|
||||
number_failed = srunner_ntests_failed(runner);
|
||||
|
|
Loading…
Reference in a new issue