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