diff --git a/kernels/optimized/cpu/op_neg.cpp b/kernels/optimized/cpu/op_neg.cpp index c46a004e0b3..fa414799991 100644 --- a/kernels/optimized/cpu/op_neg.cpp +++ b/kernels/optimized/cpu/op_neg.cpp @@ -26,7 +26,7 @@ Tensor& opt_neg_out(KernelRuntimeContext& ctx, const Tensor& in, Tensor& out) { out, "Failed to resize output tensor."); - ET_SWITCH_REAL_TYPES(in.scalar_type(), ctx, "neg.out", CTYPE, [&] { + ET_SWITCH_REALHBF16_TYPES(in.scalar_type(), ctx, "neg.out", CTYPE, [&] { using Vec = executorch::vec::Vectorized; executorch::vec::map( [](Vec x) { return x.neg(); }, diff --git a/kernels/portable/cpu/op_abs.cpp b/kernels/portable/cpu/op_abs.cpp index 5d0fcbaaa45..df530bcd1fa 100644 --- a/kernels/portable/cpu/op_abs.cpp +++ b/kernels/portable/cpu/op_abs.cpp @@ -31,7 +31,7 @@ Tensor& abs_out(KernelRuntimeContext& ctx, const Tensor& in, Tensor& out) { ET_KERNEL_CHECK( ctx, tensors_have_same_dim_order(in, out), InvalidArgument, out); - ET_SWITCH_REAL_TYPES(in.scalar_type(), ctx, "abs.out", CTYPE, [&] { + ET_SWITCH_REALHBF16_TYPES(in.scalar_type(), ctx, "abs.out", CTYPE, [&] { apply_unary_map_fn( [](const CTYPE val_in) { if (val_in < 0) { diff --git a/kernels/portable/cpu/op_neg.cpp b/kernels/portable/cpu/op_neg.cpp index a4e6a8ad256..339bfd8a445 100644 --- a/kernels/portable/cpu/op_neg.cpp +++ b/kernels/portable/cpu/op_neg.cpp @@ -33,7 +33,7 @@ Tensor& neg_out(KernelRuntimeContext& ctx, const Tensor& in, Tensor& out) { ET_KERNEL_CHECK( ctx, tensors_have_same_dim_order(in, out), InvalidArgument, out); - ET_SWITCH_REAL_TYPES(in.scalar_type(), ctx, "neg.out", CTYPE, [&] { + ET_SWITCH_REALHBF16_TYPES(in.scalar_type(), ctx, "neg.out", CTYPE, [&] { apply_unary_map_fn( [](const CTYPE val_in) { return static_cast(-val_in); }, in.const_data_ptr(), diff --git a/kernels/test/op_abs_test.cpp b/kernels/test/op_abs_test.cpp index f596d586d90..bdcf6be5cae 100644 --- a/kernels/test/op_abs_test.cpp +++ b/kernels/test/op_abs_test.cpp @@ -24,19 +24,27 @@ class OpAbsTest : public OperatorTest { Tensor& op_abs_out(const Tensor& self, Tensor& out) { return torch::executor::aten::abs_outf(context_, self, out); } -}; -TEST_F(OpAbsTest, SanityCheck) { - TensorFactory tf; + template + void run_smoke_test() { + TensorFactory tf; + + Tensor in = tf.make({1, 7}, {-3.0, -2.5, -1.01, 0.0, 1.01, 2.5, 3.0}); + Tensor out = tf.zeros({1, 7}); + Tensor expected = tf.make({1, 7}, {3.0, 2.5, 1.01, 0.0, 1.01, 2.5, 3.0}); - Tensor in = tf.make({1, 7}, {-3.0, -2.5, -1.01, 0.0, 1.01, 2.5, 3.0}); - Tensor out = tf.zeros({1, 7}); - Tensor expected = tf.make({1, 7}, {3.0, 2.5, 1.01, 0.0, 1.01, 2.5, 3.0}); + Tensor ret = op_abs_out(in, out); - Tensor ret = op_abs_out(in, out); + EXPECT_TENSOR_EQ(out, ret); + EXPECT_TENSOR_EQ(out, expected); + } +}; - EXPECT_TENSOR_EQ(out, ret); - EXPECT_TENSOR_EQ(out, expected); +TEST_F(OpAbsTest, SmokeTest) { +#define RUN_SMOKE_TEST(ctype, dtype) run_smoke_test(); + // TODO: cover all REALHBF16 types with generalized unary function test + // harness. + ET_FORALL_FLOATHBF16_TYPES(RUN_SMOKE_TEST); } TEST_F(OpAbsTest, MemoryFormatCheck) { diff --git a/kernels/test/op_neg_test.cpp b/kernels/test/op_neg_test.cpp index 09bbb8b6af1..a87b9feca15 100644 --- a/kernels/test/op_neg_test.cpp +++ b/kernels/test/op_neg_test.cpp @@ -24,17 +24,25 @@ class OpNegTest : public OperatorTest { Tensor& op_neg_out(const Tensor& self, Tensor& out) { return torch::executor::aten::neg_outf(context_, self, out); } -}; -TEST_F(OpNegTest, SanityCheck) { - TensorFactory tf; + template + void run_smoke_test() { + TensorFactory tf; + + Tensor in = tf.make({1, 7}, {-3.0, -2.5, -1.01, 0.0, 1.01, 2.5, 3.0}); + Tensor out = tf.zeros({1, 7}); + Tensor expected = tf.make({1, 7}, {3.0, 2.5, 1.01, 0.0, -1.01, -2.5, -3.0}); - Tensor in = tf.make({1, 7}, {-3.0, -2.5, -1.01, 0.0, 1.01, 2.5, 3.0}); - Tensor out = tf.zeros({1, 7}); - Tensor expected = tf.make({1, 7}, {3.0, 2.5, 1.01, 0.0, -1.01, -2.5, -3.0}); + Tensor ret = op_neg_out(in, out); - Tensor ret = op_neg_out(in, out); + EXPECT_TENSOR_EQ(out, ret); + EXPECT_TENSOR_EQ(out, expected); + } +}; - EXPECT_TENSOR_EQ(out, ret); - EXPECT_TENSOR_EQ(out, expected); +TEST_F(OpNegTest, SmokeTest) { +#define RUN_SMOKE_TEST(ctype, dtype) run_smoke_test(); + // TODO: cover all REALHBF16 types with generalized unary function test + // harness. + ET_FORALL_FLOATHBF16_TYPES(RUN_SMOKE_TEST); }