2007-04-15 20:12:09 +00:00
# ifdef LIBREPLACE_CONFIGURE_TEST_STRPTIME
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define true 1
# define false 0
2007-04-15 20:57:48 +00:00
# ifndef __STRING
# define __STRING(x) #x
# endif
2007-04-15 20:12:09 +00:00
/* make printf a no-op */
# define printf if(0) printf
# else /* LIBREPLACE_CONFIGURE_TEST_STRPTIME */
# include "replace.h"
# include "system/time.h"
2011-03-19 15:54:51 +01:00
# include "replace-test.h"
2007-04-15 20:12:09 +00:00
# endif /* LIBREPLACE_CONFIGURE_TEST_STRPTIME */
int libreplace_test_strptime ( void )
{
const char * s = " 20070414101546Z " ;
char * ret ;
struct tm t , t2 ;
2007-04-15 20:57:48 +00:00
memset ( & t , 0 , sizeof ( t ) ) ;
memset ( & t2 , 0 , sizeof ( t2 ) ) ;
2007-04-15 20:12:09 +00:00
printf ( " test: strptime \n " ) ;
ret = strptime ( s , " %Y%m%d%H%M%S " , & t ) ;
if ( ret = = NULL ) {
printf ( " failure: strptime [ \n "
" returned NULL \n "
" ] \n " ) ;
return false ;
}
if ( * ret ! = ' Z ' ) {
printf ( " failure: strptime [ \n "
" ret doesn't point to 'Z' \n "
" ] \n " ) ;
return false ;
}
ret = strptime ( s , " %Y%m%d%H%M%SZ " , & t2 ) ;
if ( ret = = NULL ) {
printf ( " failure: strptime [ \n "
" returned NULL with Z \n "
" ] \n " ) ;
return false ;
}
if ( * ret ! = ' \0 ' ) {
printf ( " failure: strptime [ \n "
" ret doesn't point to ' \\ 0' \n "
" ] \n " ) ;
return false ;
}
2007-04-15 20:57:48 +00:00
# define CMP_TM_ELEMENT(t1,t2,elem) \
if ( t1 . elem ! = t2 . elem ) { \
printf ( " failure: strptime [ \n " \
" result differs if the format string has a 'Z' at the end \n " \
" element: %s %d != %d \n " \
" ] \n " , \
__STRING ( elen ) , t1 . elem , t2 . elem ) ; \
return false ; \
2007-04-15 20:12:09 +00:00
}
2007-04-15 20:57:48 +00:00
CMP_TM_ELEMENT ( t , t2 , tm_sec ) ;
CMP_TM_ELEMENT ( t , t2 , tm_min ) ;
CMP_TM_ELEMENT ( t , t2 , tm_hour ) ;
CMP_TM_ELEMENT ( t , t2 , tm_mday ) ;
CMP_TM_ELEMENT ( t , t2 , tm_mon ) ;
CMP_TM_ELEMENT ( t , t2 , tm_year ) ;
CMP_TM_ELEMENT ( t , t2 , tm_wday ) ;
CMP_TM_ELEMENT ( t , t2 , tm_yday ) ;
CMP_TM_ELEMENT ( t , t2 , tm_isdst ) ;
2007-04-15 20:12:09 +00:00
if ( t . tm_sec ! = 46 ) {
printf ( " failure: strptime [ \n "
" tm_sec: expected: 46, got: %d \n "
" ] \n " ,
t . tm_sec ) ;
return false ;
}
if ( t . tm_min ! = 15 ) {
printf ( " failure: strptime [ \n "
" tm_min: expected: 15, got: %d \n "
" ] \n " ,
t . tm_min ) ;
return false ;
}
if ( t . tm_hour ! = 10 ) {
printf ( " failure: strptime [ \n "
" tm_hour: expected: 10, got: %d \n "
" ] \n " ,
t . tm_hour ) ;
return false ;
}
if ( t . tm_mday ! = 14 ) {
printf ( " failure: strptime [ \n "
" tm_mday: expected: 14, got: %d \n "
" ] \n " ,
t . tm_mday ) ;
return false ;
}
if ( t . tm_mon ! = 3 ) {
printf ( " failure: strptime [ \n "
" tm_mon: expected: 3, got: %d \n "
" ] \n " ,
t . tm_mon ) ;
return false ;
}
if ( t . tm_year ! = 107 ) {
printf ( " failure: strptime [ \n "
" tm_year: expected: 107, got: %d \n "
" ] \n " ,
t . tm_year ) ;
return false ;
}
if ( t . tm_wday ! = 6 ) { /* saturday */
printf ( " failure: strptime [ \n "
" tm_wday: expected: 6, got: %d \n "
" ] \n " ,
t . tm_wday ) ;
return false ;
}
if ( t . tm_yday ! = 103 ) {
printf ( " failure: strptime [ \n "
" tm_yday: expected: 103, got: %d \n "
" ] \n " ,
t . tm_yday ) ;
return false ;
}
/* we don't test this as it depends on the host configuration
if ( t . tm_isdst ! = 0 ) {
printf ( " failure: strptime [ \n "
" tm_isdst: expected: 0, got: %d \n "
" ] \n " ,
t . tm_isdst ) ;
return false ;
} */
printf ( " success: strptime \n " ) ;
return true ;
}
# ifdef LIBREPLACE_CONFIGURE_TEST_STRPTIME
int main ( void )
{
int ret ;
ret = libreplace_test_strptime ( ) ;
if ( ret = = false ) return 1 ;
return 0 ;
}
# endif