test_assert.c
1 /*************************************************************************
2 * test_assert : 測試assert.h所定義的宏及其所調用的函數。
3 * 版權 (C) 2010 石仔<guoshimin57@gmail.com>
4 * 本程序為自由軟件:你可以依據自由軟件基金會所發布的第三版GNU通用公共
5 * 許可證重新發布、修改本程序。
6 * 雖然基于使用目的而發布本程序,但不負任何擔保責任,亦不包含適銷性或特
7 * 定目標之適用性的擔保。詳見GNU通用公共許可證。
8 * 你應該已經收到一份附隨此程序的GNU通用公共許可證副本。否則,請參閱
9 * <http://www.gnu.org/licenses/>。
10 * ************************************************************************/
11
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <signal.h>
15 #include "_intl.h"
16
17 extern void test_assert(void);
18 extern void handle_abort(int signum);
19
20 static int pass_flag=0;
21
22 int main(void)
23 {
24 test_assert();
25 return EXIT_FAILURE;
26 }
27
28 void handle_abort(int signum)
29 {
30 if(pass_flag == 1)
31 {
32 puts( _("<assert.h>成功通過本測試"));
33 exit(EXIT_SUCCESS);
34 }
35 else
36 {
37 puts( _("<assert.h>不能通過本測試"));
38 exit(EXIT_FAILURE);
39 }
40 }
41
42 void test_assert(void)
43 {
44 #undef NDEBUG
45 #include <assert.h>
46 assert(signal(SIGABRT, handle_abort) != SIG_ERR);
47
48 #define NDEBUG
49 #include <assert.h>
50 assert(1 == 1);
51 assert(1 != 1);
52
53 #undef NDEBUG
54 #include <assert.h>
55 assert(1 == 1);
56 pass_flag=1;
57 assert(1 != 1);
58 puts( _("<assert.h>不能通過本測試"));
59 }
版權 © 2024 石仔