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

Annotation of /trunk/test/assertimpl.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 59 - (hide annotations) (download) (as text)
Sun Oct 30 01:38:20 2005 UTC (17 years, 1 month ago) by jds
File MIME type: text/x-csrc
File size: 2918 byte(s)
- prototype unit test suite based on CUnit added.
- unit tests for base/generic/general and base/generic/utilites added.
- 2nd manual rework of doxygen documentation in general and utilities.
- bug fixes (mostly general & utilities) found during test development.
- added asc_assert prototype to redirect failures to Asc_Panic() and enable decoupling assertions from NDEBUG.
- some modifications of interface & implementation to facilitate testing.
- utilities/ascPrint & utilities/ascMalloc functions now always included in base libs to minimize recompilation when an interface chooses different options.
1 jds 59 /*
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     #if defined(__GNUC__) || defined(__MINGW32_VERSION)
43     _CRTIMP void __cdecl _assert(const char *cond, const char *file, int line)
44    
45     #elif defined(_MSC_VER)
46     _CRTIMP void __cdecl _assert(const char *cond, const char *file, unsigned line)
47    
48     #elif defined(__BORLANDC__)
49     #ifdef __cplusplus
50     namespace std {
51     #endif
52     void _RTLENTRY _EXPFUNC _assert(char *cond, char *file, int line)
53    
54     #else
55     #error Unrecognized compiler.
56    
57     #endif
58     {
59     g_assert_status = ast_failed;
60     if (TRUE == f_use_longjump) {
61     longjmp(g_asc_test_env, -1);
62     }
63     else {
64     fprintf(stderr, "\nAssertion failed: %s, file %s, line %d\n", cond, file, line);
65     abort();
66     }
67     }
68    
69     #if defined(__BORLANDC__)
70     #ifdef __cplusplus
71     }
72     #endif
73     #endif
74    
75     static int f_asc_assert_failed = FALSE;
76    
77     static int assert_callback(int status)
78     {
79     if (ASCERR_ASSERTION_FAILED == status) {
80     f_asc_assert_failed = TRUE;
81     longjmp(g_asc_test_env, -1);
82     }
83     return -1;
84     }
85    
86     int asc_assert_failed()
87     {
88     return f_asc_assert_failed;
89     }
90    
91     void asc_assert_reset()
92     {
93     f_asc_assert_failed = FALSE;
94     }
95    
96     void asc_assert_catch(int TRUE_or_FALSE)
97     {
98     static PanicCallbackFunc old_callback = NULL;
99    
100     if (FALSE == TRUE_or_FALSE) {
101     (void)Asc_PanicSetCallback(old_callback);
102     Asc_PanicDisplayMessageBox(TRUE);
103     old_callback = NULL;
104     f_asc_assert_failed = FALSE;
105     }
106     else {
107     old_callback = Asc_PanicSetCallback(assert_callback);
108     Asc_PanicDisplayMessageBox(FALSE);
109     f_asc_assert_failed = FALSE;
110     }
111     }
112    

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