@@ -20,6 +20,7 @@ limitations under the License.
2020
2121#include < gmock/gmock.h>
2222#include < gtest/gtest.h>
23+ #include " Eigen/Core"
2324#include " tensorflow/lite/kernels/test_util.h"
2425#include " tensorflow/lite/schema/schema_generated.h"
2526
@@ -240,5 +241,126 @@ TEST(MaximumOpTest, Int32WithBroadcastTest5D) {
240241 {TensorType_INT32, {1 }}, {TensorType_INT32, {3 , 1 , 2 , 1 , 1 }}, data1,
241242 data2, {1 , 0 , -1 , -2 , 2 , 2 });
242243}
244+
245+ TEST (MaximumOpTest, Float16Test) {
246+ std::initializer_list<Eigen::half> data1 = {
247+ Eigen::half (1.0 ), Eigen::half (0.0 ), Eigen::half (-1.0 ),
248+ Eigen::half (11.0 ), Eigen::half (-2.0 ), Eigen::half (-1.44 )};
249+ std::initializer_list<Eigen::half> data2 = {
250+ Eigen::half (-1.0 ), Eigen::half (0.0 ), Eigen::half (1.0 ),
251+ Eigen::half (12.0 ), Eigen::half (-3.0 ), Eigen::half (-1.43 )};
252+ TestModel<Eigen::half>(
253+ BuiltinOperator_MAXIMUM, {TensorType_FLOAT16, {3 , 1 , 2 }},
254+ {TensorType_FLOAT16, {3 , 1 , 2 }}, {TensorType_FLOAT16, {3 , 1 , 2 }}, data1,
255+ data2,
256+ {Eigen::half (1.0 ), Eigen::half (0.0 ), Eigen::half (1.0 ), Eigen::half (12.0 ),
257+ Eigen::half (-2.0 ), Eigen::half (-1.43 )});
258+ TestModel<Eigen::half>(
259+ BuiltinOperator_MINIMUM, {TensorType_FLOAT16, {3 , 1 , 2 }},
260+ {TensorType_FLOAT16, {3 , 1 , 2 }}, {TensorType_FLOAT16, {3 , 1 , 2 }}, data1,
261+ data2,
262+ {Eigen::half (-1.0 ), Eigen::half (0.0 ), Eigen::half (-1.0 ),
263+ Eigen::half (11.0 ), Eigen::half (-3.0 ), Eigen::half (-1.44 )});
264+ }
265+
266+ TEST (MaximumOpTest, BFloat16Test) {
267+ std::initializer_list<Eigen::bfloat16> data1 = {
268+ Eigen::bfloat16 (1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (-1.0 ),
269+ Eigen::bfloat16 (11.0 ), Eigen::bfloat16 (-2.0 ), Eigen::bfloat16 (-1.44 )};
270+ std::initializer_list<Eigen::bfloat16> data2 = {
271+ Eigen::bfloat16 (-1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (1.0 ),
272+ Eigen::bfloat16 (12.0 ), Eigen::bfloat16 (-3.0 ), Eigen::bfloat16 (-1.43 )};
273+ TestModel<Eigen::bfloat16>(
274+ BuiltinOperator_MAXIMUM, {TensorType_BFLOAT16, {3 , 1 , 2 }},
275+ {TensorType_BFLOAT16, {3 , 1 , 2 }}, {TensorType_BFLOAT16, {3 , 1 , 2 }}, data1,
276+ data2,
277+ {Eigen::bfloat16 (1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (1.0 ),
278+ Eigen::bfloat16 (12.0 ), Eigen::bfloat16 (-2.0 ), Eigen::bfloat16 (-1.43 )});
279+ TestModel<Eigen::bfloat16>(
280+ BuiltinOperator_MINIMUM, {TensorType_BFLOAT16, {3 , 1 , 2 }},
281+ {TensorType_BFLOAT16, {3 , 1 , 2 }}, {TensorType_BFLOAT16, {3 , 1 , 2 }}, data1,
282+ data2,
283+ {Eigen::bfloat16 (-1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (-1.0 ),
284+ Eigen::bfloat16 (11.0 ), Eigen::bfloat16 (-3.0 ), Eigen::bfloat16 (-1.44 )});
285+ }
286+
287+ TEST (MaximumOpTest, BFloat16WithBroadcastTest5DScalarY) {
288+ std::initializer_list<Eigen::bfloat16> data1 = {
289+ Eigen::bfloat16 (1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (-1.0 ),
290+ Eigen::bfloat16 (-2.0 ), Eigen::bfloat16 (3.0 ), Eigen::bfloat16 (11.0 )};
291+ std::initializer_list<Eigen::bfloat16> data2 = {Eigen::bfloat16 (2.0 )};
292+ TestModel<Eigen::bfloat16>(
293+ BuiltinOperator_MAXIMUM, {TensorType_BFLOAT16, {3 , 1 , 2 , 1 , 1 }},
294+ {TensorType_BFLOAT16, {1 }}, {TensorType_BFLOAT16, {3 , 1 , 2 , 1 , 1 }}, data1,
295+ data2,
296+ {Eigen::bfloat16 (2.0 ), Eigen::bfloat16 (2.0 ), Eigen::bfloat16 (2.0 ),
297+ Eigen::bfloat16 (2.0 ), Eigen::bfloat16 (3.0 ), Eigen::bfloat16 (11.0 )});
298+ TestModel<Eigen::bfloat16>(
299+ BuiltinOperator_MINIMUM, {TensorType_BFLOAT16, {3 , 1 , 2 , 1 , 1 }},
300+ {TensorType_BFLOAT16, {1 }}, {TensorType_BFLOAT16, {3 , 1 , 2 , 1 , 1 }}, data1,
301+ data2,
302+ {Eigen::bfloat16 (1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (-1.0 ),
303+ Eigen::bfloat16 (-2.0 ), Eigen::bfloat16 (2.0 ), Eigen::bfloat16 (2.0 )});
304+ }
305+
306+ TEST (MaximumOpTest, Float16WithBroadcastTest5DScalarY) {
307+ std::initializer_list<Eigen::half> data1 = {
308+ Eigen::half (1.0 ), Eigen::half (0.0 ), Eigen::half (-1.0 ),
309+ Eigen::half (-2.0 ), Eigen::half (3.0 ), Eigen::half (11.0 )};
310+ std::initializer_list<Eigen::half> data2 = {Eigen::half (2.0 )};
311+ TestModel<Eigen::half>(
312+ BuiltinOperator_MAXIMUM, {TensorType_FLOAT16, {3 , 1 , 2 , 1 , 1 }},
313+ {TensorType_FLOAT16, {1 }}, {TensorType_FLOAT16, {3 , 1 , 2 , 1 , 1 }}, data1,
314+ data2,
315+ {Eigen::half (2.0 ), Eigen::half (2.0 ), Eigen::half (2.0 ), Eigen::half (2.0 ),
316+ Eigen::half (3.0 ), Eigen::half (11.0 )});
317+ TestModel<Eigen::half>(
318+ BuiltinOperator_MINIMUM, {TensorType_FLOAT16, {3 , 1 , 2 , 1 , 1 }},
319+ {TensorType_FLOAT16, {1 }}, {TensorType_FLOAT16, {3 , 1 , 2 , 1 , 1 }}, data1,
320+ data2,
321+ {Eigen::half (1.0 ), Eigen::half (0.0 ), Eigen::half (-1.0 ), Eigen::half (-2.0 ),
322+ Eigen::half (2.0 ), Eigen::half (2.0 )});
323+ }
324+
325+ TEST (MaximumOpTest, Float16WithBroadcastTest5D) {
326+ std::initializer_list<Eigen::half> data1 = {
327+ Eigen::half (1.0 ), Eigen::half (0.0 ), Eigen::half (-1.0 ),
328+ Eigen::half (-2.0 ), Eigen::half (-1.44 ), Eigen::half (11.0 )};
329+ std::initializer_list<Eigen::half> data2 = {Eigen::half (0.5 ),
330+ Eigen::half (2.0 )};
331+ TestModel<Eigen::half>(
332+ BuiltinOperator_MAXIMUM, {TensorType_FLOAT16, {3 , 1 , 1 , 1 , 2 }},
333+ {TensorType_FLOAT16, {2 }}, {TensorType_FLOAT16, {3 , 1 , 1 , 1 , 2 }}, data1,
334+ data2,
335+ {Eigen::half (1.0 ), Eigen::half (2.0 ), Eigen::half (0.5 ), Eigen::half (2.0 ),
336+ Eigen::half (0.5 ), Eigen::half (11.0 )});
337+ TestModel<Eigen::half>(
338+ BuiltinOperator_MINIMUM, {TensorType_FLOAT16, {3 , 1 , 1 , 1 , 2 }},
339+ {TensorType_FLOAT16, {2 }}, {TensorType_FLOAT16, {3 , 1 , 1 , 1 , 2 }}, data1,
340+ data2,
341+ {Eigen::half (0.5 ), Eigen::half (0.0 ), Eigen::half (-1.0 ), Eigen::half (-2.0 ),
342+ Eigen::half (-1.44 ), Eigen::half (2.0 )});
343+ }
344+
345+ TEST (MaximumOpTest, BFloat16WithBroadcastTest5D) {
346+ std::initializer_list<Eigen::bfloat16> data1 = {
347+ Eigen::bfloat16 (1.0 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (-1.0 ),
348+ Eigen::bfloat16 (-2.0 ), Eigen::bfloat16 (-1.44 ), Eigen::bfloat16 (11.0 )};
349+ std::initializer_list<Eigen::bfloat16> data2 = {Eigen::bfloat16 (0.5 ),
350+ Eigen::bfloat16 (2.0 )};
351+ TestModel<Eigen::bfloat16>(
352+ BuiltinOperator_MAXIMUM, {TensorType_BFLOAT16, {3 , 1 , 1 , 1 , 2 }},
353+ {TensorType_BFLOAT16, {2 }}, {TensorType_BFLOAT16, {3 , 1 , 1 , 1 , 2 }}, data1,
354+ data2,
355+ {Eigen::bfloat16 (1.0 ), Eigen::bfloat16 (2.0 ), Eigen::bfloat16 (0.5 ),
356+ Eigen::bfloat16 (2.0 ), Eigen::bfloat16 (0.5 ), Eigen::bfloat16 (11.0 )});
357+ TestModel<Eigen::bfloat16>(
358+ BuiltinOperator_MINIMUM, {TensorType_BFLOAT16, {3 , 1 , 1 , 1 , 2 }},
359+ {TensorType_BFLOAT16, {2 }}, {TensorType_BFLOAT16, {3 , 1 , 1 , 1 , 2 }}, data1,
360+ data2,
361+ {Eigen::bfloat16 (0.5 ), Eigen::bfloat16 (0.0 ), Eigen::bfloat16 (-1.0 ),
362+ Eigen::bfloat16 (-2.0 ), Eigen::bfloat16 (-1.44 ), Eigen::bfloat16 (2.0 )});
363+ }
364+
243365} // namespace
244366} // namespace tflite
0 commit comments