/[ascend]/trunk/test/assertimpl.c
ViewVC logotype

Contents of /trunk/test/assertimpl.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 101 - (show annotations) (download) (as text)
Sat Dec 10 04:22:07 2005 UTC (17 years, 9 months ago) by jds
File MIME type: text/x-csrc
File size: 3298 byte(s)
A little more progress killing compiler warnings.
1 /*
2 * Assert implementation override for ASCEND unit tests
3 *
4 * Copyright (C) 2005 Jerry St.Clair
5 *
6 * This file is part of the Ascend Environment.
7 *
8 * The Ascend Environment is free software; you can redistribute it
9 * and/or modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License, or (at your option) any later version.
12 *
13 * The Ascend Environment is distributed in hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with the program; if not, write to the Free Software Foundation,
20 * Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the file named
21 * COPYING.
22 */
23
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <setjmp.h>
27 #include <assert.h>
28 #include "utilities/ascConfig.h"
29 #include "utilities/ascPanic.h"
30 #include "assertimpl.h"
31
32 enum assert_status_t g_assert_status = ast_passed;
33 jmp_buf g_asc_test_env;
34 static int f_use_longjump = FALSE;
35
36 void enable_assert_longjmp(int TRUE_or_FALSE)
37 {
38 f_use_longjump = TRUE_or_FALSE;
39 }
40
41 /* Override implementation of assert using the signature of the relevant compiler */
42 #ifdef __WIN32__
43 # if defined(__GNUC__) || defined(__MINGW32_VERSION)
44 _CRTIMP void __cdecl _assert(const char *cond, const char *file, int line)
45 {
46
47 # elif defined(_MSC_VER)
48 _CRTIMP void __cdecl _assert(const char *cond, const char *file, unsigned line)
49 {
50
51 # elif defined(__BORLANDC__)
52 # ifdef __cplusplus
53 namespace std {
54 # endif
55 void _RTLENTRY _EXPFUNC _assert(char *cond, char *file, int line)
56 {
57
58 # else
59 # error Unrecognized compiler.
60
61 # endif
62 #else /* !__WIN32__ */
63 # if defined(__GNUC__)
64 void __assert_fail (const char *cond, const char *file,
65 unsigned int line, const char *__function)
66 /* __THROW __attribute__ ((__noreturn__)) */
67 {
68 UNUSED_PARAMETER(__function);
69
70 # else
71 # error Unrecognized compiler.
72 # endif
73 #endif /* __WIN32__ */
74
75 g_assert_status = ast_failed;
76 if (TRUE == f_use_longjump) {
77 longjmp(g_asc_test_env, -1);
78 }
79 else {
80 fprintf(stderr, "\nAssertion failed: %s, file %s, line %d\n", cond, file, line);
81 abort();
82 }
83 }
84
85 #if defined(__BORLANDC__)
86 # ifdef __cplusplus
87 }
88 # endif
89 #endif
90
91 static int f_asc_assert_failed = FALSE;
92
93 static int assert_callback(int status)
94 {
95 if (ASCERR_ASSERTION_FAILED == status) {
96 f_asc_assert_failed = TRUE;
97 longjmp(g_asc_test_env, -1);
98 }
99 return -1;
100 }
101
102 int asc_assert_failed()
103 {
104 return f_asc_assert_failed;
105 }
106
107 void asc_assert_reset()
108 {
109 f_asc_assert_failed = FALSE;
110 }
111
112 void asc_assert_catch(int TRUE_or_FALSE)
113 {
114 static PanicCallbackFunc old_callback = NULL;
115
116 if (FALSE == TRUE_or_FALSE) {
117 (void)Asc_PanicSetCallback(old_callback);
118 Asc_PanicDisplayMessageBox(TRUE);
119 old_callback = NULL;
120 f_asc_assert_failed = FALSE;
121 }
122 else {
123 old_callback = Asc_PanicSetCallback(assert_callback);
124 Asc_PanicDisplayMessageBox(FALSE);
125 f_asc_assert_failed = FALSE;
126 }
127 }
128

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22