Tests for module 'stdbool'.
authorBruno Haible <bruno@clisp.org>
Sun, 18 Feb 2007 04:15:31 +0000 (04:15 +0000)
committerBruno Haible <bruno@clisp.org>
Sun, 18 Feb 2007 04:15:31 +0000 (04:15 +0000)
ChangeLog
modules/stdbool-tests [new file with mode: 0644]
tests/test-stdbool.c [new file with mode: 0644]

index ffd8a50..8eff15d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-02-17  Bruno Haible  <bruno@clisp.org>
 
+       * modules/stdbool-tests: New file.
+       * tests/test-stdbool.c: New file.
+
        * modules/netinet_in-tests: New file.
        * tests/test-netinet_in.c: New file.
 
diff --git a/modules/stdbool-tests b/modules/stdbool-tests
new file mode 100644 (file)
index 0000000..a24825f
--- /dev/null
@@ -0,0 +1,13 @@
+Files:
+tests/test-stdbool.c
+
+Depends-on:
+
+configure.ac:
+
+Makefile.am:
+TESTS += test-stdbool
+check_PROGRAMS += test-stdbool
+
+License:
+LGPL
diff --git a/tests/test-stdbool.c b/tests/test-stdbool.c
new file mode 100644 (file)
index 0000000..73fd61e
--- /dev/null
@@ -0,0 +1,88 @@
+/* Test of <stdbool.h> substitute.
+   Copyright (C) 2002-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#include <config.h>
+
+#include <stdbool.h>
+
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+struct s { _Bool s: 1; _Bool t; } s;
+
+char a[true == 1 ? 1 : -1];
+char b[false == 0 ? 1 : -1];
+char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+char d[(bool) 0.5 == true ? 1 : -1];
+bool e = &s;
+char f[(_Bool) 0.0 == false ? 1 : -1];
+char g[true];
+char h[sizeof (_Bool)];
+char i[sizeof s.t];
+enum { j = false, k = true, l = false * true, m = true * 256 };
+_Bool n[m];
+char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+#if defined __xlc__ || defined __GNUC__
+ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+    reported by James Lemley on 2005-10-05; see
+    http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+    This test is not quite right, since xlc is allowed to
+    reject this program, as the initializer for xlcbug is
+    not one of the forms that C requires support for.
+    However, doing the test right would require a run-time
+    test, and that would make cross-compilation harder.
+    Let us hope that IBM fixes the xlc bug, and also adds
+    support for this kind of constant expression.  In the
+    meantime, this test will reject xlc, which is OK, since
+    our stdbool.h substitute should suffice.  We also test
+    this with GCC, where it should work, to detect more
+    quickly whether someone messes up the test in the
+    future.  */
+ char digs[] = "0123456789";
+ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+#endif
+/* Catch a bug in an HP-UX C compiler.  See
+   http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+   http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+ */
+_Bool q = true;
+_Bool *pq = &q;
+
+int
+main ()
+{
+  return 0;
+}