[Beignet] [PATCH] Refine the output and add dynamic statistics.
Sun, Yi
yi.sun at intel.com
Tue Mar 25 20:22:12 PDT 2014
Ok, I got you. We can separate the output line into two parts:
1, print case name before case running
2, print result after testing.
But stay it in one line different from what it does previously.
Thanks
--Sun, Yi
> -----Original Message-----
> From: Song, Ruiling
> Sent: Wednesday, March 26, 2014 11:09 AM
> To: Sun, Yi; 'beignet at lists.freedesktop.org'
> Cc: Sun, Yi; Shui, YangweiX
> Subject: RE: [Beignet] [PATCH] Refine the output and add dynamic statistics.
>
> I think you can print case name before case running, after case finished, print
> success or fail.
> How about this?
>
> -----Original Message-----
> From: Song, Ruiling
> Sent: Tuesday, March 25, 2014 10:20 AM
> To: Sun, Yi; beignet at lists.freedesktop.org
> Cc: Sun, Yi; Shui, YangweiX
> Subject: RE: [Beignet] [PATCH] Refine the output and add dynamic statistics.
>
> Although dynamic statistics looks good to me.
> Still one minor comment, if a case hang, it is not easy to find which case hang
> through the log.
>
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of Yi
> Sun
> Sent: Tuesday, March 18, 2014 9:15 AM
> To: beignet at lists.freedesktop.org
> Cc: Sun, Yi; Shui, YangweiX
> Subject: [Beignet] [PATCH] Refine the output and add dynamic statistics.
>
> From: Yangwei Shui <yangweix.shui at intel.com>
>
> 1. Add two parameter(passCount and failCount) in Class UTest, to count
> passed case number and failed case number
>
> 2. Print dynamic statistics about case running in stdout, the style looks like
> follows:
>
> ......
> compiler_bool_cross_basic_block() [SUCCESS]
> compiler_private_data_overflow() [SUCCESS]
> compiler_getelementptr_bitcast() [SUCCESS]
> test_load_program_from_bin() [SUCCESS]
> enqueue_copy_buf() [SUCCESS]
> run/total: 655/655; pass: 628; fail: 25; pass rate: 0.961832
>
> 3. If ./utest_run &> log, the log will be a little messy, tring the following
> command to analyse the log:
>
> sed 's/\r/\n/g' log | egrep "\w*\(\)" | sed -e 's/\s//g'
>
> After analysed:
> -----------------
> ......
> builtin_minmag_float2()[SUCCESS]
> builtin_minmag_float4()[SUCCESS]
> builtin_minmag_float8()[SUCCESS]
> builtin_minmag_float16()[SUCCESS]
> builtin_nextafter_float()[FAILED]
> builtin_nextafter_float2()[FAILED]
> builtin_nextafter_float4()[FAILED]
> ......
>
> Signed-off-by: Yi Sun <yi.sun at intel.com>
> Signed-off-by: Yangwei Shui <yangweix.shui at intel.com>
>
> diff --git a/utests/compiler_basic_arithmetic.cpp
> b/utests/compiler_basic_arithmetic.cpp
> index 0e5ec41..ba05de0 100644
> --- a/utests/compiler_basic_arithmetic.cpp
> +++ b/utests/compiler_basic_arithmetic.cpp
> @@ -15,7 +15,6 @@ static void test_exec(const char* kernel_name)
>
> // Setup kernel and buffers
> OCL_CREATE_KERNEL_FROM_FILE("compiler_basic_arithmetic",
> kernel_name); -std::cout <<"kernel name: " << kernel_name << std::endl;
> buf_data[0] = (T*) malloc(sizeof(T) * n);
> buf_data[1] = (T*) malloc(sizeof(T) * n);
> for (uint32_t i = 0; i < n; ++i) ((T*)buf_data[0])[i] = (T) rand(); diff --git
> a/utests/utest.cpp b/utests/utest.cpp index 718916f..ef0c5cf 100644
> --- a/utests/utest.cpp
> +++ b/utests/utest.cpp
> @@ -28,8 +28,17 @@
> #include <iostream>
> #include <cstring>
>
> +#define OUTPUT_LINE_LEN 70
> +
> using namespace std;
> vector<UTest> *UTest::utestList = NULL;
> +/* Initialisation
> + Passed case number: passCount
> + Failed case number: failCount
> +*/
> +int UTest::passCount = 0;
> +int UTest::failCount = 0;
> +
> void releaseUTestList(void) { delete UTest::utestList; }
>
> UTest::UTest(Function fn, const char *name, bool haveIssue, bool
> needDestroyProgram) @@ -76,13 +85,23 @@ void UTest::runAll(void) { }
>
> void UTest::runAllNoIssue(void) {
> + char spaceList[OUTPUT_LINE_LEN] = {};
> 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;
> +
> + //A string contain OUTPUT_LINE_LEN spaces, to hide the statistic line in
> stdout
> + for (size_t j = 0; j < OUTPUT_LINE_LEN; j++) spaceList[j] = ' ';
> + printf("\r%s\r",spaceList);
> +
> (utest.fn)();
> - std::cout << std::endl;
> +
> + //Dynamic statistics of running cases
> + printf("\nrun/total: %zu/%zu; pass: %d; fail: %d; pass rate: %f",
> + i+1, utestList->size(), passCount, failCount,
> 1-(float)failCount/(float)utestList->size());
> + fflush(stdout);
> +
> cl_kernel_destroy(utest.needDestroyProgram);
> cl_buffer_destroy();
> }
> diff --git a/utests/utest.hpp b/utests/utest.hpp index 01d4a8c..7b5bd42
> 100644
> --- a/utests/utest.hpp
> +++ b/utests/utest.hpp
> @@ -58,6 +58,10 @@ struct UTest
> static void runAll(void);
> /*! List all test cases */
> static void listAllCases(void);
> + /*! Count passed case number */
> + static int passCount;
> + /*! Count failed case number */
> + static int failCount;
> };
>
> /*! Register a new unit test */
> @@ -84,11 +88,13 @@ struct UTest
> do { \
> try { \
> EXPR; \
> - std::cout << " " << #EXPR << " [SUCCESS]" << std::endl; \
> + std::cout << " " << #EXPR << " [SUCCESS]"; \
> + UTest::passCount += 1; \
> } \
> catch (Exception e) { \
> - std::cout << " " << #EXPR << " [FAILED]" << std::endl; \
> - std::cout << " " << e.what() << std::endl; \
> + std::cout << " " << #EXPR << " [FAILED]"; \
> + std::cout << "\n " << e.what(); \
> + UTest::failCount += 1; \
> } \
> } while (0)
>
> @@ -96,10 +102,12 @@ struct UTest
> do { \
> try { \
> EXPR; \
> - std::cout << " " << #EXPR << " [FAILED]" << std::endl; \
> + std::cout << " " << #EXPR << " [FAILED]"; \
> + UTest::failCount += 1; \
> } \
> catch (gbe::Exception e) { \
> - std::cout << " " << #EXPR << " [SUCCESS]" << std::endl; \
> + std::cout << " " << #EXPR << " [SUCCESS]"; \
> + UTest::passCount += 1; \
> } \
> } while (0)
>
> --
> 1.8.5.3
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list