Skip to content

Commit 8f08b8b

Browse files
kirklandsignfacebook-github-bot
authored andcommitted
Add runtime/kernel test (#3954)
Summary: Migrate operator_registry_test, kernel_runtime_context_test, operator_registry_max_kernel_num_test. TODO: Migrate kernel_double_registration_test and test_kernel_manual_registration. It requires setting up new specialized ops library target. Pull Request resolved: #3954 Test Plan: `sh test/run_oss_cpp_tests.sh runtime/kernel/test/` Reviewed By: shoumikhin Differential Revision: D58476276 Pulled By: kirklandsign fbshipit-source-id: fd61f13fe41cf6abc5937e1aeff66d2f6e690475
1 parent 70a4d98 commit 8f08b8b

File tree

3 files changed

+85
-32
lines changed

3 files changed

+85
-32
lines changed

runtime/kernel/test/CMakeLists.txt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Copyright (c) Meta Platforms, Inc. and affiliates.
2+
# All rights reserved.
3+
#
4+
# This source code is licensed under the BSD-style license found in the
5+
# LICENSE file in the root directory of this source tree.
6+
7+
#
8+
# This file should be formatted with
9+
# ~~~
10+
# cmake-format -i CMakeLists.txt
11+
# ~~~
12+
# It should also be cmake-lint clean.
13+
#
14+
15+
cmake_minimum_required(VERSION 3.19)
16+
project(runtime_kernel_test)
17+
18+
# Use C++17 for test.
19+
set(CMAKE_CXX_STANDARD 17)
20+
21+
set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
22+
23+
include(${EXECUTORCH_ROOT}/build/Test.cmake)
24+
25+
add_executable(operator_registry_test operator_registry_test.cpp)
26+
target_link_libraries(
27+
operator_registry_test GTest::gtest GTest::gtest_main GTest::gmock executorch
28+
)
29+
target_include_directories(operator_registry_test PRIVATE ${EXECUTORCH_ROOT}/..)
30+
add_test(ExecuTorchTest operator_registry_test)
31+
32+
add_executable(kernel_runtime_context_test kernel_runtime_context_test.cpp)
33+
target_link_libraries(
34+
kernel_runtime_context_test GTest::gtest GTest::gtest_main GTest::gmock
35+
executorch
36+
)
37+
target_include_directories(
38+
kernel_runtime_context_test PRIVATE ${EXECUTORCH_ROOT}/..
39+
)
40+
add_test(ExecuTorchTest kernel_runtime_context_test)
41+
42+
add_executable(
43+
operator_registry_max_kernel_num_test
44+
operator_registry_max_kernel_num_test.cpp
45+
../operator_registry.cpp
46+
../../core/evalue.cpp
47+
../../platform/abort.cpp
48+
../../platform/log.cpp
49+
../../platform/runtime.cpp
50+
../../platform/target/Posix.cpp
51+
)
52+
target_link_libraries(
53+
operator_registry_max_kernel_num_test GTest::gtest GTest::gtest_main
54+
GTest::gmock
55+
)
56+
target_compile_definitions(
57+
operator_registry_max_kernel_num_test PRIVATE "-DMAX_KERNEL_NUM=1"
58+
)
59+
target_include_directories(
60+
operator_registry_max_kernel_num_test PRIVATE ${EXECUTORCH_ROOT}/..
61+
)
62+
add_test(ExecuTorchTest operator_registry_max_kernel_num_test)
63+
64+
# TODO: Migrate kernel_double_registration_test and
65+
# test_kernel_manual_registration. Make sure dtype selective build is working.

runtime/kernel/test/operator_registry_test.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ TEST_F(OperatorRegistryTest, RegisterTwoKernels) {
112112
make_kernel_key({{ScalarType::Float, {0, 1, 2, 3}}}, buf_float_contiguous);
113113
KernelKey key_2 = KernelKey(buf_float_contiguous);
114114
Kernel kernel_1 =
115-
Kernel("test::boo", key_1, [](RuntimeContext& context, EValue** stack) {
115+
Kernel("test::bar", key_1, [](RuntimeContext& context, EValue** stack) {
116116
(void)context;
117117
*(stack[0]) = Scalar(100);
118118
});
119119
Kernel kernel_2 =
120-
Kernel("test::boo", key_2, [](RuntimeContext& context, EValue** stack) {
120+
Kernel("test::bar", key_2, [](RuntimeContext& context, EValue** stack) {
121121
(void)context;
122122
*(stack[0]) = Scalar(50);
123123
});
@@ -132,11 +132,11 @@ TEST_F(OperatorRegistryTest, RegisterTwoKernels) {
132132
TensorMeta meta_2[] = {TensorMeta(ScalarType::Float, dim_order_type)};
133133
ArrayRef<TensorMeta> user_kernel_key_2 = ArrayRef<TensorMeta>(meta_2, 1);
134134

135-
EXPECT_TRUE(hasOpsFn("test::boo", user_kernel_key_1));
136-
EXPECT_TRUE(hasOpsFn("test::boo", user_kernel_key_2));
135+
EXPECT_TRUE(hasOpsFn("test::bar", user_kernel_key_1));
136+
EXPECT_TRUE(hasOpsFn("test::bar", user_kernel_key_2));
137137

138138
// no fallback kernel is registered
139-
EXPECT_FALSE(hasOpsFn("test::boo", {}));
139+
EXPECT_FALSE(hasOpsFn("test::bar", {}));
140140

141141
EValue values[1];
142142
values[0] = Scalar(0);
@@ -145,15 +145,15 @@ TEST_F(OperatorRegistryTest, RegisterTwoKernels) {
145145
RuntimeContext context{};
146146

147147
// test kernel_1
148-
OpFunction func_1 = getOpsFn("test::boo", user_kernel_key_1);
148+
OpFunction func_1 = getOpsFn("test::bar", user_kernel_key_1);
149149
func_1(context, evalues);
150150

151151
auto val_1 = values[0].toScalar().to<int64_t>();
152152
ASSERT_EQ(val_1, 100);
153153

154154
// test kernel_2
155155
values[0] = Scalar(0);
156-
OpFunction func_2 = getOpsFn("test::boo", user_kernel_key_2);
156+
OpFunction func_2 = getOpsFn("test::bar", user_kernel_key_2);
157157
func_2(context, evalues);
158158

159159
auto val_2 = values[0].toScalar().to<int64_t>();
@@ -166,12 +166,12 @@ TEST_F(OperatorRegistryTest, DoubleRegisterKernelsDies) {
166166
KernelKey key = KernelKey(buf_long_contiguous);
167167

168168
Kernel kernel_1 =
169-
Kernel("test::boo", key, [](RuntimeContext& context, EValue** stack) {
169+
Kernel("test::baz", key, [](RuntimeContext& context, EValue** stack) {
170170
(void)context;
171171
*(stack[0]) = Scalar(100);
172172
});
173173
Kernel kernel_2 =
174-
Kernel("test::boo", key, [](RuntimeContext& context, EValue** stack) {
174+
Kernel("test::baz", key, [](RuntimeContext& context, EValue** stack) {
175175
(void)context;
176176
*(stack[0]) = Scalar(50);
177177
});
@@ -187,7 +187,7 @@ TEST_F(OperatorRegistryTest, ExecutorChecksKernel) {
187187
KernelKey key = KernelKey(buf_long_contiguous);
188188

189189
Kernel kernel_1 =
190-
Kernel("test::boo", key, [](RuntimeContext& context, EValue** stack) {
190+
Kernel("test::qux", key, [](RuntimeContext& context, EValue** stack) {
191191
(void)context;
192192
*(stack[0]) = Scalar(100);
193193
});
@@ -198,7 +198,7 @@ TEST_F(OperatorRegistryTest, ExecutorChecksKernel) {
198198
auto dim_order_type = ArrayRef<Tensor::DimOrderType>(dims, 4);
199199
TensorMeta meta[] = {TensorMeta(ScalarType::Long, dim_order_type)};
200200
ArrayRef<TensorMeta> user_kernel_key_1 = ArrayRef<TensorMeta>(meta, 1);
201-
EXPECT_TRUE(hasOpsFn("test::boo", user_kernel_key_1));
201+
EXPECT_TRUE(hasOpsFn("test::qux", user_kernel_key_1));
202202

203203
Tensor::DimOrderType dims_channel_first[] = {0, 3, 1, 2};
204204
auto dim_order_type_channel_first =
@@ -207,11 +207,11 @@ TEST_F(OperatorRegistryTest, ExecutorChecksKernel) {
207207
TensorMeta(ScalarType::Long, dim_order_type_channel_first)};
208208
ArrayRef<TensorMeta> user_kernel_key_2 =
209209
ArrayRef<TensorMeta>(meta_channel_first, 1);
210-
EXPECT_FALSE(hasOpsFn("test::boo", user_kernel_key_2));
210+
EXPECT_FALSE(hasOpsFn("test::qux", user_kernel_key_2));
211211

212212
TensorMeta meta_float[] = {TensorMeta(ScalarType::Float, dim_order_type)};
213213
ArrayRef<TensorMeta> user_kernel_key_3 = ArrayRef<TensorMeta>(meta_float, 1);
214-
EXPECT_FALSE(hasOpsFn("test::boo", ArrayRef<TensorMeta>(user_kernel_key_3)));
214+
EXPECT_FALSE(hasOpsFn("test::qux", ArrayRef<TensorMeta>(user_kernel_key_3)));
215215
}
216216

217217
TEST_F(OperatorRegistryTest, ExecutorUsesKernel) {
@@ -220,7 +220,7 @@ TEST_F(OperatorRegistryTest, ExecutorUsesKernel) {
220220
KernelKey key = KernelKey(buf_long_contiguous);
221221

222222
Kernel kernel_1 =
223-
Kernel("test::boo", key, [](RuntimeContext& context, EValue** stack) {
223+
Kernel("test::quux", key, [](RuntimeContext& context, EValue** stack) {
224224
(void)context;
225225
*(stack[0]) = Scalar(100);
226226
});
@@ -231,9 +231,9 @@ TEST_F(OperatorRegistryTest, ExecutorUsesKernel) {
231231
auto dim_order_type = ArrayRef<Tensor::DimOrderType>(dims, 4);
232232
TensorMeta meta[] = {TensorMeta(ScalarType::Long, dim_order_type)};
233233
ArrayRef<TensorMeta> user_kernel_key_1 = ArrayRef<TensorMeta>(meta, 1);
234-
EXPECT_TRUE(hasOpsFn("test::boo", ArrayRef<TensorMeta>(meta)));
234+
EXPECT_TRUE(hasOpsFn("test::quux", ArrayRef<TensorMeta>(meta)));
235235

236-
OpFunction func = getOpsFn("test::boo", ArrayRef<TensorMeta>(meta));
236+
OpFunction func = getOpsFn("test::quux", ArrayRef<TensorMeta>(meta));
237237

238238
EValue values[1];
239239
values[0] = Scalar(0);
@@ -248,17 +248,17 @@ TEST_F(OperatorRegistryTest, ExecutorUsesKernel) {
248248

249249
TEST_F(OperatorRegistryTest, ExecutorUsesFallbackKernel) {
250250
Kernel kernel_1 = Kernel(
251-
"test::boo", KernelKey{}, [](RuntimeContext& context, EValue** stack) {
251+
"test::corge", KernelKey{}, [](RuntimeContext& context, EValue** stack) {
252252
(void)context;
253253
*(stack[0]) = Scalar(100);
254254
});
255255
auto s1 = register_kernels({kernel_1});
256256
EXPECT_EQ(s1, torch::executor::Error::Ok);
257257

258-
EXPECT_TRUE(hasOpsFn("test::boo"));
259-
EXPECT_TRUE(hasOpsFn("test::boo", ArrayRef<TensorMeta>()));
258+
EXPECT_TRUE(hasOpsFn("test::corge"));
259+
EXPECT_TRUE(hasOpsFn("test::corge", ArrayRef<TensorMeta>()));
260260

261-
OpFunction func = getOpsFn("test::boo", ArrayRef<TensorMeta>());
261+
OpFunction func = getOpsFn("test::corge", ArrayRef<TensorMeta>());
262262

263263
EValue values[1];
264264
values[0] = Scalar(0);

runtime/kernel/test/targets.bzl

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,6 @@ def define_common_targets():
3737
define_static_targets = True,
3838
)
3939

40-
executorch_generated_lib(
41-
name = "test_generated_lib_1",
42-
deps = [
43-
":executorch_all_ops",
44-
"//executorch/kernels/portable:operators",
45-
],
46-
functions_yaml_target = "//executorch/kernels/portable:functions.yaml",
47-
visibility = [
48-
"//executorch/...",
49-
],
50-
)
51-
5240
runtime.export_file(
5341
name = "functions.yaml",
5442
)

0 commit comments

Comments
 (0)