added some tests for %d and lengths modifiers l/ll/h/hh

This commit is contained in:
Sylvain PILLOT 2023-02-27 22:18:25 +01:00
parent bebd669065
commit b692ec264e
1 changed files with 156 additions and 11 deletions

View File

@ -7,18 +7,53 @@
#include <fxlibc/printf.h>
#include <string.h>
#include <assert.h>
#include <stdint.h>
// 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();