mirror of https://github.com/alibaba/MNN.git
107 lines
2.3 KiB
C++
107 lines
2.3 KiB
C++
//
|
|
// DemoUnit.hpp
|
|
// MNN
|
|
//
|
|
// Created by MNN on 2019/11/27.
|
|
// Copyright © 2018, Alibaba Group Holding Limited
|
|
//
|
|
|
|
#ifndef DemoUnit_hpp
|
|
#define DemoUnit_hpp
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
/** test case */
|
|
class DemoUnit {
|
|
friend class DemoUnitSet;
|
|
|
|
public:
|
|
/**
|
|
* @brief deinitializer
|
|
*/
|
|
virtual ~DemoUnit() = default;
|
|
/**
|
|
* @brief run test case
|
|
*/
|
|
virtual int run(int argc, const char* argv[]) = 0;
|
|
|
|
private:
|
|
/** case name */
|
|
std::string name;
|
|
};
|
|
|
|
/** test suite */
|
|
class DemoUnitSet {
|
|
public:
|
|
/**
|
|
* @brief deinitializer
|
|
*/
|
|
~DemoUnitSet();
|
|
/**
|
|
* @brief get shared instance
|
|
* @return shared instance
|
|
*/
|
|
static DemoUnitSet* get();
|
|
|
|
public:
|
|
/**
|
|
* @brief register runable test case
|
|
* @param test test case
|
|
* @param name case name
|
|
*/
|
|
void add(DemoUnit* test, const char* name);
|
|
|
|
/**
|
|
* @brief run registered test case that matches in name
|
|
* @param name case name
|
|
*/
|
|
DemoUnit* search(const char* name);
|
|
|
|
const std::map<std::string, DemoUnit*>& list() const {
|
|
return mUnit;
|
|
}
|
|
|
|
private:
|
|
DemoUnitSet(){};
|
|
/** get shared instance */
|
|
static DemoUnitSet* gInstance;
|
|
/** registered test cases */
|
|
std::map<std::string, DemoUnit*> mUnit;
|
|
};
|
|
|
|
/**
|
|
static register for test case
|
|
*/
|
|
template <class Case>
|
|
class DemoUnitRegister {
|
|
public:
|
|
/**
|
|
* @brief initializer. register test case to suite.
|
|
* @param name test case name
|
|
*/
|
|
DemoUnitRegister(const char* name) {
|
|
DemoUnitSet::get()->add(new Case, name);
|
|
}
|
|
/**
|
|
* @brief deinitializer
|
|
*/
|
|
~DemoUnitRegister() {
|
|
}
|
|
};
|
|
|
|
#define DemoUnitSetRegister(Case, name) static DemoUnitRegister<Case> __r##Case(name)
|
|
#define MNNTEST_ASSERT(x) \
|
|
{ \
|
|
int res = (x); \
|
|
if (!res) { \
|
|
MNN_ERROR("Error for %s, %d\n", __func__, __LINE__); \
|
|
return false; \
|
|
} \
|
|
}
|
|
|
|
#endif
|