>From bf6dd504cc2fcd8481ad5787999b845a3c00f54d Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 20 Jun 2019 04:25:58 +0200 Subject: [PATCH 17/26] threads-h: Add tests. * tests/test-threads.c: New file. * modules/threads-h-tests: New file. * tests/test-threads-c++.cc: New file. * modules/threads-h-c++-tests: New file. --- ChangeLog | 8 +++++ modules/threads-h-c++-tests | 19 ++++++++++++ modules/threads-h-tests | 12 ++++++++ tests/test-threads-c++.cc | 73 +++++++++++++++++++++++++++++++++++++++++++++ tests/test-threads.c | 65 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 177 insertions(+) create mode 100644 modules/threads-h-c++-tests create mode 100644 modules/threads-h-tests create mode 100644 tests/test-threads-c++.cc create mode 100644 tests/test-threads.c diff --git a/ChangeLog b/ChangeLog index 22b942b..b536bcb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2019-06-20 Bruno Haible + threads-h: Add tests. + * tests/test-threads.c: New file. + * modules/threads-h-tests: New file. + * tests/test-threads-c++.cc: New file. + * modules/threads-h-c++-tests: New file. + +2019-06-20 Bruno Haible + threads-h: New module. * lib/threads.in.h: New file. * m4/threads.m4: New file. diff --git a/modules/threads-h-c++-tests b/modules/threads-h-c++-tests new file mode 100644 index 0000000..8553bd6 --- /dev/null +++ b/modules/threads-h-c++-tests @@ -0,0 +1,19 @@ +Files: +tests/test-threads-c++.cc +tests/signature.h + +Status: +c++-test + +Depends-on: +ansi-c++-opt + +configure.ac: + +Makefile.am: +if ANSICXX +TESTS += test-threads-c++ +check_PROGRAMS += test-threads-c++ +test_threads_c___SOURCES = test-threads-c++.cc +test_threads_c___LDADD = $(LDADD) @LIBSTDTHREAD@ +endif diff --git a/modules/threads-h-tests b/modules/threads-h-tests new file mode 100644 index 0000000..e4f399d --- /dev/null +++ b/modules/threads-h-tests @@ -0,0 +1,12 @@ +Files: +tests/test-threads.c + +Depends-on: +threads-h-c++-tests + +configure.ac: + +Makefile.am: +TESTS += test-threads +check_PROGRAMS += test-threads +test_threads_LDADD = $(LDADD) @LIBSTDTHREAD@ diff --git a/tests/test-threads-c++.cc b/tests/test-threads-c++.cc new file mode 100644 index 0000000..66877d4 --- /dev/null +++ b/tests/test-threads-c++.cc @@ -0,0 +1,73 @@ +/* Test of substitute in C++ mode. + Copyright (C) 2019 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 3 of the License, 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, see . */ + +/* Written by Bruno Haible , 2019. */ + +#define GNULIB_NAMESPACE gnulib +#include + +#include + +#include "signature.h" + + +#if GNULIB_TEST_THRD +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_create, int, + (thrd_t *, thrd_start_t, void *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_current, thrd_t, (void)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_equal, int, (thrd_t, thrd_t)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_sleep, int, + (const struct timespec *, struct timespec *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_yield, void, (void)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_detach, int, (thrd_t)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_join, int, (thrd_t, int *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_exit, _Noreturn void, (int)); +#endif + +#if GNULIB_TEST_MTX +SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_init, int, (mtx *, int)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_lock, int, (mtx *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_trylock, int, (mtx *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_timedlock, int, + (mtx *, const struct timespec *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_unlock, int, (mtx *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_destroy, void, (mtx *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::call_once, void, + (once_flag *, void (*) (void))); +#endif + +#if GNULIB_TEST_CND +SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_init, int, (cnd_t *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_wait, int, (cnd_t *, mtx_t *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_timedwait, int, + (cnd_t *, mtx_t *, const struct timespec *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_signal, int, (cnd_t *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_broadcast, int, (cnd_t *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_destroy, void, (cnd_t *)); +#endif + +#if GNULIB_TEST_TSS +SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_create, int, (tss_t *, tss_dtor_t)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_set, int, (tss_t, void *)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_get, void *, (tss_t)); +SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_delete, void, (tss_t)); +#endif + + +int +main () +{ +} diff --git a/tests/test-threads.c b/tests/test-threads.c new file mode 100644 index 0000000..39a0f3c --- /dev/null +++ b/tests/test-threads.c @@ -0,0 +1,65 @@ +/* Test of substitute. + Copyright (C) 2019 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 3 of the License, 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, see . */ + +/* Written by Bruno Haible , 2019. */ + +#include + +#include + +/* Check that thread_local is defined. */ +#ifndef thread_local +"oops" +#endif + +/* Check that ONCE_FLAG_INIT is defined. */ +#ifndef ONCE_FLAG_INIT +"oops1" +#endif +once_flag a = ONCE_FLAG_INIT; + +/* Check that TSS_DTOR_ITERATIONS is defined. */ +#ifndef TSS_DTOR_ITERATIONS +"oops2" +#endif +int b = TSS_DTOR_ITERATIONS; + +int +main (void) +{ + /* Ensure no overlap in thrd_*. */ + switch (0) + { + case thrd_success: + case thrd_timedout: + case thrd_busy: + case thrd_nomem: + case thrd_error: + ; + } + + /* Ensure no overlap among valid types for mtx_init. */ + switch (0) + { + case mtx_plain: + case mtx_timed: + case mtx_plain | mtx_recursive: + case mtx_timed | mtx_recursive: + ; + } + + return 0; +} -- 2.7.4