added some tests for %d and lengths modifiers l/ll/h/hh
This commit is contained in:
parent
bebd669065
commit
b692ec264e
167
src/main.c
167
src/main.c
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue