blob: f486b1471e32631e66e34a104d6c498d1de81c93 [file] [log] [blame]
/* $Id$
*
*/
/*
* $Log: /pjproject-0.3/pjlib/src/pjlib-test/string.c $
*
* 2 10/14/05 12:26a Bennylp
* Finished error code framework, some fixes in ioqueue, etc. Pretty
* major.
*
* 1 10/05/05 5:13p Bennylp
* Created.
*
*/
#include <pj/string.h>
#include <pj/pool.h>
#include <pj/log.h>
#include "test.h"
/**
* \page page_pjlib_string_test Test: String
*
* This file provides implementation of \b string_test(). It tests the
* functionality of the string API.
*
* \section sleep_test_sec Scope of the Test
*
* API tested:
* - pj_str()
* - pj_strcmp()
* - pj_strcmp2()
* - pj_stricmp()
* - pj_strlen()
* - pj_strncmp()
* - pj_strnicmp()
* - pj_strchr()
* - pj_strdup()
* - pj_strdup2()
* - pj_strcpy()
* - pj_strcat()
* - pj_strtrim()
* - pj_utoa()
* - pj_strtoul()
* - pj_create_random_string()
*
*
* This file is <b>pjlib-test/string.c</b>
*
* \include pjlib-test/string.c
*/
#if INCLUDE_STRING_TEST
#ifdef _MSC_VER
# pragma warning(disable: 4204)
#endif
#define HELLO_WORLD "Hello World"
#define JUST_HELLO "Hello"
#define UL_VALUE 3456789012UL
int string_test(void)
{
const pj_str_t hello_world = { HELLO_WORLD, strlen(HELLO_WORLD) };
const pj_str_t just_hello = { JUST_HELLO, strlen(JUST_HELLO) };
pj_str_t s1, s2, s3, s4, s5;
enum { RCOUNT = 10, RLEN = 16 };
pj_str_t random[RCOUNT];
pj_pool_t *pool;
int i;
pool = pj_pool_create(mem, NULL, 4096, 0, NULL);
if (!pool) return -5;
/*
* pj_str(), pj_strcmp(), pj_stricmp(), pj_strlen(),
* pj_strncmp(), pj_strchr()
*/
s1 = pj_str(HELLO_WORLD);
if (pj_strcmp(&s1, &hello_world) != 0)
return -10;
if (pj_stricmp(&s1, &hello_world) != 0)
return -20;
if (pj_strcmp(&s1, &just_hello) <= 0)
return -30;
if (pj_stricmp(&s1, &just_hello) <= 0)
return -40;
if (pj_strlen(&s1) != strlen(HELLO_WORLD))
return -50;
if (pj_strncmp(&s1, &hello_world, 5) != 0)
return -60;
if (pj_strnicmp(&s1, &hello_world, 5) != 0)
return -70;
if (pj_strchr(&s1, HELLO_WORLD[1]) != s1.ptr+1)
return -80;
/*
* pj_strdup()
*/
if (!pj_strdup(pool, &s2, &s1))
return -100;
if (pj_strcmp(&s1, &s2) != 0)
return -110;
/*
* pj_strcpy(), pj_strcat()
*/
s3.ptr = pj_pool_alloc(pool, 256);
if (!s3.ptr)
return -200;
pj_strcpy(&s3, &s2);
pj_strcat(&s3, &just_hello);
if (pj_strcmp2(&s3, HELLO_WORLD JUST_HELLO) != 0)
return -210;
/*
* pj_strdup2(), pj_strtrim().
*/
pj_strdup2(pool, &s4, " " HELLO_WORLD "\t ");
pj_strtrim(&s4);
if (pj_strcmp2(&s4, HELLO_WORLD) != 0)
return -250;
/*
* pj_utoa()
*/
s5.ptr = pj_pool_alloc(pool, 16);
if (!s5.ptr)
return -270;
s5.slen = pj_utoa(UL_VALUE, s5.ptr);
/*
* pj_strtoul()
*/
if (pj_strtoul(&s5) != UL_VALUE)
return -280;
/*
* pj_create_random_string()
* Check that no duplicate strings are returned.
*/
for (i=0; i<RCOUNT; ++i) {
int j;
random[i].ptr = pj_pool_alloc(pool, RLEN);
if (!random[i].ptr)
return -320;
random[i].slen = RLEN;
pj_create_random_string(random[i].ptr, RLEN);
for (j=0; j<i; ++j) {
if (pj_strcmp(&random[i], &random[j])==0)
return -330;
}
}
/* Done. */
pj_pool_release(pool);
return 0;
}
#else
/* To prevent warning about "translation unit is empty"
* when this test is disabled.
*/
int dummy_string_test;
#endif /* INCLUDE_STRING_TEST */