/*
* Copyright (c) 2002-2005 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*/
#include "sm/generic.h"
SM_RCSID("@(#)$Id: t-cstr.c,v 1.12 2005/04/27 17:22:08 ca Exp $")
#include "sm/assert.h"
#include "sm/magic.h"
#include "sm/memops.h"
#include "sm/heap.h"
#include "sm/test.h"
#include "sm/cstr.h"
#include <stdio.h>
static void
test_harness(void)
{
sm_cstr_P s, s2, s3, s4;
size_t l, l2;
char *src1 = "magic buf";
char *src2 = "mAgIc strbUf";
l = strlen(src1);
s = sm_cstr_scpyn((const uchar *) src1, l);
SM_TEST(s != NULL);
SM_TEST(sm_cstr_getlen(s) == l);
SM_TEST(sm_memeq(sm_cstr_data(s), src1, l));
s2 = sm_cstr_scpyn((const uchar *) src1, l);
SM_TEST(s2 != NULL);
s3 = SM_CSTR_DUP(s2);
SM_TEST(s3 != NULL);
s4 = sm_cstr_scpyn((const uchar *) src2, strlen(src2));
SM_TEST(s4 != NULL);
SM_TEST(SM_CSTR_EQ(s, s2));
SM_TEST(SM_CSTR_EQ(s, s3));
SM_TEST(SM_CSTR_CASEQ(s, s2));
SM_TEST(SM_CSTR_CASEQ(s, s3));
SM_TEST(!SM_CSTR_EQ(s, s4));
SM_TEST(!SM_CSTR_EQ(s2, s4));
SM_TEST(!SM_CSTR_EQ(s3, s4));
SM_TEST(s2->sm_cstr_refcnt == 2);
SM_CSTR_FREE(s3);
SM_TEST(s2->sm_cstr_refcnt == 1);
SM_TEST(SM_CSTR_EQ(s, s2));
SM_CSTR_FREE(s4);
SM_CSTR_FREE(s2);
SM_CSTR_FREE(s);
l = strlen(src1);
s = sm_cstr_scpyvn0((const uchar *) src1, l, NULL);
SM_TEST(s != NULL);
SM_TEST(sm_cstr_getlen(s) == l);
SM_TEST(sm_memeq(sm_cstr_data(s), src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s), src1, l + 1));
SM_CSTR_FREE(s);
l = strlen(src1);
s = sm_cstr_scpyvn0(
(const uchar *) src1, l,
(const uchar *) src1, l,
NULL);
SM_TEST(s != NULL);
SM_TEST(sm_cstr_getlen(s) == l * 2);
SM_TEST(sm_memeq(sm_cstr_data(s), src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s) + l, src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s) + l, src1, l + 1));
SM_CSTR_FREE(s);
l = strlen(src1);
s = sm_cstr_scpyvn0(
(const uchar *) src1, l,
(const uchar *) src1, l,
(const uchar *) src1, l,
NULL);
SM_TEST(s != NULL);
SM_TEST(sm_cstr_getlen(s) == l * 3);
SM_TEST(sm_memeq(sm_cstr_data(s), src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s) + l, src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s) + l * 2, src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s) + l * 2, src1, l + 1));
SM_CSTR_FREE(s);
l = strlen(src1);
l2 = strlen(src2);
s = sm_cstr_scpyvn0(
(const uchar *) src1, l,
(const uchar *) src2, l2,
NULL);
SM_TEST(s != NULL);
SM_TEST(sm_cstr_getlen(s) == l + l2);
SM_TEST(sm_memeq(sm_cstr_data(s), src1, l));
SM_TEST(sm_memeq(sm_cstr_data(s) + l, src2, l2));
SM_TEST(sm_memeq(sm_cstr_data(s) + l, src2, l2 + 1));
SM_CSTR_FREE(s);
}
int
main(int argc, char *argv[])
{
sm_test_begin(argc, argv, "test cstr");
test_harness();
return sm_test_end();
}
syntax highlighted by Code2HTML, v. 0.9.1