]> pd.if.org Git - pdclib/commitdiff
Moved the macro magic into the common header.
authorsolar <unknown>
Fri, 17 Dec 2010 06:05:00 +0000 (06:05 +0000)
committersolar <unknown>
Fri, 17 Dec 2010 06:05:00 +0000 (06:05 +0000)
functions/stdio/puts.c
platform/example/functions/stdlib/system.c
testing/_PDCLIB_iotest.h
testing/printf_testcases.h

index b7954ea0c69b92895a76741d8df170c6ccdd4cab..ec67478ddace2d36a2d303c8e3943d71b4955891 100644 (file)
@@ -49,7 +49,18 @@ int puts( const char * s )
 
 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;
 }
 
index 2e0079a449d942178badaedf8d98a285e842d95d..eb8db3dbd9022f6b80f39881289ed95e3c820d1f 100644 (file)
@@ -40,7 +40,17 @@ int system( const char * string )
 
 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;
 }
 
index 4dc33f42c3fe571dd134ce2fe0ec9862f29cb0ad..4cdc6d5c7039a7176da29d37fc8e4a003bf0d992 100644 (file)
         } \
     } 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
index 2514540c5061dd838066ae8c3e1afea486996fe4..e024784d3c42d136689bdf9206f870e17a5923d1 100644 (file)
@@ -1,152 +1,4 @@
     {
-
-/* 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 );