strtest.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 759 行 · 第 1/2 页
C
759 行
/****
***** Test strchr(), strrchr(), strlen()
****/
void TestSearch( void )
{
char buf[] = "The quick brown fox jumped over the lazy dogs.";
char *ptr;
ptr = strchr( buf, '!' ); /* try to find a '!' */
VERIFY( ptr == NULL );
ptr = strchr( buf, 0x00 ); /* try to find the NULL */
VERIFY( ptr == buf+strlen(buf) );
ptr = strchr( buf, 'k' ); /* try to find a 'k' */
VERIFY( ptr == buf+8 );
ptr = strrchr( buf, '!' ); /* try to find a '!' */
VERIFY( ptr == NULL );
ptr = strrchr( buf, 0x00 ); /* try to find the NULL */
VERIFY( ptr == buf+strlen(buf) );
ptr = strrchr( buf, 'k' ); /* try to find a 'k' */
VERIFY( ptr == buf+8 );
}
#ifdef __X86__
void TestSearchF( void )
{
char buf[] = "The quick brown fox jumped over the lazy dogs.";
char __far *ptr;
ptr = _fstrchr( buf, '!' ); /* try to find a '!' */
VERIFY( ptr == NULL );
ptr = _fstrchr( buf, 0x00 ); /* try to find the NULL */
VERIFY( ptr == buf+strlen(buf) );
ptr = _fstrchr( buf, 'k' ); /* try to find a 'k' */
VERIFY( ptr == buf+8 );
ptr = _fstrrchr( buf, '!' ); /* try to find a '!' */
VERIFY( ptr == NULL );
ptr = _fstrrchr( buf, 0x00 ); /* try to find the NULL */
VERIFY( ptr == buf+strlen(buf) );
ptr = _fstrrchr( buf, 'k' ); /* try to find a 'k' */
VERIFY( ptr == buf+8 );
}
#endif
/****
***** Test strcspn(), strpbrk(), strspn(), and strstr().
****/
void TestSubstring( void )
{
char buf[] = "The quick brown fox jumped over the lazy dogs.";
int status;
char *ptr;
status = strcspn( "abcdefghij", "bca" ); /* should be zero chars */
VERIFY( status == 0 );
status = strcspn( "123456", "cab" ); /* should be whole string */
VERIFY( status == 6 );
status = strcspn( "!x,y:zfoo", "t.7of" ); /* should be 6 chars */
VERIFY( status == 6 );
ptr = strpbrk( "aBcDeFgHiJ", "1234567" ); /* should be NULL */
VERIFY( ptr == NULL );
ptr = strpbrk( "Foo", "" ); /* should be NULL */
VERIFY( ptr == NULL );
ptr = strpbrk( buf, "t!q-"); /* find the 'q' */
VERIFY( ptr == buf+4 );
status = strspn( buf, "!1@2#3$4%5^6&7" ); /* should be zero */
VERIFY( status == 0 );
status = strspn( buf, "kciuq ehT" ); /* should be 10 */
VERIFY( status == 10);
ptr = strstr( buf, "foo" ); /* should be NULL */
VERIFY( ptr == NULL );
ptr = strstr( buf, "ck br" ); /* find "ck br" */
VERIFY( ptr == buf+7 );
}
#ifdef __X86__
void TestSubstringF( void )
{
char buf[] = "The quick brown fox jumped over the lazy dogs.";
int status;
char __far *ptr;
status = _fstrcspn( "abcdefghij", "bca" ); /* should be zero chars */
VERIFY( status == 0 );
status = _fstrcspn( "123456", "cab" ); /* should be whole string */
VERIFY( status == 6 );
status = _fstrcspn( "!x,y:zfoo", "t.7of" ); /* should be 6 chars */
VERIFY( status == 6 );
ptr = _fstrpbrk( "aBcDeFgHiJ", "1234567" ); /* should be NULL */
VERIFY( ptr == NULL );
ptr = _fstrpbrk( "Foo", "" ); /* should be NULL */
VERIFY( ptr == NULL );
ptr = _fstrpbrk( buf, "t!q-"); /* find the 'q' */
VERIFY( ptr == buf+4 );
status = _fstrspn( buf, "!1@2#3$4%5^6&7" ); /* should be zero */
VERIFY( status == 0 );
status = _fstrspn( buf, "kciuq ehT" ); /* should be 10 */
VERIFY( status == 10);
ptr = _fstrstr( buf, "foo" ); /* should be NULL */
VERIFY( ptr == NULL );
ptr = _fstrstr( buf, "ck br" ); /* find "ck br" */
VERIFY( ptr == buf+7 );
}
#endif
/****
***** Test strtok().
****/
void TestToken( void )
{
char buf[] = "Find!all;the.tokens,";
char *ptr;
ptr = strtok( buf, " ;.,!" ); /* find a token */
VERIFY( !strcmp(ptr,"Find") );
ptr = strtok( NULL, " ;.,!" ); /* find a token */
VERIFY( !strcmp(ptr,"all") );
ptr = strtok( NULL, " ;.,!" ); /* find a token */
VERIFY( !strcmp(ptr,"the") );
ptr = strtok( NULL, " ;.,!" ); /* find a token */
VERIFY( !strcmp(ptr,"tokens") );
ptr = strtok( NULL, " '.,!" ); /* try to find another */
VERIFY( ptr == NULL );
}
#ifdef __X86__
void TestTokenF( void )
{
char buf[] = "Find!all;the.tokens,";
char __far *ptr;
ptr = _fstrtok( buf, " ;.,!" ); /* find a token */
VERIFY( !_fstrcmp(ptr,"Find") );
ptr = _fstrtok( NULL, " ;.,!" ); /* find a token */
VERIFY( !_fstrcmp(ptr,"all") );
ptr = _fstrtok( NULL, " ;.,!" ); /* find a token */
VERIFY( !_fstrcmp(ptr,"the") );
ptr = _fstrtok( NULL, " ;.,!" ); /* find a token */
VERIFY( !_fstrcmp(ptr,"tokens") );
ptr = _fstrtok( NULL, " '.,!" ); /* try to find another */
VERIFY( ptr == NULL );
}
#endif
/****
***** Test strcoll() and strxfrm().
****/
void TestLocale( void )
{
char bufA[80] = "FoO baR gOoBeR bLaH";
char bufB[80];
int status;
setlocale( LC_ALL, "C" ); /* set locale to "C" */
status = strxfrm( bufB, bufA, 20 ); /* transform the string */
VERIFY( status == 19 );
status = strcoll( bufB, bufA ); /* compare with "C" locale */
VERIFY( status == 0 );
status = strcoll( bufB, "Bar" ); /* compare with "C" locale */
VERIFY( status != 0 );
}
/****
***** Test strerror().
****/
void TestError( void )
{
char *error = NULL;
error = strerror( EBADF ); /* get an error string */
VERIFY( strlen(error) != 0 );
}
/****
***** Test _bprintf(), sprintf(), sscanf(), _vbprintf(), vsprintf(), and
***** vsscanf().
****/
void TestFormatted( void )
{
char buf[80];
int status, len;
int numA, numB;
status = _bprintf( buf, 3, "%d", 12345 ); /* try to print too much */
VERIFY( status <= 3 );
status = _bprintf( buf, 80, "%d", 12345 ); /* print a string */
VERIFY( status == 5 );
VERIFY( !strcmp(buf,"12345") );
status = sprintf( buf, " %d %d", 191, 67 ); /* print a string */
VERIFY( status == 7 );
status = sscanf( buf, "%d %d", &numA, &numB ); /* parse string */
VERIFY( status == 2 );
VERIFY( numA == 191 );
VERIFY( numB == 67 );
Test__vbprintf( buf, "%d %d", 101, 37 );
status = Test_vsscanf( buf, "%d %d", &numA, &numB );
VERIFY( status == 2 );
VERIFY( numA == 101 );
VERIFY( numB == 37 );
Test_vsprintf( buf, "%d %d", 101, 37 );
status = Test_vsscanf( buf, "%d %d", &numA, &numB );
VERIFY( status == 2 );
VERIFY( numA == 101 );
VERIFY( numB == 37 );
len = Test_vsnprintf( buf, "%d %d", 101, 37 ); /* try to print too much */
status = Test_vsscanf( buf, "%d", &numA );
VERIFY( status == 1 );
VERIFY( numA == 101 );
/* make sure that we get back the same length for zero size buffer */
VERIFY( len == snprintf( NULL, 0, "%d %d", 101, 37 ) );
}
void Test__vbprintf( char *buf, char *format, ... )
{
va_list args;
int status;
va_start( args, format );
status = _vbprintf( buf, 80, format, args ); /* print some stuff */
VERIFY( status <= 80 );
va_end( args );
}
int Test_vsnprintf( char *buf, char *format, ... )
{
va_list args;
int len;
va_start( args, format );
memset( buf, 0, 10 );
len = vsnprintf( buf, 4, format, args ); /* print some stuff */
VERIFY( len > 4 );
VERIFY( buf[4] == '\0' ); /* ensure we're not overflowing the buffer */
VERIFY( buf[5] == '\0' );
va_end( args );
return len;
}
int Test_vsscanf( char *buf, char *format, ... )
{
va_list args;
int status;
va_start( args, format );
status = vsscanf( buf, format, args );
va_end( args );
return( status );
}
void Test_vsprintf( char *buf, char *format, ... )
{
va_list args;
int status;
va_start( args, format );
status = vsprintf( buf, format, args ); /* print some stuff */
VERIFY( status > 0 );
va_end( args );
}
/****
***** Program entry point.
****/
int main( int argc, char *argv[] )
{
#ifdef __SW_BW
FILE *my_stdout;
my_stdout = freopen( "tmp.log", "a", stdout );
if( my_stdout == NULL ) {
fprintf( stderr, "Unable to redirect stdout\n" );
exit( -1 );
}
#endif
/*** Initialize ***/
strcpy( ProgramName, strlwr( argv[0] ) ); /* store filename */
/*** Test various functions ***/
TestCompare(); /* compare stuff */
TestMove(); /* moving data about */
TestCase(); /* upper/lowercase stuff */
TestSearch(); /* searching stuff */
TestSubstring(); /* substring stuff */
TestToken(); /* tokenizing stuff */
TestLocale(); /* locale stuff */
TestError(); /* error string stuff */
TestFormatted(); /* formatted I/O stuff */
TestBounded(); /* bounded string stuff */
#ifdef __X86__
TestCompareF();
TestMoveF();
TestCaseF();
TestSearchF();
TestSubstringF();
TestTokenF();
#endif
/*** Print a pass/fail message and quit ***/
if( NumErrors != 0 ) {
printf( "%s: FAILURE (%d errors).\n", ProgramName, NumErrors );
return( EXIT_FAILURE );
}
printf( "Tests completed (%s).\n", strlwr( argv[0] ) );
#ifdef __SW_BW
fprintf( stderr, "Tests completed (%s).\n", strlwr( argv[0] ) );
fclose( my_stdout );
_dwShutDown();
#endif
return( 0 );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?