added missing dependencies to fix failing unistr/ tests
[gnulib.git] / tests / test-stdbool.c
1 /* Test of <stdbool.h> substitute.
2    Copyright (C) 2002-2007, 2009-2010 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
18
19 #include <config.h>
20
21 #include <stdbool.h>
22
23 #ifndef bool
24  "error: bool is not defined"
25 #endif
26 #ifndef false
27  "error: false is not defined"
28 #endif
29 #if false
30  "error: false is not 0"
31 #endif
32 #ifndef true
33  "error: true is not defined"
34 #endif
35 #if true != 1
36  "error: true is not 1"
37 #endif
38 #ifndef __bool_true_false_are_defined
39  "error: __bool_true_false_are_defined is not defined"
40 #endif
41
42 #if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>.  */
43 struct s { _Bool s: 1; _Bool t; } s;
44 #endif
45
46 char a[true == 1 ? 1 : -1];
47 char b[false == 0 ? 1 : -1];
48 char c[__bool_true_false_are_defined == 1 ? 1 : -1];
49 #if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>, at least,
50 not for all compilers.  */
51 char d[(bool) 0.5 == true ? 1 : -1];
52 bool e = &s;
53 char f[(_Bool) 0.0 == false ? 1 : -1];
54 #endif
55 char g[true];
56 char h[sizeof (_Bool)];
57 #if 0 /* See above.  */
58 char i[sizeof s.t];
59 #endif
60 enum { j = false, k = true, l = false * true, m = true * 256 };
61 _Bool n[m];
62 char o[sizeof n == m * sizeof n[0] ? 1 : -1];
63 char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
64 #if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>.  */
65 #if defined __xlc__ || defined __GNUC__
66  /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
67     reported by James Lemley on 2005-10-05; see
68     http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
69     This test is not quite right, since xlc is allowed to
70     reject this program, as the initializer for xlcbug is
71     not one of the forms that C requires support for.
72     However, doing the test right would require a run-time
73     test, and that would make cross-compilation harder.
74     Let us hope that IBM fixes the xlc bug, and also adds
75     support for this kind of constant expression.  In the
76     meantime, this test will reject xlc, which is OK, since
77     our stdbool.h substitute should suffice.  We also test
78     this with GCC, where it should work, to detect more
79     quickly whether someone messes up the test in the
80     future.  */
81  char digs[] = "0123456789";
82  int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
83 #endif
84 #endif
85 /* Catch a bug in an HP-UX C compiler.  See
86    http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
87    http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
88  */
89 _Bool q = true;
90 _Bool *pq = &q;
91
92 int
93 main ()
94 {
95   return 0;
96 }