int main( void )
{
- TESTCASE( puts( "SUCCESS testing puts()" ) >= 0 );
+ FILE * fh;
+ char const * message = "SUCCESS testing puts()";
+ char buffer[23];
+ buffer[22] = 'x';
+ TESTCASE( ( fh = freopen( testfile, "wb+", stdout ) ) != NULL );
+ TESTCASE( puts( message ) >= 0 );
+ rewind( fh );
+ TESTCASE( fread( buffer, 1, 22, fh ) == 22 );
+ TESTCASE( memcmp( buffer, message, 22 ) == 0 );
+ TESTCASE( buffer[22] == 'x' );
+ TESTCASE( fclose( fh ) == 0 );
+ TESTCASE( remove( testfile ) == 0 );
return TEST_RESULTS;
}
int main( void )
{
+ FILE * fh;
+ char buffer[25];
+ buffer[24] = 'x';
+ TESTCASE( ( fh = freopen( testfile, "wb+", stdout ) ) != NULL );
TESTCASE( system( SHELLCOMMAND ) );
+ rewind( fh );
+ TESTCASE( fread( buffer, 1, 24, fh ) == 24 );
+ TESTCASE( memcmp( buffer, "SUCCESS testing system()", 24 ) == 0 );
+ TESTCASE( buffer[24] == 'x' );
+ TESTCASE( fclose( fh ) == 0 );
+ TESTCASE( remove( testfile ) == 0 );
return TEST_RESULTS;
}
} \
} while ( 0 )
+/* Virtually everything in the printf() / scanf() test drivers is heavily
+ depending on the platform, i.e. the width of the integer values. To do
+ proper domain tests, we need the limits of the integers (largest and
+ smallest value), which we can get from <limits.h>. But we also need the
+ string representations of these numbers, to the various bases, which of
+ course vary depending on how the platform defines 'int' and 'long'.
+*/
+
+#define sym2v( x ) #x
+#define sym2s( x ) sym2v( x )
+
+#if INT_MAX >> 15 == 1
+
+#define UINT_DIG 5
+#define INT_DIG 5
+#define INT_DIG_LESS1 "4"
+#define INT_DIG_PLUS1 "6"
+#define INT_DIG_PLUS2 "7"
+#define INT_HEXDIG "FFF"
+#define INT_hexdig "fff"
+#define INT_OCTDIG "177777"
+#define INT_MAX_DEZ_STR "32767"
+#define INT_MIN_DEZ_STR "32768"
+#define UINT_MAX_DEZ_STR "65535"
+#define INT_MAX_OCT_STR
+#define INT_MIN_OCT_STR
+#define UINT_MAX_OCT_STR
+#define INT_MAX_HEX_STR
+#define INT_MIN_HEX_STR
+#define UINT_MAX_HEX_STR
+
+#elif UINT_MAX >> 31 == 1
+
+#define UINT_DIG 10
+#define INT_DIG 10
+#define INT_DIG_LESS1 "9"
+#define INT_DIG_PLUS1 "11"
+#define INT_DIG_PLUS2 "12"
+#define INT_HEXDIG "FFFFFFF"
+#define INT_hexdig "fffffff"
+#define INT_OCTDIG "37777777777"
+#define INT_MAX_DEZ_STR "2147483647"
+#define INT_MIN_DEZ_STR "2147483648"
+#define UINT_MAX_DEZ_STR "4294967295"
+#define INT_MAX_OCT_STR
+#define INT_MIN_OCT_STR
+#define UINT_MAX_OCT_STR
+#define INT_MAX_HEX_STR
+#define INT_MIN_HEX_STR
+#define UINT_MAX_HEX_STR
+
+#elif UINT_MAX >> 63 == 1
+
+#define UINT_DIG 20
+#define INT_DIG 19
+#define INT_DIG_LESS1 "18"
+#define INT_DIG_PLUS1 "20"
+#define INT_DIG_PLUS2 "21"
+#define INT_HEXDIG "FFFFFFFFFFFFFFF"
+#define INT_hexdig "fffffffffffffff"
+#define INT_OCTDIG "1777777777777777777777"
+#define INT_MAX_DEZ_STR "9223372036854775807"
+#define INT_MIN_DEZ_STR "9223372036854775808"
+#define UINT_MAX_DEZ_STR "18446744073709551615"
+#define INT_MAX_OCT_STR
+#define INT_MIN_OCT_STR
+#define UINT_MAX_OCT_STR
+#define INT_MAX_HEX_STR
+#define INT_MIN_HEX_STR
+#define UINT_MAX_HEX_STR
+
+#else
+
+#error Unsupported width of 'int' (neither 16, 32, nor 64 bit).
+
+#endif
+
+
+#if ULONG_MAX >> 31 == 1
+
+#define ULONG_DIG 10
+#define LONG_DIG 10
+#define LONG_MAX_DEZ_STR "2147483647"
+#define LONG_MIN_DEZ_STR "2147483648"
+#define ULONG_MAX_DEZ_STR "4294967295"
+#define LONG_MAX_OCT_STR
+#define LONG_MIN_OCT_STR
+#define ULONG_MAX_OCT_STR
+#define LONG_MAX_HEX_STR
+#define LONG_MIN_HEX_STR
+#define ULONG_MAX_HEX_STR
+
+#elif ULONG_MAX >> 63 == 1
+
+#define ULONG_DIG 20
+#define LONG_DIG 19
+#define LONG_MAX_DEZ_STR "9223372036854775807"
+#define LONG_MIN_DEZ_STR "9223372036854775808"
+#define ULONG_MAX_DEZ_STR "18446744073709551615"
+#define LONG_MAX_OCT_STR
+#define LONG_MIN_OCT_STR
+#define ULONG_MAX_OCT_STR
+#define LONG_MAX_HEX_STR
+#define LONG_MIN_HEX_STR
+#define ULONG_MAX_HEX_STR
+
+#else
+
+#error Unsupported width of 'long' (neither 32 nor 64 bit).
+
+#endif
+
+
+#if ULLONG_MAX >> 63 == 1
+
+#define ULLONG_DIG 20
+#define LLONG_DIG 19
+#define LLONG_MAX_DEZ_STR "9223372036854775807"
+#define LLONG_MIN_DEZ_STR "9223372036854775808"
+#define ULLONG_MAX_DEZ_STR "18446744073709551615"
+#define LLONG_MAX_OCT_STR
+#define LLONG_MIN_OCT_STR
+#define ULLONG_MAX_OCT_STR
+#define LLONG_MAX_HEX_STR
+#define LLONG_MIN_HEX_STR
+#define ULLONG_MAX_HEX_STR
+
+#elif ULLONG_MAX >> 127 == 1
+
+#define ULLONG_DIG 38
+#define LLONG_DIG 38
+#define LLONG_MAX_DEZ_STR "170141183460469231731687303715884105727"
+#define LLONG_MIN_DEZ_STR "170141183460469231731687303715884105728"
+#define ULLONG_MAX_DEZ_STR "340282366920938463463374607431768211455"
+#define LLONG_MAX_OCT_STR
+#define LLONG_MIN_OCT_STR
+#define ULLONG_MAX_OCT_STR
+#define LLONG_MAX_HEX_STR
+#define LLONG_MIN_HEX_STR
+#define ULLONG_MAX_HEX_STR
+
+#else
+
+#error Unsupported width of 'long long' (neither 64 nor 128 bit).
+
+#endif
{
-
-/* Be afraid. Be very afraid.
- Virtually everything in the printf() / scanf() test drivers is heavily
- depending on the platform, i.e. the width of the integer values. Since
- we need widths, string representations in hex, octal and decimal and
- whatnot, there is some heavy macro abuse coming up...
-*/
-
-#define sym2v( x ) #x
-#define sym2s( x ) sym2v( x )
-
-#if INT_MAX >> 15 == 1
-
-#define UINT_DIG 5
-#define INT_DIG 5
-#define INT_DIG_LESS1 "4"
-#define INT_DIG_PLUS1 "6"
-#define INT_DIG_PLUS2 "7"
-#define INT_HEXDIG "FFF"
-#define INT_hexdig "fff"
-#define INT_OCTDIG "177777"
-#define INT_MAX_DEZ_STR "32767"
-#define INT_MIN_DEZ_STR "32768"
-#define UINT_MAX_DEZ_STR "65535"
-#define INT_MAX_OCT_STR
-#define INT_MIN_OCT_STR
-#define UINT_MAX_OCT_STR
-#define INT_MAX_HEX_STR
-#define INT_MIN_HEX_STR
-#define UINT_MAX_HEX_STR
-
-#elif UINT_MAX >> 31 == 1
-
-#define UINT_DIG 10
-#define INT_DIG 10
-#define INT_DIG_LESS1 "9"
-#define INT_DIG_PLUS1 "11"
-#define INT_DIG_PLUS2 "12"
-#define INT_HEXDIG "FFFFFFF"
-#define INT_hexdig "fffffff"
-#define INT_OCTDIG "37777777777"
-#define INT_MAX_DEZ_STR "2147483647"
-#define INT_MIN_DEZ_STR "2147483648"
-#define UINT_MAX_DEZ_STR "4294967295"
-#define INT_MAX_OCT_STR
-#define INT_MIN_OCT_STR
-#define UINT_MAX_OCT_STR
-#define INT_MAX_HEX_STR
-#define INT_MIN_HEX_STR
-#define UINT_MAX_HEX_STR
-
-#elif UINT_MAX >> 63 == 1
-
-#define UINT_DIG 20
-#define INT_DIG 19
-#define INT_DIG_LESS1 "18"
-#define INT_DIG_PLUS1 "20"
-#define INT_DIG_PLUS2 "21"
-#define INT_HEXDIG "FFFFFFFFFFFFFFF"
-#define INT_hexdig "fffffffffffffff"
-#define INT_OCTDIG "1777777777777777777777"
-#define INT_MAX_DEZ_STR "9223372036854775807"
-#define INT_MIN_DEZ_STR "9223372036854775808"
-#define UINT_MAX_DEZ_STR "18446744073709551615"
-#define INT_MAX_OCT_STR
-#define INT_MIN_OCT_STR
-#define UINT_MAX_OCT_STR
-#define INT_MAX_HEX_STR
-#define INT_MIN_HEX_STR
-#define UINT_MAX_HEX_STR
-
-#else
-
-#error Unsupported width of 'int' (neither 16, 32, nor 64 bit).
-
-#endif
-
-
-#if ULONG_MAX >> 31 == 1
-
-#define ULONG_DIG 10
-#define LONG_DIG 10
-#define LONG_MAX_DEZ_STR "2147483647"
-#define LONG_MIN_DEZ_STR "2147483648"
-#define ULONG_MAX_DEZ_STR "4294967295"
-#define LONG_MAX_OCT_STR
-#define LONG_MIN_OCT_STR
-#define ULONG_MAX_OCT_STR
-#define LONG_MAX_HEX_STR
-#define LONG_MIN_HEX_STR
-#define ULONG_MAX_HEX_STR
-
-#elif ULONG_MAX >> 63 == 1
-
-#define ULONG_DIG 20
-#define LONG_DIG 19
-#define LONG_MAX_DEZ_STR "9223372036854775807"
-#define LONG_MIN_DEZ_STR "9223372036854775808"
-#define ULONG_MAX_DEZ_STR "18446744073709551615"
-#define LONG_MAX_OCT_STR
-#define LONG_MIN_OCT_STR
-#define ULONG_MAX_OCT_STR
-#define LONG_MAX_HEX_STR
-#define LONG_MIN_HEX_STR
-#define ULONG_MAX_HEX_STR
-
-#else
-
-#error Unsupported width of 'long' (neither 32 nor 64 bit).
-
-#endif
-
-
-#if ULLONG_MAX >> 63 == 1
-
-#define ULLONG_DIG 20
-#define LLONG_DIG 19
-#define LLONG_MAX_DEZ_STR "9223372036854775807"
-#define LLONG_MIN_DEZ_STR "9223372036854775808"
-#define ULLONG_MAX_DEZ_STR "18446744073709551615"
-#define LLONG_MAX_OCT_STR
-#define LLONG_MIN_OCT_STR
-#define ULLONG_MAX_OCT_STR
-#define LLONG_MAX_HEX_STR
-#define LLONG_MIN_HEX_STR
-#define ULLONG_MAX_HEX_STR
-
-#elif ULLONG_MAX >> 127 == 1
-
-#define ULLONG_DIG 38
-#define LLONG_DIG 38
-#define LLONG_MAX_DEZ_STR "170141183460469231731687303715884105727"
-#define LLONG_MIN_DEZ_STR "170141183460469231731687303715884105728"
-#define ULLONG_MAX_DEZ_STR "340282366920938463463374607431768211455"
-#define LLONG_MAX_OCT_STR
-#define LLONG_MIN_OCT_STR
-#define ULLONG_MAX_OCT_STR
-#define LLONG_MAX_HEX_STR
-#define LLONG_MIN_HEX_STR
-#define ULLONG_MAX_HEX_STR
-
-#else
-
-#error Unsupported width of 'long long' (neither 64 nor 128 bit).
-
-#endif
-
-
PRINTF_TEST( 4, "-128", "%hhd", CHAR_MIN );
PRINTF_TEST( 3, "127", "%hhd", CHAR_MAX );
PRINTF_TEST( 1, "0", "%hhd", 0 );