1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_HARDWARE_NEURALNETWORKS_V1_1_GENERATED_TEST_HARNESS_H
18 #define ANDROID_HARDWARE_NEURALNETWORKS_V1_1_GENERATED_TEST_HARNESS_H
19 
20 #include <android/hardware/neuralnetworks/1.1/IDevice.h>
21 #include "1.0/Utils.h"
22 #include "TestHarness.h"
23 #include "VtsHalNeuralnetworks.h"
24 
25 namespace android::hardware::neuralnetworks::V1_1::vts::functional {
26 
27 using NamedModel = Named<const test_helper::TestModel*>;
28 using GeneratedTestParam = std::tuple<NamedDevice, NamedModel>;
29 
30 class GeneratedTestBase : public testing::TestWithParam<GeneratedTestParam> {
31   protected:
32     void SetUp() override;
33     const sp<IDevice> kDevice = getData(std::get<NamedDevice>(GetParam()));
34     const test_helper::TestModel& kTestModel = *getData(std::get<NamedModel>(GetParam()));
35 };
36 
37 using FilterFn = std::function<bool(const test_helper::TestModel&)>;
38 std::vector<NamedModel> getNamedModels(const FilterFn& filter);
39 
40 using FilterNameFn = std::function<bool(const std::string&)>;
41 std::vector<NamedModel> getNamedModels(const FilterNameFn& filter);
42 
43 std::string printGeneratedTest(const testing::TestParamInfo<GeneratedTestParam>& info);
44 
45 #define INSTANTIATE_GENERATED_TEST(TestSuite, filter)                                     \
46     GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(TestSuite);                             \
47     INSTANTIATE_TEST_SUITE_P(TestGenerated, TestSuite,                                    \
48                              testing::Combine(testing::ValuesIn(getNamedDevices()),       \
49                                               testing::ValuesIn(getNamedModels(filter))), \
50                              printGeneratedTest)
51 
52 // Tag for the validation tests, instantiated in VtsHalNeuralnetworks.cpp.
53 // TODO: Clean up the hierarchy for ValidationTest.
54 class ValidationTest : public GeneratedTestBase {};
55 
56 Model createModel(const test_helper::TestModel& testModel);
57 
58 }  // namespace android::hardware::neuralnetworks::V1_1::vts::functional
59 
60 #endif  // ANDROID_HARDWARE_NEURALNETWORKS_V1_1_GENERATED_TEST_HARNESS_H
61