LCOV - GNU Libidn - lib/gltests/test-thread_create.c

LCOV - code coverage report
Current view: top level - lib/gltests - test-thread_create.c (source / functions) Hit Total Coverage
Test: GNU Libidn Lines: 12 14 85.7 %
Date: 2020年07月22日 17:53:13 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

 Line data Source code
 1  : /* Test of gl_thread_create () macro.
 2  : Copyright (C) 2011-2020 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 <https://www.gnu.org/licenses/>. */
 16  : 
 17  : /* Written by Bruno Haible <bruno@clisp.org>, 2011. */
 18  : 
 19  : #include <config.h>
 20  : 
 21  : #include "glthread/thread.h"
 22  : 
 23  : #include <stdio.h>
 24  : #include <string.h>
 25  : 
 26  : #include "macros.h"
 27  : 
 28  : static gl_thread_t main_thread_before;
 29  : static gl_thread_t main_thread_after;
 30  : static gl_thread_t worker_thread;
 31  : 
 32  : static int dummy;
 33  : static volatile int work_done;
 34  : 
 35  : static void *
 36  1 : worker_thread_func (void *arg)
 37  : {
 38  1 : work_done = 1;
 39  1 : return &dummy;
 40  : }
 41  : 
 42  : int
 43  1 : main ()
 44  : {
 45  1 : main_thread_before = gl_thread_self ();
 46  : 
 47  1 : if (glthread_create (&worker_thread, worker_thread_func, NULL) == 0)
 48  : {
 49  : void *ret;
 50  : 
 51  : /* Check that gl_thread_self () has the same value before than after the
 52  : first call to gl_thread_create (). */
 53  1 : main_thread_after = gl_thread_self ();
 54  1 : ASSERT (memcmp (&main_thread_before, &main_thread_after,
 55  : sizeof (gl_thread_t))
 56  : == 0);
 57  : 
 58  1 : gl_thread_join (worker_thread, &ret);
 59  : 
 60  : /* Check the return value of the thread. */
 61  1 : ASSERT (ret == &dummy);
 62  : 
 63  : /* Check that worker_thread_func () has finished executing. */
 64  1 : ASSERT (work_done);
 65  : 
 66  1 : return 0;
 67  : }
 68  : else
 69  : {
 70  : #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS
 71  0 : fputs ("glthread_create failed\n", stderr);
 72  0 : return 1;
 73  : #else
 74  : fputs ("Skipping test: multithreading not enabled\n", stderr);
 75  : return 77;
 76  : #endif
 77  : }
 78  : }

Generated by: LCOV version 1.13

AltStyle によって変換されたページ (->オリジナル) /