1 /* Test various operators on __fp16 and mixed __fp16/float operands. */
5 #define CHECK(e,r) assert ((e) == r)
6 #define CHECK2(e,r) (assert ((e) == r), temp = (e), assert (temp == r))
7 #define TEST(e) assert (e)
8 #define TESTNOT(e) assert (!(e))
10 volatile __fp16 h0 = 0.0;
11 volatile __fp16 h1 = 1.0;
12 volatile __fp16 h42 = 42.0;
13 volatile __fp16 hm2 = -2.0;
16 volatile float f0 = 0.0;
17 volatile float f1 = 1.0;
18 volatile float f42 = 42.0;
19 volatile float fm2 = -2.0;
41 CHECK2 (h42 * hm2, -84.0);
42 CHECK2 (h42 * (__fp16) -2.0, -84.0);
43 CHECK2 (h42 * fm2, -84.0);
44 CHECK2 (f42 * hm2, -84.0);
46 CHECK2 (h42 / hm2, -21.0);
47 CHECK2 (h42 / (__fp16) -2.0, -21.0);
48 CHECK2 (h42 / fm2, -21.0);
49 CHECK2 (f42 / hm2, -21.0);
51 CHECK2 (hm2 + h42, 40.0);
52 CHECK2 ((__fp16)-2.0 + h42, 40.0);
53 CHECK2 (hm2 + f42, 40.0);
54 CHECK2 (fm2 + h42, 40.0);
56 CHECK2 (hm2 - h42, -44.0);
57 CHECK2 ((__fp16)-2.0 - h42, -44.0);
58 CHECK2 (hm2 - f42, -44.0);
59 CHECK2 (fm2 - h42, -44.0);
62 TEST (hm2 < (__fp16)42.0);
67 TEST ((__fp16)42.0 > hm2);
72 TEST (hm2 <= (__fp16)42.0);
77 TEST (h42 >= (__fp16)-2.0);
83 TEST (h1 == (__fp16)1.0);
89 TESTNOT (h1 != (__fp16)1.0);
93 CHECK2 ((h1 ? hm2 : h42), -2.0);
94 CHECK2 ((h0 ? hm2 : h42), 42.0);
96 CHECK (h0 = h42, 42.0);
98 CHECK (h0 = (__fp16)-2.0, -2.0);
100 CHECK (h0 = f0, 0.0);
103 CHECK (h0 += h1, 1.0);
105 CHECK (h0 += (__fp16)1.0, 2.0);
107 CHECK (h0 += fm2, 0.0);
110 CHECK (h0 -= h1, -1.0);
112 CHECK (h0 -= (__fp16)1.0, -2.0);
114 CHECK (h0 -= fm2, 0.0);
118 CHECK (h0 *= hm2, 4.0);
120 CHECK (h0 *= (__fp16)-2.0, -8.0);
122 CHECK (h0 *= fm2, 16.0);
125 CHECK (h0 /= hm2, -8.0);
127 CHECK (h0 /= (__fp16)-2.0, 4.0);
129 CHECK (h0 /= fm2, -2.0);
132 CHECK ((h0, h1), 1.0);