#include "config.h"
#include "esb.h"
#define TRUE 1
static
int
failcount = 0;
static
void
validate_esb(
int
instance,
struct
esb_s* d,
size_t
explen,
size_t
expalloc,
const
char
*expout,
int
line )
{
if
(esb_string_len(d) != explen) {
++failcount;
printf
(
" FAIL instance %d esb_string_len() %u explen %u line %d\n"
,
instance,(unsigned)esb_string_len(d),(unsigned)explen,line);
}
if
(d->esb_allocated_size != expalloc) {
++failcount;
printf
(
" FAIL instance %d esb_allocated_size %u expalloc %u line %d\n"
,
instance,(unsigned)d->esb_allocated_size,(unsigned)expalloc,line);
}
if
(
strcmp
(esb_get_string(d),expout)) {
++failcount;
printf
(
" FAIL instance %d esb_get_string %s expstr %s line %d\n"
,
instance,esb_get_string(d),expout,line);
}
}
int
main()
{
#ifdef _WIN32
if
(!esb_open_null_device())
{
fprintf
(stderr,
"esb: Unable to open null device.\n"
);
exit
(1);
}
#endif /* _WIN32 */
{
struct
esb_s d5;
char
bufs[4];
esb_int i = -33;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %d bbb"
,(
int
)i);
validate_esb(201,&d5,11,15,
"aaa -33 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %6d bbb"
,(
int
)i);
validate_esb(202,&d5,14,18,
"aaa -33 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %6d bbb"
,6);
validate_esb(203,&d5,14,18,
"aaa 6 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %06d bbb"
,6);
validate_esb(204,&d5,14,18,
"aaa 000006 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %06u bbb"
,6);
validate_esb(205,&d5,14,18,
"aaa 000006 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %6u bbb"
,6);
validate_esb(206,&d5,14,18,
"aaa 6 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %u bbb"
,12);
validate_esb(207,&d5,10,14,
"aaa 12 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %06x bbb"
,12);
validate_esb(208,&d5,14,18,
"aaa 00000c bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %6x bbb"
,12);
validate_esb(209,&d5,14,18,
"aaa c bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %+d bbb"
,12);
validate_esb(210,&d5,11,15,
"aaa +12 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %+6d bbb"
,12);
validate_esb(211,&d5,14,18,
"aaa +12 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf(&d5,
"aaa %6d bbb"
,(
int
)i);
validate_esb(212,&d5,14,18,
"aaa -33 bbb"
,__LINE__);
esb_destructor(&d5);
}
{
struct
esb_s d;
esb_constructor(&d);
esb_append(&d,
"a"
);
validate_esb(1,&d,1,2,
"a"
,__LINE__);
esb_append(&d,
"b"
);
validate_esb(2,&d,2,3,
"ab"
,__LINE__);
esb_append(&d,
"c"
);
validate_esb(3,&d,3,4,
"abc"
,__LINE__);
esb_empty_string(&d);
validate_esb(4,&d,0,4,
""
,__LINE__);
esb_destructor(&d);
}
{
struct
esb_s d;
esb_constructor(&d);
esb_append(&d,
"aa"
);
validate_esb(6,&d,2,3,
"aa"
,__LINE__);
esb_append(&d,
"bbb"
);
validate_esb(7,&d,5,6,
"aabbb"
,__LINE__);
esb_append(&d,
"c"
);
validate_esb(8,&d,6,7,
"aabbbc"
,__LINE__);
esb_empty_string(&d);
validate_esb(9,&d,0,7,
""
,__LINE__);
esb_destructor(&d);
}
{
struct
esb_s d;
static
char
oddarray[7] = {
'a'
,
'b'
,0,
'c'
,
'c'
,
'd'
,0};
esb_constructor(&d);
esb_appendn(&d,oddarray,6);
validate_esb(10,&d,23,24,
"ESBERR_appendn bad call"
,__LINE__);
esb_appendn(&d,
"cc"
,1);
validate_esb(11,&d,24,25,
"ESBERR_appendn bad callc"
,__LINE__);
esb_empty_string(&d);
validate_esb(12,&d,0,25,
""
,__LINE__);
esb_destructor(&d);
}
{
struct
esb_s d;
esb_constructor(&d);
esb_force_allocation(&d,7);
esb_append(&d,
"aaaa i"
);
validate_esb(13,&d,6,7,
"aaaa i"
,__LINE__);
esb_destructor(&d);
}
{
struct
esb_s d5;
const
char
* s =
"insert me %d"
;
esb_constructor(&d5);
esb_force_allocation(&d5,50);
esb_append(&d5,
"aaa "
);
esb_append_printf(&d5,s,1);
esb_append(&d5,
"zzz"
);
validate_esb(14,&d5,18,50,
"aaa insert me 1zzz"
,__LINE__);
esb_destructor(&d5);
}
{
struct
esb_s d;
struct
esb_s e;
char
* result = NULL;
esb_constructor(&d);
esb_constructor(&e);
esb_append(&d,
"abcde fghij klmno pqrst"
);
validate_esb(15,&d,23,24,
"abcde fghij klmno pqrst"
,__LINE__);
result = esb_get_copy(&d);
esb_append(&e,result);
validate_esb(16,&e,23,24,
"abcde fghij klmno pqrst"
,__LINE__);
esb_destructor(&d);
esb_destructor(&e);
}
{
struct
esb_s d5;
char
bufs[4];
char
bufl[60];
const
char
* s =
"insert me %d"
;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append(&d5,
"aaa "
);
esb_append_printf(&d5,s,1);
esb_append(&d5,
"zzz"
);
validate_esb(17,&d5,18,19,
"aaa insert me 1zzz"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufl,
sizeof
(bufl));
esb_append(&d5,
"aaa "
);
esb_append_printf(&d5,s,1);
esb_append(&d5,
"zzz"
);
validate_esb(18,&d5,18,60,
"aaa insert me 1zzz"
,__LINE__);
esb_destructor(&d5);
}
{
struct
esb_s d5;
char
bufs[4];
const
char
* s =
"insert me"
;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_s(&d5,
"aaa %s bbb"
,s);
validate_esb(19,&d5,17,18,
"aaa insert me bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_s(&d5,
"aaa %12s bbb"
,s);
validate_esb(20,&d5,20,21,
"aaa insert me bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_s(&d5,
"aaa %-12s bbb"
,s);
validate_esb(21,&d5,20,21,
"aaa insert me bbb"
,__LINE__);
esb_destructor(&d5);
}
{
struct
esb_s d5;
char
bufs[4];
esb_int i = -33;
esb_unsigned u = 0;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %d bbb"
,i);
validate_esb(18,&d5,11,12,
"aaa -33 bbb"
,__LINE__);
esb_destructor(&d5);
i = -2;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %4d bbb"
,i);
validate_esb(19,&d5,12,13,
"aaa -2 bbb"
,__LINE__);
esb_destructor(&d5);
i = -2;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %4d bbb"
,i);
validate_esb(20,&d5,12,13,
"aaa -2 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %6d bbb"
,i);
validate_esb(21,&d5,14,15,
"aaa -2 bbb"
,__LINE__);
esb_destructor(&d5);
i = -2;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %04d bbb"
,i);
validate_esb(22,&d5,12,13,
"aaa -002 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %06d bbb"
,i);
validate_esb(23,&d5,14,15,
"aaa -00002 bbb"
,__LINE__);
esb_destructor(&d5);
i = -200011;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %04d bbb"
,i);
validate_esb(24,&d5,15,16,
"aaa -200011 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %06d bbb"
,i);
validate_esb(25,&d5,15,16,
"aaa -200011 bbb"
,__LINE__);
esb_destructor(&d5);
u = 0x80000000;
u = 0x8000000000000000;
i = u;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %4d bbb"
,i);
validate_esb(26,&d5,28,29,
"aaa -9223372036854775808 bbb"
,__LINE__);
esb_destructor(&d5);
i = 987665432;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %4d bbb"
,i);
validate_esb(27,&d5,17,18,
"aaa 987665432 bbb"
,__LINE__);
esb_destructor(&d5);
}
{
struct
esb_s d5;
char
bufs[4];
esb_unsigned u = 0;
u = 37;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_u(&d5,
"aaa %u bbb"
,u);
validate_esb(28,&d5,10,11,
"aaa 37 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_u(&d5,
"aaa %4u bbb"
,u);
validate_esb(29,&d5,12,13,
"aaa 37 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_u(&d5,
"aaa %4u bbb"
,u);
validate_esb(30,&d5,12,13,
"aaa 37 bbb"
,__LINE__);
esb_destructor(&d5);
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_u(&d5,
"aaa %6u bbb"
,u);
validate_esb(31,&d5,14,15,
"aaa 37 bbb"
,__LINE__);
esb_destructor(&d5);
}
{
struct
esb_s d5;
char
bufs[4];
esb_int i = -33;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %+d bbb"
,i);
validate_esb(18,&d5,11,12,
"aaa -33 bbb"
,__LINE__);
esb_destructor(&d5);
i = 33;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %+d bbb"
,i);
validate_esb(18,&d5,11,12,
"aaa +33 bbb"
,__LINE__);
esb_destructor(&d5);
i = -2;
esb_constructor_fixed(&d5,bufs,
sizeof
(bufs));
esb_append_printf_i(&d5,
"aaa %+4d bbb"
,i);
validate_esb(19,&d5,12,13,
"aaa -2 bbb"
,__LINE__);
esb_destructor(&d5);
}
#ifdef _WIN32
esb_close_null_device();
#endif /* _WIN32 */
if
(failcount) {
printf
(
"FAIL esb test\n"
);
exit
(1);
}
printf
(
"PASS esb test\n"
);
exit
(0);
}