summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utests/utest.cpp26
-rw-r--r--utests/utest.hpp16
-rw-r--r--utests/utest_run.cpp98
3 files changed, 116 insertions, 24 deletions
diff --git a/utests/utest.cpp b/utests/utest.cpp
index 24045c76..0bd7b1b3 100644
--- a/utests/utest.cpp
+++ b/utests/utest.cpp
@@ -32,7 +32,7 @@ using namespace std;
vector<UTest> *UTest::utestList = NULL;
void releaseUTestList(void) { delete UTest::utestList; }
-UTest::UTest(Function fn, const char *name) : fn(fn), name(name) {
+UTest::UTest(Function fn, const char *name, bool haveIssue) : fn(fn), name(name), haveIssue(haveIssue) {
if (utestList == NULL) {
utestList = new vector<UTest>;
atexit(releaseUTestList);
@@ -40,7 +40,7 @@ UTest::UTest(Function fn, const char *name) : fn(fn), name(name) {
utestList->push_back(*this);
}
-UTest::UTest(void) : fn(NULL), name(NULL) {}
+UTest::UTest(void) : fn(NULL), name(NULL), haveIssue(false) {}
static bool strequal(const char *s1, const char *s2) {
if (strcmp(s1, s2) == 0) return true;
@@ -52,7 +52,7 @@ void UTest::run(const char *name) {
if (utestList == NULL) return;
for (size_t i = 0; i < utestList->size(); ++i) {
const UTest &utest = (*utestList)[i];
- if (utest.name == NULL || utest.fn == NULL) continue;
+ if (utest.name == NULL || utest.fn == NULL || utest.haveIssue) continue;
if (strequal(utest.name, name)) {
std::cout << utest.name << ":" << std::endl;
(utest.fn)();
@@ -76,11 +76,25 @@ void UTest::runAll(void) {
}
}
-void UTest::listAll(void) {
+void UTest::runAllNoIssue(void) {
if (utestList == NULL) return;
for (size_t i = 0; i < utestList->size(); ++i) {
const UTest &utest = (*utestList)[i];
- if (utest.fn == NULL) continue;
- std::cout << utest.name << std::endl;
+ if (utest.fn == NULL || utest.haveIssue) continue;
+ std::cout << utest.name << ":" << std::endl;
+ (utest.fn)();
+ std::cout << std::endl;
+ cl_kernel_destroy();
+ cl_buffer_destroy();
}
}
+
+void UTest::listAllCases()
+{
+ if (utestList == NULL) return;
+ for (size_t i = 0; i < utestList->size(); ++i) {
+ const UTest &utest = (*utestList)[i];
+ if (utest.fn == NULL) continue;
+ std::cout << utest.name << std::endl;
+ }
+}
diff --git a/utests/utest.hpp b/utests/utest.hpp
index 93b3d875..d3a6a6fa 100644
--- a/utests/utest.hpp
+++ b/utests/utest.hpp
@@ -39,19 +39,23 @@ struct UTest
/*! Empty test */
UTest(void);
/*! Build a new unit test and append it to the unit test list */
- UTest(Function fn, const char *name);
+ UTest(Function fn, const char *name, bool haveIssue = false);
/*! Function to execute */
Function fn;
/*! Name of the test */
const char *name;
+ /*! Indicate whether current test cases has issue to be fixes */
+ bool haveIssue;
/*! The tests that are registered */
static std::vector<UTest> *utestList;
/*! Run the test with the given name */
static void run(const char *name);
+ /*! Run all the tests without known issue*/
+ static void runAllNoIssue(void);
/*! Run all the tests */
static void runAll(void);
- /*! List all the tests */
- static void listAll(void);
+ /*! List all test cases */
+ static void listAllCases(void);
};
/*! Register a new unit test */
@@ -62,6 +66,12 @@ struct UTest
static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
static const UTest __##FN##__(__ANON__##FN##__, #FN);
+/*! Register a test case which has issue to be fixed */
+#define MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(FN) \
+ static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
+ static const UTest __##FN##__(__ANON__##FN##__, #FN, true);
+
+
/*! No assert is expected */
#define UTEST_EXPECT_SUCCESS(EXPR) \
do { \
diff --git a/utests/utest_run.cpp b/utests/utest_run.cpp
index 86536d74..94fbbee0 100644
--- a/utests/utest_run.cpp
+++ b/utests/utest_run.cpp
@@ -25,26 +25,94 @@
*/
#include "utest_helper.hpp"
#include "utest_exception.hpp"
-#include <string.h>
#include <iostream>
+#include <getopt.h>
+
+static const char *shortopts = "c:lanh";
+struct option longopts[] = {
+{"casename", required_argument, NULL, 'c'},
+{"list", no_argument, NULL, 'l'},
+{"all", no_argument, NULL, 'a'},
+{"allnoissue", no_argument, NULL, 'n'},
+{"help", no_argument, NULL, 'h'},
+{0, 0, 0, 0},
+};
+
+void usage()
+{
+ std::cout << "\
+Usage:\n\
+ ./utest_run <option>\n\
+\n\
+ option:\n\
+ -c <casename>: run sub-case named 'casename'\n\
+ -l : list all the available case name\n\
+ -a : run all test cases\n\
+ -n : run all test cases without known issue (default option)\n\
+ -h : display this usage\n\
+\
+ "<< std::endl;
+}
int main(int argc, char *argv[])
{
- try {
- if (argc == 2 && !strcmp(argv[1], "--list")) {
- UTest::listAll();
- return 0;
- }
- cl_ocl_init();
- if (argc >= 2)
- for (int i = 1; i < argc; ++i)
- UTest::run(argv[i]);
- else
- UTest::runAll();
- cl_ocl_destroy();
- } catch (Exception e) {
- std::cout << " " << e.what() << " [SUCCESS]" << std::endl;
+ int c = 0;
+ cl_ocl_init();
+
+ c = getopt_long (argc, argv, shortopts, longopts, NULL);
+
+ if (argc == 1)
+ c = 'n';
+ if (argc == 2 && c < 1 ){
+ c = 'c';
+ optarg = argv[1];
}
+
+ {
+ switch (c)
+ {
+ case 'c':
+ try {
+ UTest::run(optarg);
+ }
+ catch (Exception e){
+ std::cout << " " << e.what() << " [SUCCESS]" << std::endl;
+ }
+
+ break;
+
+ case 'l':
+ UTest::listAllCases();
+ break;
+
+ case 'a':
+ try {
+ UTest::runAll();
+ }
+ catch (Exception e){
+ std::cout << " " << e.what() << " [SUCCESS]" << std::endl;
+ }
+
+ break;
+
+ case 'n':
+ try {
+ UTest::runAllNoIssue();
+ }
+ catch (Exception e){
+ std::cout << " " << e.what() << " [SUCCESS]" << std::endl;
+ }
+
+ break;
+
+ case 'h':
+ default:
+ usage();
+ exit(1);
+ }
+ } while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1)
+
+ cl_ocl_destroy();
}