[Beignet] [PATCH] Utests_run: Add known issue cases support.
Zhigang Gong
zhigang.gong at linux.intel.com
Wed Sep 4 00:11:39 PDT 2013
LGTM, pushed, thanks.
On Wed, Sep 04, 2013 at 10:48:48AM +0800, Yi Sun wrote:
> Add some arguments:
> -c <casename>: run sub-case named 'casename'
> -l : list all the available case name
> -a : run all test cases
> -n : run all test cases without known issue
> -h : display this usage
>
> Add a alternate macro named MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE to register a new test case, which has some known issue to be fixed till now.
> While utest_run running, only cases which registered by MAKE_UTEST_FROM_FUNCTION will be involved by defalut.
> If you want to run all the test cases including those with known issue, you should use argument '-a'.
> Besides, you can use option '-c' to run any test case.
>
> Signed-off-by: Yi Sun <yi.sun at intel.com>
>
> diff --git a/utests/utest.cpp b/utests/utest.cpp
> index 24045c7..04e205a 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,10 +76,24 @@ 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 || 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 93b3d87..d3a6a6f 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 86536d7..94fbbee 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();
> }
>
> --
> 1.7.6.4
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list