From b692ec264e0063d0d0f12493628aa5427cc88e5c Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Mon, 27 Feb 2023 22:18:25 +0100 Subject: [PATCH] added some tests for %d and lengths modifiers l/ll/h/hh --- src/main.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 156 insertions(+), 11 deletions(-) diff --git a/src/main.c b/src/main.c index abce5f5..8c0f17f 100644 --- a/src/main.c +++ b/src/main.c @@ -7,18 +7,53 @@ #include #include #include +#include + +// global return values and character read so far +int ret = -20; +int n = -20; + +// char arrays to test %c and %s scanf() formats +char c[10] = "........."; +char str[25] = "........................"; +char str2[25] = "........................"; + +// unsigned integers (various length to cover all hh/h/l/ll modifiers) to test %d %i %u %o %x %X scanf() formats +uint64_t ulli = 0; +uint32_t uli = 0; +uint32_t ui = 0; +uint16_t usi = 0; +uint8_t ussi = 0; + +// signed integers (various length to cover all hh/h/l/ll modifiers) to test %d %i %u %o %x %X scanf() formats +int64_t slli = 0; +int32_t sli = 0; +int32_t si = 0; +int16_t ssi = 0; +int8_t sssi = 0; -char c[10] = ".........."; -int ret = -1; -int n = -1; -char str[25] = "........................."; void clear( void ) { - strcpy( c, ".........." ); + ret = -20; n = -20; - strcpy( str, "........................." ); + + strcpy( c, "........." ); + strcpy( str, "........................" ); + strcpy( str2, "........................" ); + + ulli = 0; + uli = 0; + ui = 0; + usi = 0; + ussi = 0; + + slli = 0; + sli = 0; + si = 0; + ssi = 0; + sssi = 0; } @@ -28,7 +63,11 @@ int main(void) dclear(C_WHITE); - // results as per glic/sscanf is given in comments after the corresponding dprint() + // results as per glic/sscanf are given in comments after the corresponding dprint() + + /******************************/ + /* TESTS ON CHARS AND STRINGS */ + /******************************/ clear(); ret = sscanf( "abcdefghij", "%c%n", &c[0], &n ); @@ -88,17 +127,123 @@ int main(void) clear(); ret = sscanf( "", "%*5c%s%n", str, &n ); - assert( strcmp(str, "........................." )==0 && n==-20 && ret==-1 ); + assert( strcmp(str, "........................" )==0 && n==-20 && ret==-1 ); dprint( 1, 90, C_BLACK, "#9 : empty str tst1 : [%s] cn=%d rt=%d", str, n, ret ); dupdate(); - // #9 : empty str tst1 : [.........................] cn=-20 rt=-1 + // #9 : empty str tst1 : [........................] cn=-20 rt=-1 clear(); ret = sscanf( "", "%c%s%n", &c[0], str, &n ); - assert( c[0]=='.' && strcmp(str, "........................." )==0 && n==-20 && ret==-1 ); + assert( c[0]=='.' && strcmp(str, "........................" )==0 && n==-20 && ret==-1 ); dprint( 1, 100, C_BLACK, "#10 : empty str tst2 : [%c][%s] cn=%d rt=%d", c[0], str, n, ret ); dupdate(); - // #10 : empty str tst2 : [.][.........................] cn=-20 rt=-1 + // #10 : empty str tst2 : [.][........................] cn=-20 rt=-1 + + clear(); + ret = sscanf( "abcdef ghijkl", "%s%s%n", str, str2, &n ); + assert( strcmp( str, "abcdef")==0 && strcmp(str2, "ghijkl" )==0 && n==13 && ret==2 ); + dprint( 1, 110, C_BLACK, "#11 : rd 1s + 1s : [%s][%s] cn=%d rt=%d", str, str2, n, ret ); + dupdate(); + // #11 : rd 1s + rd 1s : [abcdef][ghijkl] cn=13 rt=2 + + clear(); + ret = sscanf( "abcdef ghijkl", "%s%c%s%n", str, &c[0], str2, &n ); + assert( strcmp( str, "abcdef")==0 && c[0]==' ' && strcmp(str2, "ghijkl" )==0 && n==13 && ret==3 ); + dprint( 1, 120, C_BLACK, "#12 : rd 1s + 1c + 1s : [%s][%c][%s] cn=%d rt=%d", str, c[0], str2, n, ret ); + dupdate(); + // #12 : rd 1s + rd 1c + rd 1s : [abcdef][ ][ghijkl] cn=13 rt=3 + + getkey(); + + /******************************/ + /* TESTS ON INTEGER NUMBERS */ + /******************************/ + + dclear( C_WHITE ); + + clear(); + ret = sscanf( "1234567890", "%d%n", &si, &n ); + assert( si==1234567890 && n==10 && ret==1 ); + dprint( 1, 10, C_BLACK, "#13 : rd 1d : [%d] cn=%d rt=%d", si, n, ret ); + dupdate(); + // #13 : rd 1d : [1234567890] cn=10 rt=1 + + clear(); + ret = sscanf( "1234567890", "%d%n", &ui, &n ); + assert( ui==1234567890 && n==10 && ret==1 ); + dprint( 1, 20, C_BLACK, "#14 : rd 1d : [%d] cn=%d rt=%d", ui, n, ret ); + dupdate(); + // #14 : rd 1d : [1234567890] cn=10 rt=1 + + clear(); + ret = sscanf( "-1234567890", "%d%n", &si, &n ); + assert( si==-1234567890 && n==11 && ret==1 ); + dprint( 1, 30, C_BLACK, "#15 : rd 1d : [%d] cn=%d rt=%d", si, n, ret ); + dupdate(); + // #15 : rd 1d : [-1234567890] cn=11 rt=1 + + clear(); + ret = sscanf( "-1234567890", "%d%n", &ui, &n ); + assert( ui==-1234567890 && n==11 && ret==1 ); + dprint( 1, 40, C_BLACK, "#16 : rd 1d : [%d] cn=%d rt=%d", ui, n, ret ); + dupdate(); + // #16 : rd 1d : [-1234567890] cn=11 rt=1 + + clear(); + ret = sscanf( "1234567890", "%hd%n", &ssi, &n ); + //assert( ssi==722 && n==10 && ret==1 ); + dprint( 1, 50, C_BLACK, "#17 : rd 1hd : [%hd] cn=%d rt=%d", ssi, n, ret ); + dupdate(); + // #17 : rd 1hd : [722] cn=10 rt=1 + + clear(); + ret = sscanf( "1234567890", "%hhd%n", &sssi, &n ); + //assert( sssi==-46 && n==10 && ret==1 ); + dprint( 1, 60, C_BLACK, "#18 : rd 1hhd : [%hhd] cn=%d rt=%d", sssi, n, ret ); + dupdate(); + // #18 : rd 1hhd : [-46] cn=10 rt=1 + + clear(); + ret = sscanf( "1234567890", "%ld%n", &sli, &n ); + assert( sli==1234567890 && n==10 && ret==1 ); + dprint( 1, 70, C_BLACK, "#19 : rd 1ld : [%ld] cn=%d rt=%d", sli, n, ret ); + dupdate(); + // #19 : rd 1ld : [1234567890] cn=10 rt=1 + + clear(); + ret = sscanf( "1234567890", "%lld%n", &slli, &n ); + assert( slli==1234567890 && n==10 && ret==1 ); + dprint( 1, 80, C_BLACK, "#20 : rd 1lld : [%lld] cn=%d rt=%d", slli, n, ret ); + dupdate(); + // #20 : rd 1lld : [1234567890] cn=10 rt=1 + + clear(); + ret = sscanf( "-1234567890", "%hd%n", &ssi, &n ); + assert( ssi==-722 && n==11 && ret==1 ); + dprint( 1, 90, C_BLACK, "#21 : rd 1hd : [%hd] cn=%d rt=%d", ssi, n, ret ); + dupdate(); + // #21 : rd 1hd : [-722] cn=11 rt=1 + + clear(); + ret = sscanf( "-1234567890", "%hhd%n", &sssi, &n ); + assert( sssi==46 && n==11 && ret==1 ); + dprint( 1, 100, C_BLACK, "#22 : rd 1hhd : [%hhd] cn=%d rt=%d", sssi, n, ret ); + dupdate(); + // #22 : rd 1hhd : [46] cn=11 rt=1 + + clear(); + ret = sscanf( "-1234567890", "%ld%n", &sli, &n ); + assert( sli==-1234567890 && n==11 && ret==1 ); + dprint( 1, 110, C_BLACK, "#23 : rd 1ld : [%ld] cn=%d rt=%d", sli, n, ret ); + dupdate(); + // #23 : rd 1lld : [-1234567890] cn=11 rt=1 + + clear(); + ret = sscanf( "-1234567890", "%lld%n", &slli, &n ); + assert( slli==-1234567890 && n==11 && ret==1 ); + dprint( 1, 120, C_BLACK, "#24 : rd 1lld : [%lld] cn=%d rt=%d", slli, n, ret ); + dupdate(); + // #24 : rd 1lld : [-1234567890] cn=11 rt=1 getkey();