@@ -6,39 +6,49 @@ struct constant_ops_tests {
66 T value = gen.next ();
77 kf::vec<T, 2 > vector = {gen.next (), gen.next ()};
88
9- ASSERT_EQ (kf::make_constant (5.0 ) + value, T (5.0 ) + value);
10- ASSERT_EQ (value + kf::make_constant (5.0 ), value + T (5.0 ));
11- ASSERT_EQ (kf::make_constant (5.0 ) + vector, T (5.0 ) + vector);
12- ASSERT_EQ (vector + kf::make_constant (5.0 ), vector + T (5.0 ));
9+ auto C = [](auto x) { return kf::make_constant (x); };
1310
14- ASSERT_EQ (kf::make_constant (5.0 ) - value, T (5.0 ) - value);
15- ASSERT_EQ (value - kf::make_constant (5.0 ), value - T (5.0 ));
16- ASSERT_EQ (kf::make_constant (5.0 ) - vector, T (5.0 ) - vector);
17- ASSERT_EQ (vector - kf::make_constant (5.0 ), vector - T (5.0 ));
11+ ASSERT_EQ (C (5.0 ) + value, T (5.0 ) + value);
12+ ASSERT_EQ (value + C (5.0 ), value + T (5.0 ));
13+ ASSERT_EQ (C (5.0 ) + vector, T (5.0 ) + vector);
14+ ASSERT_EQ (vector + C (5.0 ), vector + T (5.0 ));
1815
19- ASSERT_EQ (kf::make_constant (5.0 ) * value, T (5.0 ) * value);
20- ASSERT_EQ (value * kf::make_constant (5.0 ), value * T (5.0 ));
21- ASSERT_EQ (kf::make_constant (5.0 ) * vector, T (5.0 ) * vector);
22- ASSERT_EQ (vector * kf::make_constant (5.0 ), vector * T (5.0 ));
16+ ASSERT_EQ (C (5.0 ) - value, T (5.0 ) - value);
17+ ASSERT_EQ (value - C (5.0 ), value - T (5.0 ));
18+ ASSERT_EQ (C (5.0 ) - vector, T (5.0 ) - vector);
19+ ASSERT_EQ (vector - C (5.0 ), vector - T (5.0 ));
20+
21+ ASSERT_EQ (C (5.0 ) * value, T (5.0 ) * value);
22+ ASSERT_EQ (value * C (5.0 ), value * T (5.0 ));
23+ ASSERT_EQ (C (5.0 ) * vector, T (5.0 ) * vector);
24+ ASSERT_EQ (vector * C (5.0 ), vector * T (5.0 ));
2325
2426 // These results in division by zero for integers
25- // ASSERT_EQ(kf::make_constant (5.0) / value, T(5) / value);
26- // ASSERT_EQ(value / kf::make_constant (5.0), value / T(5));
27- // ASSERT_EQ(kf::make_constant (5.0) / vector, T(5) / vector);
28- // ASSERT_EQ(vector / kf::make_constant (5.0), vector / T(5));
27+ // ASSERT_EQ(C (5.0) / value, T(5) / value);
28+ // ASSERT_EQ(value / C (5.0), value / T(5));
29+ // ASSERT_EQ(C (5.0) / vector, T(5) / vector);
30+ // ASSERT_EQ(vector / C (5.0), vector / T(5));
2931 //
30- // ASSERT_EQ(kf::make_constant(5.0) % value, T(5) % value);
31- // ASSERT_EQ(value % kf::make_constant(5.0), value % T(5));
32- // ASSERT_EQ(kf::make_constant(5.0) % vector, T(5) % vector);
33- // ASSERT_EQ(vector % kf::make_constant(5.0), vector % T(5));
34-
35- ASSERT_EQ (kf::cast<double >(kf::make_constant (T (5.0 ))), kf::make_vec (5.0 ));
36- ASSERT_EQ (kf::cast<float >(kf::make_constant (T (5.0 ))), kf::make_vec (5 .0f ));
37- ASSERT_EQ (kf::cast<int >(kf::make_constant (T (5.0 ))), kf::make_vec (5 ));
38-
39- ASSERT_EQ (kf::cast<T>(kf::make_constant (double (5.0 ))), kf::make_vec (T (5.0 )));
40- ASSERT_EQ (kf::cast<T>(kf::make_constant (float (5.0 ))), kf::make_vec (T (5.0 )));
41- ASSERT_EQ (kf::cast<T>(kf::make_constant (int (5.0 ))), kf::make_vec (T (5.0 )));
32+ // ASSERT_EQ(C(5.0) % value, T(5) % value);
33+ // ASSERT_EQ(value % C(5.0), value % T(5));
34+ // ASSERT_EQ(C(5.0) % vector, T(5) % vector);
35+ // ASSERT_EQ(vector % C(5.0), vector % T(5));
36+
37+ ASSERT_EQ (kf::cast<double >(C (T (5.0 ))), kf::make_vec (5.0 ));
38+ ASSERT_EQ (kf::cast<float >(C (T (5.0 ))), kf::make_vec (5 .0f ));
39+ ASSERT_EQ (kf::cast<int >(C (T (5.0 ))), kf::make_vec (5 ));
40+
41+ ASSERT_EQ (kf::cast<T>(C (5.0 )), kf::make_vec (T (5.0 )));
42+ ASSERT_EQ (kf::cast<T>(C (5 .0f )), kf::make_vec (T (5.0 )));
43+ ASSERT_EQ (kf::cast<T>(C (5 )), kf::make_vec (T (5.0 )));
44+
45+ auto expected = kf::make_vec (T (30.0 ));
46+ ASSERT_EQ (kf::fma (T (5 ), C (5.0 ), C (5.0 )), expected);
47+ ASSERT_EQ (kf::fma (T (5 ), C (5 .0f ), C (5 .0f )), expected);
48+ ASSERT_EQ (kf::fma (T (5 ), C (5 ), C (5 )), expected);
49+ ASSERT_EQ (kf::fma (T (5 ), C (5 .0f ), C (5 )), expected);
50+ ASSERT_EQ (kf::fma (T (5 ), C (5.0 ), C (5 )), expected);
51+ ASSERT_EQ (kf::fma (T (5 ), C (5 .0f ), C (5.0 )), expected);
4252 }
4353};
4454
@@ -55,6 +65,14 @@ struct constant_eq_tests {
5565 ASSERT (kf::make_constant (double (5.0 )) == T (5.0 ));
5666 ASSERT (kf::make_constant (float (5.0 )) == T (5.0 ));
5767 ASSERT (kf::make_constant (int (5.0 )) == T (5.0 ));
68+
69+ ASSERT (kf::make_constant (T (5.0 )) != double (6.0 ));
70+ ASSERT (kf::make_constant (T (5.0 )) != float (6.0 ));
71+ ASSERT (kf::make_constant (T (5.0 )) != int (6.0 ));
72+
73+ ASSERT (kf::make_constant (double (5.0 )) != T (6.0 ));
74+ ASSERT (kf::make_constant (float (5.0 )) != T (6.0 ));
75+ ASSERT (kf::make_constant (int (5.0 )) != T (6.0 ));
5876 }
5977};
6078
0 commit comments