1 /*
2 pr39501.c from the execute part of the gcc torture tests.
3 */
4
5 #include <testfwk.h>
6
7 #ifdef __SDCC
8 #pragma std_c99
9 #pragma disable_warning 93
10 #endif
11
12 /* { dg-options "-ffast-math" } */
13 #define min1(a,b) ((a) < (b) ? (a) : (b))
14 #define max1(a,b) ((a) > (b) ? (a) : (b))
15
16 #define min2(a,b) ((a) <= (b) ? (a) : (b))
17 #define max2(a,b) ((a) >= (b) ? (a) : (b))
18
19 #define F(type,n) \
20 type type##_##n(type a, type b) \
21 { \
22 return n(a, b); \
23 }
24
25 #ifndef __SDCC_pdk14 // Lack of memory
F(float,min1)26 F(float,min1)
27 F(float,min2)
28 F(float,max1)
29 F(float,max2)
30
31 F(double,min1)
32 F(double,min2)
33 F(double,max1)
34 F(double,max2)
35 #endif
36
37 void
38 testTortureExecute (void)
39 {
40 #if !defined(__SDCC_pdk14) && !defined (__SDCC_pdk15) // Lack of memory
41 if (float_min1(0.f, -1.f) != -1.f) ASSERT (0);
42 if (float_min1(-1.f, 0.f) != -1.f) ASSERT (0);
43 if (float_min1(0.f, 1.f) != 0.f) ASSERT (0);
44 if (float_min1(1.f, 0.f) != 0.f) ASSERT (0);
45 if (float_min1(-1.f, 1.f) != -1.f) ASSERT (0);
46 if (float_min1(1.f, -1.f) != -1.f) ASSERT (0);
47
48 if (float_max1(0.f, -1.f) != 0.f) ASSERT (0);
49 if (float_max1(-1.f, 0.f) != 0.f) ASSERT (0);
50 if (float_max1(0.f, 1.f) != 1.f) ASSERT (0);
51 if (float_max1(1.f, 0.f) != 1.f) ASSERT (0);
52 if (float_max1(-1.f, 1.f) != 1.f) ASSERT (0);
53 if (float_max1(1.f, -1.f) != 1.f) ASSERT (0);
54
55 if (float_min2(0.f, -1.f) != -1.f) ASSERT (0);
56 if (float_min2(-1.f, 0.f) != -1.f) ASSERT (0);
57 if (float_min2(0.f, 1.f) != 0.f) ASSERT (0);
58 if (float_min2(1.f, 0.f) != 0.f) ASSERT (0);
59 if (float_min2(-1.f, 1.f) != -1.f) ASSERT (0);
60 if (float_min2(1.f, -1.f) != -1.f) ASSERT (0);
61
62 if (float_max2(0.f, -1.f) != 0.f) ASSERT (0);
63 if (float_max2(-1.f, 0.f) != 0.f) ASSERT (0);
64 if (float_max2(0.f, 1.f) != 1.f) ASSERT (0);
65 if (float_max2(1.f, 0.f) != 1.f) ASSERT (0);
66 if (float_max2(-1.f, 1.f) != 1.f) ASSERT (0);
67 if (float_max2(1.f, -1.f) != 1.f) ASSERT (0);
68
69 if (double_min1(0., -1.) != -1.) ASSERT (0);
70 if (double_min1(-1., 0.) != -1.) ASSERT (0);
71 if (double_min1(0., 1.) != 0.) ASSERT (0);
72 if (double_min1(1., 0.) != 0.) ASSERT (0);
73 if (double_min1(-1., 1.) != -1.) ASSERT (0);
74 if (double_min1(1., -1.) != -1.) ASSERT (0);
75
76 if (double_max1(0., -1.) != 0.) ASSERT (0);
77 if (double_max1(-1., 0.) != 0.) ASSERT (0);
78 if (double_max1(0., 1.) != 1.) ASSERT (0);
79 if (double_max1(1., 0.) != 1.) ASSERT (0);
80 if (double_max1(-1., 1.) != 1.) ASSERT (0);
81 if (double_max1(1., -1.) != 1.) ASSERT (0);
82
83 if (double_min2(0., -1.) != -1.) ASSERT (0);
84 if (double_min2(-1., 0.) != -1.) ASSERT (0);
85 if (double_min2(0., 1.) != 0.) ASSERT (0);
86 if (double_min2(1., 0.) != 0.) ASSERT (0);
87 if (double_min2(-1., 1.) != -1.) ASSERT (0);
88 if (double_min2(1., -1.) != -1.) ASSERT (0);
89
90 if (double_max2(0., -1.) != 0.) ASSERT (0);
91 if (double_max2(-1., 0.) != 0.) ASSERT (0);
92 if (double_max2(0., 1.) != 1.) ASSERT (0);
93 if (double_max2(1., 0.) != 1.) ASSERT (0);
94 if (double_max2(-1., 1.) != 1.) ASSERT (0);
95 if (double_max2(1., -1.) != 1.) ASSERT (0);
96 #endif
97 return;
98 }
99
100