1 /* Test lgamma functions do not set signgam for ISO C.
2    Copyright (C) 2015-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #undef _LIBC
20 #undef _GNU_SOURCE
21 
22 #include <math.h>
23 #include <stdio.h>
24 
25 #define INITVAL ((TYPE) -1 / 3)
26 
27 #if DO_INIT
28 TYPE signgam = INITVAL;
29 #else
30 TYPE signgam;
31 #endif
32 
33 #define RUN_TESTS(FUNC, TYPE)					\
34   do								\
35     {								\
36       volatile TYPE a, b, c __attribute__ ((unused));		\
37       a = 0.5;							\
38       b = -0.5;							\
39       signgam = INITVAL;					\
40       c = FUNC (a);						\
41       if (signgam == INITVAL)					\
42 	puts ("PASS: " #FUNC " (0.5) setting signgam");		\
43       else							\
44 	{							\
45 	  puts ("FAIL: " #FUNC " (0.5) setting signgam");	\
46 	  result = 1;						\
47 	}							\
48       signgam = INITVAL;					\
49       c = FUNC (b);						\
50       if (signgam == INITVAL)					\
51 	puts ("PASS: " #FUNC " (-0.5) setting signgam");	\
52       else							\
53 	{							\
54 	  puts ("FAIL: " #FUNC " (-0.5) setting signgam");	\
55 	  result = 1;						\
56 	}							\
57     }								\
58   while (0)
59 
60 int
main(void)61 main (void)
62 {
63   int result = 0;
64   RUN_TESTS (lgammaf, float);
65   RUN_TESTS (lgamma, double);
66   RUN_TESTS (lgammal, long double);
67   return result;
68 }
69