[Beignet] [PATCH] refine overflow utest to cover nsetc fail cases.
Zhigang Gong
zhigang.gong at linux.intel.com
Sun Dec 14 17:52:09 PST 2014
LGTM, will push latter, thanks.
On Fri, Dec 05, 2014 at 03:30:28PM +0800, xionghu.luo at intel.com wrote:
> From: Luo Xionghu <xionghu.luo at intel.com>
>
> the original case only tested overflow when src1 is 1, add the test of
> src1 is max(this could trigger signed type uadd.with.overflow results
> incorrect, the fail was fixed in backend already, just update the utest.)
>
> Signed-off-by: Luo Xionghu <xionghu.luo at intel.com>
> ---
> utests/compiler_overflow.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> diff --git a/utests/compiler_overflow.cpp b/utests/compiler_overflow.cpp
> index 1404cfe..5517b5a 100644
> --- a/utests/compiler_overflow.cpp
> +++ b/utests/compiler_overflow.cpp
> @@ -56,6 +56,9 @@ void test(const char *kernel_name, int func_type)
>
> U max = get_max<U>();
>
> + // test add and sub overflow when src1 is 1:
> + // uadd.with.overflow: max + 1
> + // usub.with.overflow: 0 - 1
> OCL_MAP_BUFFER(0);
> for (uint32_t i = 0; i < n; ++i) {
> if(func_type == 0) {
> @@ -101,6 +104,55 @@ void test(const char *kernel_name, int func_type)
> OCL_ASSERT(0);
> }
> OCL_UNMAP_BUFFER(2);
> +
> + // test add and sub overflow when src1 is max:
> + // uadd.with.overflow: max + max
> + // usub.with.overflow: 0 - max
> + OCL_MAP_BUFFER(0);
> + for (uint32_t i = 0; i < n; ++i) {
> + if(func_type == 0) {
> + ((T*)buf_data[0])[i].x = max;
> + ((T*)buf_data[0])[i].y = max;
> + ((T*)buf_data[0])[i].z = max;
> + ((T*)buf_data[0])[i].w = i;
> + }else if(func_type == 1) {
> + ((T*)buf_data[0])[i].x = 0;
> + ((T*)buf_data[0])[i].y = 0;
> + ((T*)buf_data[0])[i].z = 0;
> + ((T*)buf_data[0])[i].w = n+2-i;
> + }else
> + OCL_ASSERT(0);
> + }
> + OCL_UNMAP_BUFFER(0);
> + OCL_MAP_BUFFER(1);
> + for (uint32_t i = 0; i < n; ++i) {
> + ((T*)buf_data[1])[i].x = max;
> + ((T*)buf_data[1])[i].y = max;
> + ((T*)buf_data[1])[i].z = max;
> + ((T*)buf_data[1])[i].w = 1;
> + }
> + OCL_UNMAP_BUFFER(1);
> +
> + globals[0] = n;
> + locals[0] = 16;
> + OCL_NDRANGE(1);
> + OCL_MAP_BUFFER(2);
> + for (uint32_t i = 0; i < 16; ++i) {
> + // printf("%u,%u,%u,%u\n", ((T*)buf_data[2])[i].x,((T*)buf_data[2])[i].y, ((T*)buf_data[2])[i].z, ((T*)buf_data[2])[i].w );
> + if(func_type == 0) {
> + OCL_ASSERT(((T*)buf_data[2])[i].x == max-1);
> + OCL_ASSERT(((T*)buf_data[2])[i].y == max);
> + OCL_ASSERT(((T*)buf_data[2])[i].z == max);
> + OCL_ASSERT(((T*)buf_data[2])[i].w == i+2);
> + }else if(func_type == 1) {
> + OCL_ASSERT(((T*)buf_data[2])[i].x == 1);
> + OCL_ASSERT(((T*)buf_data[2])[i].y == 0);
> + OCL_ASSERT(((T*)buf_data[2])[i].z == 0);
> + OCL_ASSERT(((T*)buf_data[2])[i].w == n-i);
> + }else
> + OCL_ASSERT(0);
> + }
> + OCL_UNMAP_BUFFER(2);
> }
>
> }
> --
> 1.7.9.5
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list