Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b19ebb5 authored by Michael Butler's avatar Michael Butler Committed by Android (Google) Code Review
Browse files

Merge "Change NNAPI VTS to use TEST_P to iterate across all service instances"

parents d47b974c 7076f629
Loading
Loading
Loading
Loading
+6 −27
Original line number Diff line number Diff line
@@ -40,10 +40,11 @@ cc_library_static {
    ],
}

cc_defaults {
    name: "VtsHalNeuralNetworksV1_0TargetTestDefaults",
cc_test {
    name: "VtsHalNeuralnetworksV1_0TargetTest",
    defaults: ["VtsHalTargetTestDefaults"],
    srcs: [
        "BasicTests.cpp",
        "TestAssertions.cpp",
        "ValidateModel.cpp",
        "ValidateRequest.cpp",
@@ -64,33 +65,11 @@ cc_defaults {
        "libneuralnetworks_utils",
        "VtsHalNeuralNetworksV1_0_utils",
    ],
    header_libs: [
        "libneuralnetworks_headers",
    ],
    test_suites: ["general-tests"],
}

cc_test {
    name: "VtsHalNeuralnetworksV1_0TargetTest",
    defaults: ["VtsHalNeuralNetworksV1_0TargetTestDefaults"],
    srcs: [
        "BasicTests.cpp",
    ],
    whole_static_libs: [
        "neuralnetworks_generated_V1_0_example",
    ],
}

cc_test {
    name: "PresubmitHalNeuralnetworksV1_0TargetTest",
    defaults: ["VtsHalNeuralNetworksV1_0TargetTestDefaults"],
    srcs: [
        "BasicTests.cpp",
    ],
    whole_static_libs: [
        "neuralnetworks_generated_V1_0_example",
    ],
    cflags: [
        "-DPRESUBMIT_NOT_VTS",
    header_libs: [
        "libneuralnetworks_headers",
    ],
    test_suites: ["general-tests"],
}
+3 −3
Original line number Diff line number Diff line
@@ -21,17 +21,17 @@
namespace android::hardware::neuralnetworks::V1_0::vts::functional {

// create device test
TEST_F(NeuralnetworksHidlTest, CreateDevice) {}
TEST_P(NeuralnetworksHidlTest, CreateDevice) {}

// status test
TEST_F(NeuralnetworksHidlTest, StatusTest) {
TEST_P(NeuralnetworksHidlTest, StatusTest) {
    Return<DeviceStatus> status = kDevice->getStatus();
    ASSERT_TRUE(status.isOk());
    EXPECT_EQ(DeviceStatus::AVAILABLE, static_cast<DeviceStatus>(status));
}

// initialization
TEST_F(NeuralnetworksHidlTest, GetCapabilitiesTest) {
TEST_P(NeuralnetworksHidlTest, GetCapabilitiesTest) {
    Return<void> ret =
            kDevice->getCapabilities([](ErrorStatus status, const Capabilities& capabilities) {
                EXPECT_EQ(ErrorStatus::NONE, status);
+14 −0
Original line number Diff line number Diff line
@@ -148,6 +148,20 @@ void Execute(const sp<IDevice>& device, const TestModel& testModel) {
    checkResults(testModel, outputs);
}

void GeneratedTestBase::SetUp() {
    testing::TestWithParam<GeneratedTestParam>::SetUp();
    ASSERT_NE(kDevice, nullptr);
}

std::vector<NamedModel> getNamedModels(const FilterFn& filter) {
    return TestModelManager::get().getTestModels(filter);
}

std::string printGeneratedTest(const testing::TestParamInfo<GeneratedTestParam>& info) {
    const auto& [namedDevice, namedModel] = info.param;
    return gtestCompliantName(getName(namedDevice) + "_" + getName(namedModel));
}

// Tag for the generated tests
class GeneratedTest : public GeneratedTestBase {};

+19 −10
Original line number Diff line number Diff line
@@ -18,29 +18,38 @@
#define ANDROID_HARDWARE_NEURALNETWORKS_V1_0_GENERATED_TEST_HARNESS_H

#include <android/hardware/neuralnetworks/1.0/IDevice.h>
#include <functional>
#include "TestHarness.h"
#include "VtsHalNeuralnetworks.h"

namespace android::hardware::neuralnetworks::V1_0::vts::functional {

class GeneratedTestBase
    : public NeuralnetworksHidlTest,
      public testing::WithParamInterface<test_helper::TestModelManager::TestParam> {
using NamedModel = Named<const test_helper::TestModel*>;
using GeneratedTestParam = std::tuple<NamedDevice, NamedModel>;

class GeneratedTestBase : public testing::TestWithParam<GeneratedTestParam> {
  protected:
    const test_helper::TestModel& kTestModel = *GetParam().second;
    void SetUp() override;
    const sp<IDevice> kDevice = getData(std::get<NamedDevice>(GetParam()));
    const test_helper::TestModel& kTestModel = *getData(std::get<NamedModel>(GetParam()));
};

using FilterFn = std::function<bool(const test_helper::TestModel&)>;
std::vector<NamedModel> getNamedModels(const FilterFn& filter);

std::string printGeneratedTest(const testing::TestParamInfo<GeneratedTestParam>& info);

#define INSTANTIATE_GENERATED_TEST(TestSuite, filter)                                     \
    INSTANTIATE_TEST_SUITE_P(                                                                \
            TestGenerated, TestSuite,                                                        \
            testing::ValuesIn(::test_helper::TestModelManager::get().getTestModels(filter)), \
            [](const auto& info) { return info.param.first; })
    INSTANTIATE_TEST_SUITE_P(TestGenerated, TestSuite,                                    \
                             testing::Combine(testing::ValuesIn(getNamedDevices()),       \
                                              testing::ValuesIn(getNamedModels(filter))), \
                             printGeneratedTest)

// Tag for the validation tests, instantiated in VtsHalNeuralnetworks.cpp.
// TODO: Clean up the hierarchy for ValidationTest.
class ValidationTest : public GeneratedTestBase {};

Model createModel(const ::test_helper::TestModel& testModel);
Model createModel(const test_helper::TestModel& testModel);

}  // namespace android::hardware::neuralnetworks::V1_0::vts::functional

+7 −0
Original line number Diff line number Diff line
@@ -117,6 +117,13 @@ std::vector<TestBuffer> getOutputBuffers(const Request& request) {
    return outputBuffers;
}

std::string gtestCompliantName(std::string name) {
    // gtest test names must only contain alphanumeric characters
    std::replace_if(
            name.begin(), name.end(), [](char c) { return !std::isalnum(c); }, '_');
    return name;
}

}  // namespace android::hardware::neuralnetworks

namespace android::hardware::neuralnetworks::V1_0 {
Loading