299 CxTestingAllocator talloc; |
299 CxTestingAllocator talloc; |
300 cx_testing_allocator_init(&talloc); |
300 cx_testing_allocator_init(&talloc); |
301 CxAllocator *alloc = &talloc.base; |
301 CxAllocator *alloc = &talloc.base; |
302 CX_TEST_DO { |
302 CX_TEST_DO { |
303 char *oldbuf = buf; |
303 char *oldbuf = buf; |
304 size_t len = cx_sprintf_a(alloc, &buf, 16, "Test %d %s", 47, "string"); |
304 size_t buflen = 16; |
|
305 size_t len = cx_sprintf_a(alloc, &buf, &buflen, "Test %d %s", 47, "string"); |
305 CX_TEST_ASSERT(oldbuf == buf); |
306 CX_TEST_ASSERT(oldbuf == buf); |
306 CX_TEST_ASSERT(len == 14); |
307 CX_TEST_ASSERT(len == 14); |
|
308 CX_TEST_ASSERT(buflen == 16); |
307 CX_TEST_ASSERT(0 == memcmp(buf, "Test 47 string", 15)); |
309 CX_TEST_ASSERT(0 == memcmp(buf, "Test 47 string", 15)); |
308 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
310 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
309 } |
311 } |
310 cx_testing_allocator_destroy(&talloc); |
312 cx_testing_allocator_destroy(&talloc); |
311 free(buf); |
313 free(buf); |
315 CxTestingAllocator talloc; |
317 CxTestingAllocator talloc; |
316 cx_testing_allocator_init(&talloc); |
318 cx_testing_allocator_init(&talloc); |
317 CxAllocator *alloc = &talloc.base; |
319 CxAllocator *alloc = &talloc.base; |
318 char *buf = cxMalloc(alloc, 8); |
320 char *buf = cxMalloc(alloc, 8); |
319 CX_TEST_DO { |
321 CX_TEST_DO { |
320 size_t len = cx_sprintf_a(alloc, &buf, 8, "Test %d %s", 47, "foobar"); |
322 size_t buflen = 8; |
|
323 size_t len = cx_sprintf_a(alloc, &buf, &buflen, "Test %d %s", 47, "foobar"); |
321 CX_TEST_ASSERT(len == 14); |
324 CX_TEST_ASSERT(len == 14); |
|
325 CX_TEST_ASSERT(buflen == 15); |
322 CX_TEST_ASSERT(0 == memcmp(buf, "Test 47 foobar", 15)); |
326 CX_TEST_ASSERT(0 == memcmp(buf, "Test 47 foobar", 15)); |
323 cxFree(alloc, buf); |
327 cxFree(alloc, buf); |
324 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
328 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
325 } |
329 } |
326 cx_testing_allocator_destroy(&talloc); |
330 cx_testing_allocator_destroy(&talloc); |
331 cx_testing_allocator_init(&talloc); |
335 cx_testing_allocator_init(&talloc); |
332 CxAllocator *alloc = &talloc.base; |
336 CxAllocator *alloc = &talloc.base; |
333 // make it so that only the zero-terminator does not fit |
337 // make it so that only the zero-terminator does not fit |
334 char *buf = cxMalloc(alloc, 14); |
338 char *buf = cxMalloc(alloc, 14); |
335 CX_TEST_DO { |
339 CX_TEST_DO { |
336 size_t len = cx_sprintf_a(alloc, &buf, 14, "Test %d %s", 13, "string"); |
340 size_t buflen = 14; |
|
341 size_t len = cx_sprintf_a(alloc, &buf, &buflen, "Test %d %s", 13, "string"); |
337 CX_TEST_ASSERT(len == 14); |
342 CX_TEST_ASSERT(len == 14); |
|
343 CX_TEST_ASSERT(buflen == 15); |
338 CX_TEST_ASSERT(0 == memcmp(buf, "Test 13 string", 15)); |
344 CX_TEST_ASSERT(0 == memcmp(buf, "Test 13 string", 15)); |
339 cxFree(alloc, buf); |
345 cxFree(alloc, buf); |
340 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
346 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
341 } |
347 } |
342 cx_testing_allocator_destroy(&talloc); |
348 cx_testing_allocator_destroy(&talloc); |
347 CxTestingAllocator talloc; |
353 CxTestingAllocator talloc; |
348 cx_testing_allocator_init(&talloc); |
354 cx_testing_allocator_init(&talloc); |
349 CxAllocator *alloc = &talloc.base; |
355 CxAllocator *alloc = &talloc.base; |
350 CX_TEST_DO { |
356 CX_TEST_DO { |
351 char *str; |
357 char *str; |
352 size_t len = cx_sprintf_sa(alloc, buf, 16, &str, "Test %d %s", 47, "string"); |
358 size_t buflen = 16; |
|
359 size_t len = cx_sprintf_sa(alloc, buf, &buflen, &str, "Test %d %s", 47, "string"); |
353 CX_TEST_ASSERT(str == buf); |
360 CX_TEST_ASSERT(str == buf); |
|
361 CX_TEST_ASSERT(buflen == 16); |
354 CX_TEST_ASSERT(len == 14); |
362 CX_TEST_ASSERT(len == 14); |
355 CX_TEST_ASSERT(0 == memcmp(buf, "Test 47 string", 15)); |
363 CX_TEST_ASSERT(0 == memcmp(buf, "Test 47 string", 15)); |
356 CX_TEST_ASSERT(0 == memcmp(str, "Test 47 string", 15)); |
364 CX_TEST_ASSERT(0 == memcmp(str, "Test 47 string", 15)); |
357 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
365 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
358 } |
366 } |
365 CxTestingAllocator talloc; |
373 CxTestingAllocator talloc; |
366 cx_testing_allocator_init(&talloc); |
374 cx_testing_allocator_init(&talloc); |
367 CxAllocator *alloc = &talloc.base; |
375 CxAllocator *alloc = &talloc.base; |
368 CX_TEST_DO { |
376 CX_TEST_DO { |
369 char *str; |
377 char *str; |
370 size_t len = cx_sprintf_sa(alloc, buf, 16, &str, "Hello %d %s", 4711, "larger string"); |
378 size_t buflen = 16; |
|
379 size_t len = cx_sprintf_sa(alloc, buf, &buflen, &str, "Hello %d %s", 4711, "larger string"); |
371 CX_TEST_ASSERT(str != buf); |
380 CX_TEST_ASSERT(str != buf); |
|
381 CX_TEST_ASSERT(buflen == 25); |
372 CX_TEST_ASSERT(len == 24); |
382 CX_TEST_ASSERT(len == 24); |
373 CX_TEST_ASSERT(0 == memcmp(str, "Hello 4711 larger string", 25)); |
383 CX_TEST_ASSERT(0 == memcmp(str, "Hello 4711 larger string", 25)); |
374 cxFree(alloc, str); |
384 cxFree(alloc, str); |
375 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
385 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
376 } |
386 } |
383 CxTestingAllocator talloc; |
393 CxTestingAllocator talloc; |
384 cx_testing_allocator_init(&talloc); |
394 cx_testing_allocator_init(&talloc); |
385 CxAllocator *alloc = &talloc.base; |
395 CxAllocator *alloc = &talloc.base; |
386 CX_TEST_DO { |
396 CX_TEST_DO { |
387 char *str; |
397 char *str; |
388 size_t len = cx_sprintf_sa(alloc, buf, 16, &str, "Hello %d %s", 112, "string"); |
398 size_t buflen = 16; |
|
399 size_t len = cx_sprintf_sa(alloc, buf,&buflen, &str, "Hello %d %s", 112, "string"); |
389 CX_TEST_ASSERT(str != buf); |
400 CX_TEST_ASSERT(str != buf); |
390 CX_TEST_ASSERT(len == 16); |
401 CX_TEST_ASSERT(len == 16); |
|
402 CX_TEST_ASSERT(buflen == 17); |
391 CX_TEST_ASSERT(0 == memcmp(str, "Hello 112 string", 17)); // include terminator |
403 CX_TEST_ASSERT(0 == memcmp(str, "Hello 112 string", 17)); // include terminator |
392 cxFree(alloc, str); |
404 cxFree(alloc, str); |
393 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
405 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
394 } |
406 } |
395 cx_testing_allocator_destroy(&talloc); |
407 cx_testing_allocator_destroy(&talloc); |