summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c
blob: d4bb9c6c6b5aaef9923a1348d7a26f232db4395f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef FLOAT
#define FLOAT double
#endif

void
test_isunordered(FLOAT x, FLOAT y, int true)
{
  if (__builtin_isunordered(x, y))
    {
      if (! true)
	abort ();
    }
  else
    {
      if (true)
	abort ();
    }
}

void
test_isless(FLOAT x, FLOAT y, int true)
{
  if (__builtin_isless(x, y))
    {
      if (! true)
	abort ();
    }
  else
    {
      if (true)
	abort ();
    }
}

void
test_islessequal(FLOAT x, FLOAT y, int true)
{
  if (__builtin_islessequal(x, y))
    {
      if (! true)
	abort ();
    }
  else
    {
      if (true)
	abort ();
    }
}

void
test_isgreater(FLOAT x, FLOAT y, int true)
{
  if (__builtin_isgreater(x, y))
    {
      if (! true)
	abort ();
    }
  else
    {
      if (true)
	abort ();
    }
}

void
test_isgreaterequal(FLOAT x, FLOAT y, int true)
{
  if (__builtin_isgreaterequal(x, y))
    {
      if (! true)
	abort ();
    }
  else
    {
      if (true)
	abort ();
    }
}

void
test_islessgreater(FLOAT x, FLOAT y, int true)
{
  if (__builtin_islessgreater(x, y))
    {
      if (! true)
	abort ();
    }
  else
    {
      if (true)
	abort ();
    }
}

#define NAN (0.0 / 0.0)

int
main()
{
  struct try
  {
    FLOAT x, y;
    unsigned unord : 1;
    unsigned lt : 1;
    unsigned le : 1;
    unsigned gt : 1;
    unsigned ge : 1;
    unsigned lg : 1;
  };

  static struct try const data[] =
  {
    { NAN, NAN, 1, 0, 0, 0, 0, 0 },
    { 0.0, NAN, 1, 0, 0, 0, 0, 0 },
    { NAN, 0.0, 1, 0, 0, 0, 0, 0 },
    { 0.0, 0.0, 0, 0, 1, 0, 1, 0 },
    { 1.0, 2.0, 0, 1, 1, 0, 0, 1 },
    { 2.0, 1.0, 0, 0, 0, 1, 1, 1 },
  };

  const int n = sizeof(data) / sizeof(data[0]);
  int i;

  for (i = 0; i < n; ++i)
    {
      test_isunordered (data[i].x, data[i].y, data[i].unord);
      test_isless (data[i].x, data[i].y, data[i].lt);
      test_islessequal (data[i].x, data[i].y, data[i].le);
      test_isgreater (data[i].x, data[i].y, data[i].gt);
      test_isgreaterequal (data[i].x, data[i].y, data[i].ge);
      test_islessgreater (data[i].x, data[i].y, data[i].lg);
    }

  exit (0);
}