commit
afd2c486c6
11 changed files with 111 additions and 184 deletions
|
@ -7,10 +7,12 @@ apt-get install -qq \
|
||||||
build-essential \
|
build-essential \
|
||||||
check \
|
check \
|
||||||
clang \
|
clang \
|
||||||
|
cmake \
|
||||||
graphviz-dev \
|
graphviz-dev \
|
||||||
libjemalloc-dev \
|
libjemalloc-dev \
|
||||||
libpcre3-dev \
|
libpcre3-dev \
|
||||||
libtool \
|
libtool \
|
||||||
|
ninja-build \
|
||||||
pkg-config
|
pkg-config
|
||||||
|
|
||||||
if [ x$COVERALLS == xyes ]; then
|
if [ x$COVERALLS == xyes ]; then
|
||||||
|
|
8
.travis-ci/script-cmake.sh
Executable file
8
.travis-ci/script-cmake.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -ev
|
||||||
|
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake -GNinja ..
|
||||||
|
ninja -v
|
||||||
|
ctest
|
14
.travis.yml
14
.travis.yml
|
@ -11,6 +11,7 @@ matrix:
|
||||||
include:
|
include:
|
||||||
- compiler: gcc
|
- compiler: gcc
|
||||||
env:
|
env:
|
||||||
|
- TYPE=autotools
|
||||||
- CONFIGURE_OPTION='--enable-debug --enable-gcov --with-malloc=jemalloc'
|
- CONFIGURE_OPTION='--enable-debug --enable-gcov --with-malloc=jemalloc'
|
||||||
- COVERALLS=yes
|
- COVERALLS=yes
|
||||||
- VALGRIND=no
|
- VALGRIND=no
|
||||||
|
@ -19,6 +20,7 @@ matrix:
|
||||||
- CXX=g++
|
- CXX=g++
|
||||||
- compiler: gcc
|
- compiler: gcc
|
||||||
env:
|
env:
|
||||||
|
- TYPE=autotools
|
||||||
- CONFIGURE_OPTION='--enable-debug --enable-gcov'
|
- CONFIGURE_OPTION='--enable-debug --enable-gcov'
|
||||||
- COVERALLS=yes
|
- COVERALLS=yes
|
||||||
- VALGRIND=yes
|
- VALGRIND=yes
|
||||||
|
@ -27,12 +29,22 @@ matrix:
|
||||||
- CXX=g++
|
- CXX=g++
|
||||||
- compiler: clang
|
- compiler: clang
|
||||||
env:
|
env:
|
||||||
|
- TYPE=autotools
|
||||||
- CONFIGURE_OPTION='--enable-debug --enable-gcov'
|
- CONFIGURE_OPTION='--enable-debug --enable-gcov'
|
||||||
- COVERALLS=yes
|
- COVERALLS=yes
|
||||||
- VALGRIND=yes
|
- VALGRIND=yes
|
||||||
- DEBUG=yes
|
- DEBUG=yes
|
||||||
- CC=clang
|
- CC=clang
|
||||||
- CXX=clang++
|
- CXX=clang++
|
||||||
|
- compiler: gcc
|
||||||
|
env:
|
||||||
|
- TYPE=cmake
|
||||||
|
- CONFIGURE_OPTION='--enable-debug --enable-gcov'
|
||||||
|
- COVERALLS=yes
|
||||||
|
- VALGRIND=yes
|
||||||
|
- DEBUG=yes
|
||||||
|
- CC=gcc
|
||||||
|
- CXX=g++
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- docker run -d
|
- docker run -d
|
||||||
|
@ -52,7 +64,7 @@ install:
|
||||||
- docker exec -t build bash -c "cd /travis && .travis-ci/install.sh"
|
- docker exec -t build bash -c "cd /travis && .travis-ci/install.sh"
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- docker exec -t build bash -c "cd /travis && .travis-ci/script.sh"
|
- docker exec -t build bash -c "cd /travis && .travis-ci/script-$TYPE.sh"
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- docker exec -t build bash -c "cd /travis && .travis-ci/after_success.sh"
|
- docker exec -t build bash -c "cd /travis && .travis-ci/after_success.sh"
|
||||||
|
|
6
3rdparty/CMakeLists.txt
vendored
6
3rdparty/CMakeLists.txt
vendored
|
@ -1,6 +0,0 @@
|
||||||
include_directories("${PROJECT_SOURCE_DIR}/3rdparty ${PROJECT_SOURCE_DIR}")
|
|
||||||
set(lib3rdparty_SRCS zmalloc.c)
|
|
||||||
add_library(lib3rdparty STATIC ${lib3rdparty_SRCS})
|
|
||||||
# add_library(r3 SHARED ${libr3_SRCS})
|
|
||||||
# target_link_libraries(r3 cblas)
|
|
||||||
# install(FILES ${libswiftnav_HEADERS} DESTINATION include/libswiftnav)
|
|
|
@ -1,62 +1,45 @@
|
||||||
# cmake file examples
|
|
||||||
# https://code.google.com/p/opencv-feature-tracker/source/browse/CMakeLists.txt?r=f804b03e704147e65183c19a50f57abedb22f45c
|
|
||||||
|
|
||||||
|
|
||||||
# TODO:
|
|
||||||
# cmake clean... orz
|
|
||||||
# http://stackoverflow.com/questions/9680420/looking-for-a-cmake-clean-command-to-clear-up-cmake-output
|
|
||||||
|
|
||||||
# load required modules
|
|
||||||
include(CheckIncludeFile)
|
|
||||||
include(CheckSymbolExists)
|
|
||||||
include(CheckTypeSize)
|
|
||||||
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(r3 VERSION 2.0.0)
|
project(r3 VERSION 2.0.0)
|
||||||
|
|
||||||
SET(CMAKE_MODULE_PATH
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
|
||||||
${PROJECT_SOURCE_DIR}/cmake/Modules
|
set(CMAKE_C_STANDARD 99)
|
||||||
${CMAKE_MODULE_PATH}
|
|
||||||
)
|
|
||||||
|
|
||||||
# check for availability of certain headers
|
|
||||||
CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
|
|
||||||
CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
|
|
||||||
CHECK_INCLUDE_FILE(jemalloc/jemalloc.h HAVE_JEMALLOC_JEMALLOC_H)
|
|
||||||
CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
|
|
||||||
CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
|
|
||||||
CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
|
|
||||||
CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
|
|
||||||
CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
|
|
||||||
CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
|
|
||||||
CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
|
|
||||||
CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
|
|
||||||
|
|
||||||
# check availability of certain system functions
|
|
||||||
CHECK_SYMBOL_EXISTS("gettimeofday" "sys/time.h" HAVE_GETTIMEOFDAY)
|
|
||||||
CHECK_SYMBOL_EXISTS("memset" "string.h" HAVE_MEMSET)
|
|
||||||
CHECK_SYMBOL_EXISTS("strchr" "string.h" HAVE_STRCHR)
|
|
||||||
CHECK_SYMBOL_EXISTS("strdup" "string.h" HAVE_STRDUP)
|
|
||||||
CHECK_SYMBOL_EXISTS("strndup" "string.h" HAVE_STRNDUP)
|
|
||||||
CHECK_SYMBOL_EXISTS("strnstr" "string.h" HAVE_STRNSTR)
|
|
||||||
CHECK_SYMBOL_EXISTS("strstr" "string.h" HAVE_STRSTR)
|
|
||||||
|
|
||||||
# check availability of certain types
|
|
||||||
CHECK_TYPE_SIZE(_Bool _BOOL)
|
|
||||||
|
|
||||||
# generate the configuration file
|
|
||||||
configure_file("${PROJECT_SOURCE_DIR}/config.h.cmake" "${PROJECT_BINARY_DIR}/config.h")
|
|
||||||
|
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/3rdparty ${PROJECT_BINARY_DIR})
|
|
||||||
|
|
||||||
|
find_package(Check)
|
||||||
find_package(PCRE REQUIRED)
|
find_package(PCRE REQUIRED)
|
||||||
|
|
||||||
set(LIBS ${PCRE_LIBRARIES} r3 lib3rdparty)
|
include(CheckSymbolExists)
|
||||||
|
check_symbol_exists(strdup string.h HAVE_STRDUP)
|
||||||
|
check_symbol_exists(strndup string.h HAVE_STRNDUP)
|
||||||
|
configure_file(config.h.cmake config.h)
|
||||||
|
|
||||||
enable_testing()
|
|
||||||
|
|
||||||
add_subdirectory(3rdparty)
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
|
include/memory.h
|
||||||
|
include/r3.h
|
||||||
|
include/r3_list.h
|
||||||
|
include/r3_slug.h
|
||||||
|
include/r3_gvc.h
|
||||||
|
include/r3_json.h
|
||||||
|
include/str_array.h
|
||||||
|
include/r3.hpp
|
||||||
|
DESTINATION include)
|
||||||
|
|
||||||
|
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
set(exec_prefix ${prefix})
|
||||||
|
set(includedir ${prefix}/include)
|
||||||
|
set(libdir ${prefix}/lib)
|
||||||
|
set(PACKAGE_VERSION ${PROJECT_VERSION})
|
||||||
|
configure_file(r3.pc.in r3.pc @ONLY)
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
|
${PROJECT_BINARY_DIR}/r3.pc
|
||||||
|
DESTINATION lib/pkgconfig)
|
||||||
|
|
||||||
|
if(CHECK_FOUND)
|
||||||
|
enable_testing()
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
# add_test(test_tree ${CMAKE_CURRENT_BINARY_DIR}/check_tree)
|
else()
|
||||||
|
message(STATUS "Skipping unit tests, Check library not found!")
|
||||||
|
endif()
|
||||||
|
|
|
@ -1,91 +1,2 @@
|
||||||
#cmakedefine HAVE_DLFCN_H @HAVE_STDLIB_H@
|
|
||||||
#cmakedefine HAVE_GETTIMEOFDAY @HAVE_GETTIMEOFDAY@
|
|
||||||
#cmakedefine HAVE_INTTYPES_H @HAVE_INTTYPES_H@
|
|
||||||
#cmakedefine HAVE_JEMALLOC_JEMALLOC_H @HAVE_JEMALLOC_JEMALLOC_H@
|
|
||||||
#cmakedefine HAVE_MEMORY_H @HAVE_MEMORY_H@
|
|
||||||
#cmakedefine HAVE_MEMSET @HAVE_MEMSET@
|
|
||||||
#cmakedefine HAVE_STDBOOL_H @HAVE_STDBOOL_H@
|
|
||||||
#cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@
|
|
||||||
#cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@
|
|
||||||
#cmakedefine HAVE_STRCHR @HAVE_STRCHR@
|
|
||||||
#cmakedefine HAVE_STRDUP @HAVE_STRDUP@
|
#cmakedefine HAVE_STRDUP @HAVE_STRDUP@
|
||||||
#cmakedefine HAVE_STRINGS_H @HAVE_STRINGS_H@
|
|
||||||
#cmakedefine HAVE_STRING_H @HAVE_STRING_H@
|
|
||||||
#cmakedefine HAVE_STRNDUP @HAVE_STRNDUP@
|
#cmakedefine HAVE_STRNDUP @HAVE_STRNDUP@
|
||||||
#cmakedefine HAVE_STRSTR @HAVE_STRSTR@
|
|
||||||
#cmakedefine HAVE_SYS_STAT_H @HAVE_SYS_STAT_H@
|
|
||||||
#cmakedefine HAVE_SYS_TIME_H @HAVE_SYS_TIME_H@
|
|
||||||
#cmakedefine HAVE_SYS_TYPES_H @HAVE_SYS_TYPES_H@
|
|
||||||
#cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@
|
|
||||||
#cmakedefine HAVE__BOOL @HAVE__BOOL@
|
|
||||||
|
|
||||||
/* Name of package */
|
|
||||||
#define PACKAGE "@PROJECT_NAME@"
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#define PACKAGE_BUGREPORT ""
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#define PACKAGE_NAME "@PROJECT_NAME@"
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#define PACKAGE_STRING "@PROJECT_NAME@ @PROJECT_VERSION@"
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#define PACKAGE_TARNAME "@PROJECT_NAME@"
|
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#define PACKAGE_URL ""
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#define PACKAGE_VERSION "@PROJECT_VERSION@"
|
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
|
||||||
#define STDC_HEADERS 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the PATH_MAX macro. */
|
|
||||||
/* #undef USE_JEMALLOC */
|
|
||||||
|
|
||||||
/* Enable extensions on AIX 3, Interix. */
|
|
||||||
#ifndef _ALL_SOURCE
|
|
||||||
# define _ALL_SOURCE 1
|
|
||||||
#endif
|
|
||||||
/* Enable GNU extensions on systems that have them. */
|
|
||||||
#ifndef _GNU_SOURCE
|
|
||||||
# define _GNU_SOURCE 1
|
|
||||||
#endif
|
|
||||||
/* Enable threading extensions on Solaris. */
|
|
||||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
# define _POSIX_PTHREAD_SEMANTICS 1
|
|
||||||
#endif
|
|
||||||
/* Enable extensions on HP NonStop. */
|
|
||||||
#ifndef _TANDEM_SOURCE
|
|
||||||
# define _TANDEM_SOURCE 1
|
|
||||||
#endif
|
|
||||||
/* Enable general extensions on Solaris. */
|
|
||||||
#ifndef __EXTENSIONS__
|
|
||||||
# define __EXTENSIONS__ 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#define VERSION "@PROJECT_VERSION@"
|
|
||||||
|
|
||||||
/* Define to 1 if on MINIX. */
|
|
||||||
/* #undef _MINIX */
|
|
||||||
|
|
||||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
|
||||||
this defined. */
|
|
||||||
/* #undef _POSIX_1_SOURCE */
|
|
||||||
|
|
||||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
||||||
/* #undef _POSIX_SOURCE */
|
|
||||||
|
|
||||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
|
||||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
|
||||||
#ifndef __cplusplus
|
|
||||||
/* #undef inline */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
|
||||||
/* #undef size_t */
|
|
||||||
|
|
|
@ -1,8 +1,27 @@
|
||||||
include_directories("${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/3rdparty ${PROJECT_SOURCE_DIR}")
|
add_library(r3 STATIC
|
||||||
set(SOURCES node.c edge.c str.c token.c match_entry.c slug.c memory.c)
|
${PROJECT_SOURCE_DIR}/3rdparty/zmalloc.c
|
||||||
set(LIBS ${LIBS} ${PCRE_LIBRARIES})
|
edge.c
|
||||||
|
match_entry.c
|
||||||
|
memory.c
|
||||||
|
node.c
|
||||||
|
slug.c
|
||||||
|
str.c
|
||||||
|
token.c)
|
||||||
|
|
||||||
add_library(r3 STATIC ${SOURCES})
|
target_compile_definitions(r3
|
||||||
|
PRIVATE
|
||||||
|
_GNU_SOURCE)
|
||||||
|
|
||||||
install(TARGETS r3 DESTINATION lib)
|
target_include_directories(r3
|
||||||
# install(FILES ${libswiftnav_HEADERS} DESTINATION include/libswiftnav)
|
PUBLIC
|
||||||
|
${PROJECT_BINARY_DIR}
|
||||||
|
${PROJECT_SOURCE_DIR}/3rdparty
|
||||||
|
${PROJECT_SOURCE_DIR}/include)
|
||||||
|
|
||||||
|
target_link_libraries(r3
|
||||||
|
PUBLIC
|
||||||
|
${PCRE_LIBRARIES})
|
||||||
|
|
||||||
|
install(
|
||||||
|
TARGETS r3
|
||||||
|
DESTINATION lib)
|
||||||
|
|
|
@ -21,9 +21,8 @@ void str_array_free(str_array *l) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool str_array_append(str_array * l, const char * token, unsigned int len) {
|
bool str_array_append(str_array * l, const char * token, unsigned int len) {
|
||||||
R3_VECTOR(r3_iovec_t) *tks = &l->tokens;
|
r3_vector_reserve(NULL, &l->tokens, l->tokens.size + 1);
|
||||||
r3_vector_reserve(NULL, tks, tks->size + 1);
|
r3_iovec_t *temp = l->tokens.entries + l->tokens.size++;
|
||||||
r3_iovec_t *temp = tks->entries + tks->size++;
|
|
||||||
memset(temp, 0, sizeof(*temp));
|
memset(temp, 0, sizeof(*temp));
|
||||||
temp->base = token;
|
temp->base = token;
|
||||||
temp->len = len;
|
temp->len = len;
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
# set(TEST_LIBS ${TEST_LIBS} ${CHECK_LIBRARIES} judy libr3)
|
function(add_r3_test NAME)
|
||||||
include_directories("${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}")
|
add_executable(${NAME} ${ARGN})
|
||||||
find_package(Check REQUIRED)
|
|
||||||
find_package(PCRE REQUIRED)
|
|
||||||
# find_package(Judy REQUIRED)
|
|
||||||
|
|
||||||
if (NOT CHECK_FOUND)
|
target_include_directories(${NAME}
|
||||||
message(STATUS "Skipping unit tests, Check library not found!")
|
PRIVATE
|
||||||
else (NOT CHECK_FOUND)
|
${CHECK_INCLUDE_DIRS}
|
||||||
set(TEST_LIBS ${LIBS} ${CHECK_LIBRARIES} ${PCRE_LIBRARIES} r3)
|
${PROJECT_BINARY_DIR}
|
||||||
|
${PROJECT_SOURCE_DIR}/src)
|
||||||
|
|
||||||
include_directories(${CHECK_INCLUDE_DIRS})
|
target_link_libraries(${NAME}
|
||||||
# include_directories("${PROJECT_SOURCE_DIR}/include/r2")
|
${CHECK_LDFLAGS}
|
||||||
add_executable(check_tree check_tree.c)
|
r3)
|
||||||
target_link_libraries(check_tree ${TEST_LIBS} ${CHECK_LDFLAGS_OTHER})
|
|
||||||
|
|
||||||
add_custom_command(
|
add_test(NAME ${NAME} COMMAND ${NAME})
|
||||||
TARGET check_tree POST_BUILD
|
endfunction()
|
||||||
COMMENT "Running unit tests"
|
|
||||||
COMMAND check_tree
|
|
||||||
)
|
|
||||||
endif (NOT CHECK_FOUND)
|
|
||||||
|
|
||||||
|
add_r3_test(check_tree check_tree.c)
|
||||||
|
add_r3_test(check_slug check_slug.c)
|
||||||
|
add_r3_test(check_routes check_routes.c)
|
||||||
|
add_r3_test(check_str_array check_str_array.c)
|
||||||
|
|
||||||
|
add_executable(bench bench.c)
|
||||||
|
target_link_libraries(bench r3)
|
||||||
|
|
|
@ -55,7 +55,7 @@ START_TEST (test_r3_slug_find_pattern)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
char *test_str = "{name:\\s+}";
|
char *test_str = "{name:\\s+}";
|
||||||
char * namerex = r3_slug_find_pattern(test_str, strlen(test_str), &len);
|
const char * namerex = r3_slug_find_pattern(test_str, strlen(test_str), &len);
|
||||||
ck_assert( strncmp(namerex, "\\s+", len) == 0 );
|
ck_assert( strncmp(namerex, "\\s+", len) == 0 );
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
@ -64,7 +64,7 @@ START_TEST (test_r3_slug_find_name)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
char *test_str = "{name:\\s+}";
|
char *test_str = "{name:\\s+}";
|
||||||
char * namerex = r3_slug_find_name(test_str, strlen(test_str), &len);
|
const char * namerex = r3_slug_find_name(test_str, strlen(test_str), &len);
|
||||||
ck_assert( strncmp(namerex, "name", len) == 0 );
|
ck_assert( strncmp(namerex, "name", len) == 0 );
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
@ -73,7 +73,7 @@ START_TEST (test_r3_slug_find_name_without_pattern)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
char *test_str = "{name}";
|
char *test_str = "{name}";
|
||||||
char * namerex = r3_slug_find_name(test_str, strlen(test_str), &len);
|
const char * namerex = r3_slug_find_name(test_str, strlen(test_str), &len);
|
||||||
ck_assert( strncmp(namerex, "name", len) == 0 );
|
ck_assert( strncmp(namerex, "name", len) == 0 );
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
@ -82,7 +82,7 @@ START_TEST (test_r3_slug_find_name_with_multiple_slug)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
char *test_str = "{name}/{name2}";
|
char *test_str = "{name}/{name2}";
|
||||||
char * namerex = r3_slug_find_name(test_str, strlen(test_str), &len);
|
const char * namerex = r3_slug_find_name(test_str, strlen(test_str), &len);
|
||||||
ck_assert( strncmp(namerex, "name", len) == 0 );
|
ck_assert( strncmp(namerex, "name", len) == 0 );
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
@ -90,7 +90,7 @@ END_TEST
|
||||||
START_TEST (test_r3_slug_find_placeholder)
|
START_TEST (test_r3_slug_find_placeholder)
|
||||||
{
|
{
|
||||||
int slug_len = 0;
|
int slug_len = 0;
|
||||||
char * slug;
|
const char * slug;
|
||||||
char *test_str = "/user/{name:\\s+}/to/{id}";
|
char *test_str = "/user/{name:\\s+}/to/{id}";
|
||||||
slug = r3_slug_find_placeholder(test_str, strlen(test_str), &slug_len);
|
slug = r3_slug_find_placeholder(test_str, strlen(test_str), &slug_len);
|
||||||
ck_assert( strncmp(slug, "{name:\\s+}", slug_len) == 0 );
|
ck_assert( strncmp(slug, "{name:\\s+}", slug_len) == 0 );
|
||||||
|
@ -193,7 +193,7 @@ START_TEST (test_r3_slug_find_placeholder_with_broken_slug)
|
||||||
{
|
{
|
||||||
int slug_len = 0;
|
int slug_len = 0;
|
||||||
char *sl_test = "/user/{name:\\s+/to/{id";
|
char *sl_test = "/user/{name:\\s+/to/{id";
|
||||||
char * slug = r3_slug_find_placeholder(sl_test, strlen(sl_test), &slug_len);
|
const char * slug = r3_slug_find_placeholder(sl_test, strlen(sl_test), &slug_len);
|
||||||
ck_assert(slug == 0);
|
ck_assert(slug == 0);
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
Loading…
Reference in a new issue