1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3 
4 extern double copysign(double,double);
5 extern float copysignf(float,float);
6 extern double fabs(double);
7 extern float fabsf(float);
8 extern void abort(void);
9 
10 
test1(double x,double y)11 double test1(double x, double y)
12 {
13   return copysign(-x,y);
14 }
15 
test1f(float x,float y)16 float test1f(float x, float y)
17 {
18   return copysignf(-x,y);
19 }
20 
test2(double x,double y)21 double test2(double x, double y)
22 {
23   return copysign(fabs(x),y);
24 }
25 
test2f(float x,float y)26 float test2f(float x, float y)
27 {
28   return copysignf(fabsf(x),y);
29 }
30 
test3(double x,double y,double z)31 double test3(double x, double y, double z)
32 {
33   return copysign(x*-y,z);
34 }
35 
test3f(float x,float y,float z)36 float test3f(float x, float y, float z)
37 {
38   return copysignf(x*-y,z);
39 }
40 
test4(double x,double y,double z)41 double test4(double x, double y, double z)
42 {
43   return copysign(x/-y,z);
44 }
45 
test4f(float x,float y,float z)46 float test4f(float x, float y, float z)
47 {
48   return copysignf(x/-y,z);
49 }
50 
main()51 int main()
52 {
53   if (test1(3.0,2.0) != 3.0)
54     abort();
55   if (test1(3.0,-2.0) != -3.0)
56     abort();
57   if (test1(-3.0,2.0) != 3.0)
58     abort();
59   if (test1(-3.0,-2.0) != -3.0)
60     abort();
61 
62   if (test1f(3.0f,2.0f) != 3.0f)
63     abort();
64   if (test1f(3.0f,-2.0f) != -3.0f)
65     abort();
66   if (test1f(-3.0f,2.0f) != 3.0f)
67     abort();
68   if (test1f(-3.0f,-2.0f) != -3.0f)
69     abort();
70 
71   if (test2(3.0,2.0) != 3.0)
72     abort();
73   if (test2(3.0,-2.0) != -3.0)
74     abort();
75   if (test2(-3.0,2.0) != 3.0)
76     abort();
77   if (test2(-3.0,-2.0) != -3.0)
78     abort();
79 
80   if (test2f(3.0f,2.0f) != 3.0f)
81     abort();
82   if (test2f(3.0f,-2.0f) != -3.0f)
83     abort();
84   if (test2f(-3.0f,2.0f) != 3.0f)
85     abort();
86   if (test2f(-3.0f,-2.0f) != -3.0f)
87     abort();
88 
89   if (test3(2.0,3.0,4.0) != 6.0)
90     abort();
91   if (test3(2.0,3.0,-4.0) != -6.0)
92     abort();
93   if (test3(2.0,-3.0,4.0) != 6.0)
94     abort();
95   if (test3(2.0,-3.0,-4.0) != -6.0)
96     abort();
97   if (test3(-2.0,3.0,4.0) != 6.0)
98     abort();
99   if (test3(-2.0,3.0,-4.0) != -6.0)
100     abort();
101   if (test3(-2.0,-3.0,4.0) != 6.0)
102     abort();
103   if (test3(-2.0,-3.0,-4.0) != -6.0)
104     abort();
105 
106   if (test3f(2.0f,3.0f,4.0f) != 6.0f)
107     abort();
108   if (test3f(2.0f,3.0f,-4.0f) != -6.0f)
109     abort();
110   if (test3f(2.0f,-3.0f,4.0f) != 6.0f)
111     abort();
112   if (test3f(2.0f,-3.0f,-4.0f) != -6.0f)
113     abort();
114   if (test3f(-2.0f,3.0f,4.0f) != 6.0f)
115     abort();
116   if (test3f(-2.0f,3.0f,-4.0f) != -6.0f)
117     abort();
118   if (test3f(-2.0f,-3.0f,4.0f) != 6.0f)
119     abort();
120   if (test3f(-2.0f,-3.0f,-4.0f) != -6.0f)
121     abort();
122 
123   if (test4(8.0,2.0,3.0) != 4.0)
124     abort();
125   if (test4(8.0,2.0,-3.0) != -4.0)
126     abort();
127   if (test4(8.0,-2.0,3.0) != 4.0)
128     abort();
129   if (test4(8.0,-2.0,-3.0) != -4.0)
130     abort();
131   if (test4(-8.0,2.0,3.0) != 4.0)
132     abort();
133   if (test4(-8.0,2.0,-3.0) != -4.0)
134     abort();
135   if (test4(-8.0,-2.0,3.0) != 4.0)
136     abort();
137   if (test4(-8.0,-2.0,-3.0) != -4.0)
138     abort();
139 
140   if (test4f(8.0f,2.0f,3.0f) != 4.0f)
141     abort();
142   if (test4f(8.0f,2.0f,-3.0f) != -4.0f)
143     abort();
144   if (test4f(8.0f,-2.0f,3.0f) != 4.0f)
145     abort();
146   if (test4f(8.0f,-2.0f,-3.0f) != -4.0f)
147     abort();
148   if (test4f(-8.0f,2.0f,3.0f) != 4.0f)
149     abort();
150   if (test4f(-8.0f,2.0f,-3.0f) != -4.0f)
151     abort();
152   if (test4f(-8.0f,-2.0f,3.0f) != 4.0f)
153     abort();
154   if (test4f(-8.0f,-2.0f,-3.0f) != -4.0f)
155     abort();
156 
157   return 0;
158 }
159 
160