]> pd.if.org Git - pdclib.old/blob - functions/_PDCLIB/assert.c
strnlen: stupid off-by-one
[pdclib.old] / functions / _PDCLIB / assert.c
1 /* $Id$ */
2
3 /* _PDCLIB_assert( char const * )
4
5    This file is part of the Public Domain C Library (PDCLib).
6    Permission is granted to use, modify, and / or redistribute at will.
7 */
8
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <assert.h>
12
13 #ifndef REGTEST
14
15 #include <_PDCLIB_aux.h>
16
17 void _PDCLIB_assert99( char const * const message1, char const * const function, char const * const message2 )
18 {
19     fputs( message1, stderr );
20     fputs( function, stderr );
21     fputs( message2, stderr );
22     abort();
23 }
24
25 void _PDCLIB_assert89( char const * const message )
26 {
27     fputs( message, stderr );
28     abort();
29 }
30
31 #endif
32
33 #ifdef TEST
34 #include <_PDCLIB_test.h>
35 #include <signal.h>
36
37 static int EXPECTED_ABORT = 0;
38 static int UNEXPECTED_ABORT = 1;
39
40 static void aborthandler( int sig )
41 {
42     TESTCASE( ! EXPECTED_ABORT );
43     exit( (signed int)TEST_RESULTS );
44 }
45
46 #define NDEBUG
47 #include <assert.h>
48
49 static int disabled_test( void )
50 {
51     int i = 0;
52     assert( i == 0 ); /* NDEBUG set, condition met */
53     assert( i == 1 ); /* NDEBUG set, condition fails */
54     return i;
55 }
56
57 #undef NDEBUG
58 #include <assert.h>
59
60 int main( void )
61 {
62     TESTCASE( signal( SIGABRT, &aborthandler ) != SIG_ERR );
63     TESTCASE( disabled_test() == 0 );
64     assert( UNEXPECTED_ABORT ); /* NDEBUG not set, condition met */
65     assert( EXPECTED_ABORT ); /* NDEBUG not set, condition fails - should abort */
66     return TEST_RESULTS;
67 }
68
69 #endif