#include "cx/test.h"
#include "cx/streams.h"
#include "cx/buffer.h"
CX_TEST(test_stream_bncopy) {
CxBuffer source, target;
char sbuf[
32], tbuf[
32];
memset(tbuf,
0,
32);
cxBufferInit(&source, sbuf,
32,
NULL,
0);
cxBufferInit(&target, tbuf,
32,
NULL,
0);
cxBufferPutString(&source,
"This is a stream copy test.");
cxBufferSeek(&source,
0,
SEEK_SET);
char tmp[
4];
CX_TEST_DO {
size_t result = cx_stream_bncopy(&source, &target,
cxBufferReadFunc,
cxBufferWriteFunc,
tmp,
4,
0);
CX_TEST_ASSERT(result ==
0);
CX_TEST_ASSERT(target.size ==
0);
result = cx_stream_bncopy(&source, &target,
cxBufferReadFunc,
cxBufferWriteFunc,
tmp,
4,
20);
CX_TEST_ASSERT(result ==
20);
CX_TEST_ASSERT(target.size ==
20);
CX_TEST_ASSERT(strcmp(
"This is a stream cop\0", tbuf) ==
0);
result = cx_stream_bcopy(&source, &target,
cxBufferReadFunc,
cxBufferWriteFunc,
NULL,
16);
CX_TEST_ASSERT(result ==
7);
CX_TEST_ASSERT(target.size ==
27);
CX_TEST_ASSERT(strcmp(
"This is a stream copy test.\0", tbuf) ==
0);
}
cxBufferDestroy(&source);
cxBufferDestroy(&target);
}
CX_TEST(test_stream_ncopy) {
CxBuffer source, target;
char sbuf[
32], tbuf[
32];
memset(tbuf,
0,
32);
cxBufferInit(&source, sbuf,
32,
NULL,
0);
cxBufferInit(&target, tbuf,
32,
NULL,
0);
cxBufferPutString(&source,
"This is a stream copy test.");
cxBufferSeek(&source,
0,
SEEK_SET);
CX_TEST_DO {
size_t result = cx_stream_ncopy(&source, &target,
cxBufferReadFunc,
cxBufferWriteFunc,
20);
CX_TEST_ASSERT(result ==
20);
CX_TEST_ASSERT(target.size ==
20);
CX_TEST_ASSERT(strcmp(
"This is a stream cop\0", tbuf) ==
0);
result = cx_stream_copy(&source, &target,
cxBufferReadFunc,
cxBufferWriteFunc);
CX_TEST_ASSERT(result ==
7);
CX_TEST_ASSERT(target.size ==
27);
CX_TEST_ASSERT(strcmp(
"This is a stream copy test.\0", tbuf) ==
0);
}
cxBufferDestroy(&source);
cxBufferDestroy(&target);
}
CxTestSuite *cx_test_suite_streams(
void) {
CxTestSuite *suite = cx_test_suite_new(
"streams");
cx_test_register(suite, test_stream_bncopy);
cx_test_register(suite, test_stream_ncopy);
return suite;
}