C++程序  |  100行  |  4.02 KB

/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_FRAMEWORK_ML_NN_RUNTIME_TEST_TESTGENERATED_H
#define ANDROID_FRAMEWORK_ML_NN_RUNTIME_TEST_TESTGENERATED_H

#include <gtest/gtest.h>

#include "TestCompliance.h"
#include "TestHarness.h"
#include "TestNeuralNetworksWrapper.h"

#ifdef NNTEST_CTS
#define NNTEST_COMPUTE_MODE
#endif

#ifdef NNTEST_COMPUTE_MODE
#define GENERATED_TESTS_BASE testing::TestWithParam<Execution::ComputeMode>
#undef TEST_F
#define TEST_F TEST_P
// Only generated tests include the TestGenerated.h header file, so only those
// tests will be affected by changing their TEST_F to TEST_P.  If we
// accidentally change TEST_F to TEST_P in some other context, we will get a
// compile-time failure, because TEST_F requires a non-value-parameterized
// fixture class whereas TEST_P requires a value-parameterized fixture class.
//
// Example failure:
//
// clang-format off
//     gtest-param-util.h:488:41: error: no type named 'ParamType' in '(anonymous namespace)::MemoryTest'
//       using ParamType = typename TestSuite::ParamType;
//                         ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
//     TestMemory.cpp:43:1: note: in instantiation of template class 'testing::internal::ParameterizedTestSuiteInfo<(anonymous namespace)::MemoryTest>' requested here
//     TEST_P(MemoryTest, TestFd) {
//     ^
//     gtest-param-test.h:428:11: note: expanded from macro 'TEST_P'
// clang-format on
#else
#define GENERATED_TESTS_BASE ::testing::Test
#endif

using namespace android::nn::test_wrapper;
using namespace test_helper;

namespace generated_tests {

class GeneratedTests : public GENERATED_TESTS_BASE {
   protected:
    virtual void SetUp() override;
    virtual void TearDown() override;

    Compilation compileModel(const Model* model);
    void executeWithCompilation(const Model* model, Compilation* compilation,
                                std::function<bool(int)> isIgnored,
                                std::vector<MixedTypedExample>& examples, std::string dumpFile);
    void executeOnce(const Model* model, std::function<bool(int)> isIgnored,
                     std::vector<MixedTypedExample>& examples, std::string dumpFile);
    void executeMultithreadedOwnCompilation(const Model* model, std::function<bool(int)> isIgnored,
                                            std::vector<MixedTypedExample>& examples);
    void executeMultithreadedSharedCompilation(const Model* model,
                                               std::function<bool(int)> isIgnored,
                                               std::vector<MixedTypedExample>& examples);
    // Test driver for those generated from ml/nn/runtime/test/spec
    void execute(std::function<void(Model*)> createModel, std::function<bool(int)> isIgnored,
                 std::vector<MixedTypedExample>& examples, std::string dumpFile = "");

    std::string mCacheDir;
    std::vector<uint8_t> mToken;
    bool mTestCompilationCaching;
#ifdef NNTEST_COMPUTE_MODE
    // SetUp() uses Execution::setComputeMode() to establish a new ComputeMode,
    // and saves off the previous ComputeMode here; TearDown() restores that
    // previous ComputeMode, so that subsequent tests will not be affected by
    // the SetUp() ComputeMode change.
    Execution::ComputeMode mOldComputeMode;
#endif
};

// Tag for the dynamic output shape tests
class DynamicOutputShapeTest : public GeneratedTests {};

}  // namespace generated_tests

using namespace generated_tests;

#endif  // ANDROID_FRAMEWORK_ML_NN_RUNTIME_TEST_TESTGENERATED_H