1/* Copyright (C) 2002 Free Software Foundation.
2
3   Test floating point negation produces the expected results.
4
5   Written by Roger Sayle, 21st May 2002.  */
6
7/* { dg-do run } */
8/* { dg-options "-O2 -ffast-math" } */
9
10extern void abort ();
11
12
13double
14dneg (double x)
15{
16  return -x;
17}
18
19double
20dmult (double x)
21{
22  return -1.0 * x;
23}
24
25double
26ddiv (double x)
27{
28  return x / -1.0;
29}
30
31
32float
33fneg (float x)
34{
35  return -x;
36}
37
38float
39fmult (float x)
40{
41  return -1.0f * x;
42}
43
44float
45fdiv (float x)
46{
47  return x / -1.0f;
48}
49
50
51void
52ftest(float src, float dst)
53{
54  if (fneg (src) != dst)
55    abort ();
56
57  if (src != fneg (dst))
58    abort ();
59
60  if (fmult (src) != dst)
61    abort ();
62
63  if (src != fmult (dst))
64    abort ();
65
66  if (fdiv (src) != dst)
67    abort ();
68
69  if (src != fdiv(dst))
70    abort ();
71}
72
73void
74dtest(double src, double dst)
75{
76  if (dneg (src) != dst)
77    abort ();
78
79  if (src != dneg (dst))
80    abort ();
81
82  if (dmult (src) != dst)
83    abort ();
84
85  if (src != dmult (dst))
86    abort ();
87
88  if (ddiv (src) != dst)
89    abort ();
90
91  if (src != ddiv(dst))
92    abort ();
93}
94
95
96int
97main ()
98{
99  ftest (1.0f, -1.0f);
100  ftest (2.0f, -2.0f);
101  ftest (-3.0f, 3.0f);
102  ftest (0.0f, -0.0f);
103  ftest (-0.0f, 0.0f);
104
105  dtest (1.0, -1.0);
106  dtest (2.0, -2.0);
107  dtest (-3.0, 3.0);
108  dtest (0.0, -0.0);
109  dtest (-0.0, 0.0);
110
111  return 0;
112}
113
114