utests/utest_relational_gen.py can generate test cases automatically for 13 out of 18 relational builtin functions. Now all these test cases are passed.
Signed-off-by: Yi Sun <[email protected]> Signed-off-by: YangweiX Shui <[email protected]> --- utests/CMakeLists.txt | 17 ++- utests/utest_relational_gen.py | 263 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 277 insertions(+), 3 deletions(-) create mode 100755 utests/utest_relational_gen.py diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index b7d6f71..40ae066 100644 --- a/utests/CMakeLists.txt +++ b/utests/CMakeLists.txt @@ -6,12 +6,23 @@ EXEC_PROGRAM(mkdir ${CMAKE_CURRENT_SOURCE_DIR} ARGS generated -p) EXEC_PROGRAM(${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} ARGS utest_math_gen.py OUTPUT_VARIABLE GEN_MATH_STRING) string(REGEX REPLACE " " ";" ADDMATHFUNC ${GEN_MATH_STRING}) string(REGEX REPLACE " " "\n" NAMEMATHLIST ${GEN_MATH_STRING}) -MESSAGE(STATUS "Generated Builtin Math Functions:\n" ${NAMEMATHLIST}) +#MESSAGE(STATUS "Generated Builtin Math Functions" ${NAMEMATHLIST}) +MESSAGE(STATUS "Generated Builtin Math Functions") string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/../kernels/\\1.cl" KERNEL_MATH_LIST ${GEN_MATH_STRING}) string(REGEX REPLACE " " ";" KERNEL_MATH_LIST ${KERNEL_MATH_LIST}) string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "\\1.cl" KERNEL_GITIGNORE_LIST ${GEN_MATH_STRING}) -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "generated;${KERNEL_MATH_LIST}") + +##### Ralational Function Part: +EXEC_PROGRAM(${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} ARGS utest_relational_gen.py OUTPUT_VARIABLE GEN_RELATIONAL_STRING) +string(REGEX REPLACE " " ";" ADDRELATIONALFUNC ${GEN_RELATIONAL_STRING}) +string(REGEX REPLACE " " "\n" NAMERELATIONALLIST ${GEN_RELATIONAL_STRING}) + +string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/../kernels/\\1.cl" KERNEL_RELATIONAL_LIST ${GEN_RELATIONAL_STRING}) +string(REGEX REPLACE " " ";" KERNEL_RELATIONAL_LIST ${KERNEL_RELATIONAL_LIST}) +MESSAGE(STATUS "Generated Builtin Relational Functions") + +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "generated;${KERNEL_RELATIONAL_LIST};${KERNEL_MATH_LIST}") configure_file ( "setenv.sh.in" @@ -201,7 +212,7 @@ SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS} ${DEF_OCL_PCH_PCM_PATH}") SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS} ${DEF_OCL_PCH_PCM_PATH}") endif (EGL_FOUND AND MESA_SOURCE_FOUND) -ADD_LIBRARY(utests SHARED ${ADDMATHFUNC} ${utests_sources}) +ADD_LIBRARY(utests SHARED ${ADDRELATIONALFUNC} ${ADDMATHFUNC} ${utests_sources}) TARGET_LINK_LIBRARIES(utests cl m ${OPENGL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) diff --git a/utests/utest_relational_gen.py b/utests/utest_relational_gen.py new file mode 100755 index 0000000..2debaa3 --- /dev/null +++ b/utests/utest_relational_gen.py @@ -0,0 +1,263 @@ +#!/usr/bin/python +from utest_generator import * +import os,sys + +#base_input_values = [80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24] +#extend_input_values = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24] +base_input_values = [ 0, 1, 3.14] +def main(): + ##### intn isequal(floatn x,floatn y) + isequal_base_values = base_input_values + isequal_input_values1 = [] + isequal_input_values2 = [] + isequal_input_values1,isequal_input_values2=gene2ValuesLoop(isequal_input_values1,isequal_input_values2,isequal_base_values) + isequal_input_type1 = ['float','float2','float4','float8','float16'] + isequal_input_type2 = ['float','float2','float4','float8','float16'] + isequal_output_type = ['int','int2','int4','int8','int16'] + isequal_cpu_func=''' +static int isequal_v(float x, float y){ + if (x == y && vector == 1) + return 1; + else if (x == y && vector != 1) + return -1; + else + return 0; +} ''' + isequalUtests = func('isequal','isequal_v',[isequal_input_type1,isequal_input_type2],isequal_output_type,[isequal_input_values1,isequal_input_values2],'0 * INT_ULP',isequal_cpu_func) + + ##### intn isnotequal(floatn x,floatn y) + isnotequal_base_values = base_input_values + isnotequal_input_values1 = [] + isnotequal_input_values2 = [] + isnotequal_input_values1,isnotequal_input_values2=gene2ValuesLoop(isnotequal_input_values1,isnotequal_input_values2,isnotequal_base_values) + isnotequal_input_type1 = ['float','float2','float4','float8','float16'] + isnotequal_input_type2 = ['float','float2','float4','float8','float16'] + isnotequal_output_type = ['int','int2','int4','int8','int16'] + isnotequal_cpu_func=''' +static int isnotequal(float x, float y){ + if (x != y && vector == 1) + return 1; + else if (x != y && vector != 1) + return -1; + else + return 0; +} ''' + isnotequalUtests = func('isnotequal','isnotequal',[isnotequal_input_type1,isnotequal_input_type2],isnotequal_output_type,[isnotequal_input_values1,isnotequal_input_values2],'0 * INT_ULP',isnotequal_cpu_func) + + ##### intn isgreater(floatn x,floatn y) + isgreater_base_values = base_input_values + isgreater_input_values1 = [] + isgreater_input_values2 = [] + isgreater_input_values1,isgreater_input_values2=gene2ValuesLoop(isgreater_input_values1,isgreater_input_values2,isgreater_base_values) + isgreater_input_type1 = ['float','float2','float4','float8','float16'] + isgreater_input_type2 = ['float','float2','float4','float8','float16'] + isgreater_output_type = ['int','int2','int4','int8','int16'] + isgreater_cpu_func=''' +static int isgreater(float x, float y){ + if (x > y && vector == 1) + return 1; + else if (x > y && vector != 1) + return -1; + else + return 0; +} ''' + isgreaterUtests = func('isgreater','isgreater',[isgreater_input_type1,isgreater_input_type2],isgreater_output_type,[isgreater_input_values1,isgreater_input_values2],'0 * INT_ULP',isgreater_cpu_func) + + ##### intn isgreaterequal(floatn x,floatn y) + isgreaterequal_base_values = base_input_values + isgreaterequal_input_values1 = [] + isgreaterequal_input_values2 = [] + isgreaterequal_input_values1,isgreaterequal_input_values2=gene2ValuesLoop(isgreaterequal_input_values1,isgreaterequal_input_values2,isgreaterequal_base_values) + isgreaterequal_input_type1 = ['float','float2','float4','float8','float16'] + isgreaterequal_input_type2 = ['float','float2','float4','float8','float16'] + isgreaterequal_output_type = ['int','int2','int4','int8','int16'] + isgreaterequal_cpu_func=''' +static int isgreaterequal(float x, float y){ + if (x >= y && vector == 1) + return 1; + else if (x >= y && vector != 1) + return -1; + else + return 0; +} ''' + isgreaterequalUtests = func('isgreaterequal','isgreaterequal',[isgreaterequal_input_type1,isgreaterequal_input_type2],isgreaterequal_output_type,[isgreaterequal_input_values1,isgreaterequal_input_values2],'0 * INT_ULP',isgreaterequal_cpu_func) + + ##### intn isless(floatn x,floatn y) + isless_base_values = base_input_values + isless_input_values1 = [] + isless_input_values2 = [] + isless_input_values1,isless_input_values2=gene2ValuesLoop(isless_input_values1,isless_input_values2,isless_base_values) + isless_input_type1 = ['float','float2','float4','float8','float16'] + isless_input_type2 = ['float','float2','float4','float8','float16'] + isless_output_type = ['int','int2','int4','int8','int16'] + isless_cpu_func=''' +static int isless(float x, float y){ + if (x < y && vector == 1) + return 1; + else if (x < y && vector != 1) + return -1; + else + return 0; +} ''' + islessUtests = func('isless','isless',[isless_input_type1,isless_input_type2],isless_output_type,[isless_input_values1,isless_input_values2],'0 * INT_ULP',isless_cpu_func) + + ##### intn islessequal(floatn x,floatn y) + islessequal_base_values = base_input_values + islessequal_input_values1 = [] + islessequal_input_values2 = [] + islessequal_input_values1,islessequal_input_values2=gene2ValuesLoop(islessequal_input_values1,islessequal_input_values2,islessequal_base_values) + islessequal_input_type1 = ['float','float2','float4','float8','float16'] + islessequal_input_type2 = ['float','float2','float4','float8','float16'] + islessequal_output_type = ['int','int2','int4','int8','int16'] + islessequal_cpu_func=''' +static int islessequal(float x, float y){ + if (x <= y && vector == 1) + return 1; + else if (x <= y && vector != 1) + return -1; + else + return 0; +} ''' + islessequalUtests = func('islessequal','islessequal',[islessequal_input_type1,islessequal_input_type2],islessequal_output_type,[islessequal_input_values1,islessequal_input_values2],'0 * INT_ULP',islessequal_cpu_func) + + ##### intn islessgreater(floatn x,floatn y) + islessgreater_base_values = base_input_values + islessgreater_input_values1 = [] + islessgreater_input_values2 = [] + islessgreater_input_values1,islessgreater_input_values2=gene2ValuesLoop(islessgreater_input_values1,islessgreater_input_values2,islessgreater_base_values) + islessgreater_input_type1 = ['float','float2','float4','float8','float16'] + islessgreater_input_type2 = ['float','float2','float4','float8','float16'] + islessgreater_output_type = ['int','int2','int4','int8','int16'] + islessgreater_cpu_func=''' +static int islessgreater(float x, float y){ + if ((x < y || x > y) && vector == 1) + return 1; + else if ((x < y || x > y) && vector != 1) + return -1; + else + return 0; +} ''' + islessgreaterUtests = func('islessgreater','islessgreater',[islessgreater_input_type1,islessgreater_input_type2],islessgreater_output_type,[islessgreater_input_values1,islessgreater_input_values2],'0 * INT_ULP',islessgreater_cpu_func) + + ##### intn isinf(floatn x) + isinf_input_values = [ '(float)0.0','(float)(1.0/0.0)','(float)(-1.0/0.0)','(float)sqrt(-1.0)' ] + isinf_input_type = ['float','float2','float4','float8','float16'] + isinf_output_type = ['int','int2','int4','int8','int16'] + isinf_cpu_func=''' +static int isinf_v(float x){ + if (isinf(x) == 1 && vector == 1) + return 1; + else if (isinf(x) == 1 && vector != 1) + return -1; + else + return 0; +} ''' + isinfUtests = func('isinf','isinf_v',[isinf_input_type],isinf_output_type,[isinf_input_values],'0 * INT_ULP',isinf_cpu_func) + + ##### intn isnan(floatn x) + isnan_input_values = [ '(float)0.0','(float)(1.0/0.0)','(float)(-1.0/0.0)','(float)sqrt(-1.0)' ] + isnan_input_type = ['float','float2','float4','float8','float16'] + isnan_output_type = ['int','int2','int4','int8','int16'] + isnan_cpu_func=''' +static int isnan_v(float x){ + if (isnan(x) == 1 && vector == 1) + return 1; + else if (isnan(x) == 1 && vector != 1) + return -1; + else + return 0; +} ''' + isnanUtests = func('isnan','isnan_v',[isnan_input_type],isnan_output_type,[isnan_input_values],'0 * INT_ULP',isnan_cpu_func) + + ##### intn isnormal(floatn x) + isnormal_input_values = [ '(float)0.0','(float)(1.0/0.0)','(float)(-1.0/0.0)','(float)sqrt(-1.0)',1,51222.00 ] + isnormal_input_type = ['float','float2','float4','float8','float16'] + isnormal_output_type = ['int','int2','int4','int8','int16'] + isnormal_cpu_func=''' +static int isnormal(float x) +{ + union { uint u; float f; } u; + u.f=x; + u.u &= 0x7FFFFFFF; + return (u.u < 0x7F800000) && (u.u >=1); +} +static int isnormal_v(float x){ + if (isnormal(x) == 1 && vector == 1) + return 1; + else if (isnormal(x) == 1 && vector != 1) + return -1; + else + return 0; +} ''' + isnormalUtests = func('isnormal','isnormal_v',[isnormal_input_type],isnormal_output_type,[isnormal_input_values],'0 * INT_ULP',isnormal_cpu_func) + + ##### intn isordered(floatn x,floatn y) + isordered_base_values = base_input_values + isordered_input_values1 = [] + isordered_input_values2 = [] + isordered_input_values1,isordered_input_values2=gene2ValuesLoop(isordered_input_values1,isordered_input_values2,isordered_base_values) + isordered_input_type1 = ['float','float2','float4','float8','float16'] + isordered_input_type2 = ['float','float2','float4','float8','float16'] + isordered_output_type = ['int','int2','int4','int8','int16'] + isordered_cpu_func=''' +static int isequal(float x, float y) { return x == y; } +static int isordered(float x,float y) +{ + return isequal(x, x) && isequal(y, y); +} +static int isordered_v(float x, float y){ + if (isordered(x,y) == 1 && vector == 1) + return 1; + else if (isordered(x,y) == 1 && vector != 1) + return -1; + else + return 0; +} ''' + isorderedUtests = func('isordered','isordered_v',[isordered_input_type1,isordered_input_type2],isordered_output_type,[isordered_input_values1,isordered_input_values2],'0 * INT_ULP',isordered_cpu_func) + + ##### intn isunordered(floatn x,floatn y) + isunordered_base_values = base_input_values + isunordered_input_values1 = [] + isunordered_input_values2 = [] + isunordered_input_values1,isunordered_input_values2=gene2ValuesLoop(isunordered_input_values1,isunordered_input_values2,isunordered_base_values) + isunordered_input_type1 = ['float','float2','float4','float8','float16'] + isunordered_input_type2 = ['float','float2','float4','float8','float16'] + isunordered_output_type = ['int','int2','int4','int8','int16'] + isunordered_cpu_func=''' +static int isunordered(float x,float y) +{ + return isnan(x) && isnan(y); +} +static int isunordered_v(float x, float y){ + if (isunordered(x,y) == 1 && vector == 1) + return 1; + else if (isunordered(x,y) == 1 && vector != 1) + return -1; + else + return 0; +} ''' + isunorderedUtests = func('isunordered','isunordered_v',[isunordered_input_type1,isunordered_input_type2],isunordered_output_type,[isunordered_input_values1,isunordered_input_values2],'0 * INT_ULP',isunordered_cpu_func) + + ##### intn signbit(floatn x) + signbit_input_values = [ '(float)0.0','(float)(1.0/0.0)','(float)(-1.0/0.0)','(float)sqrt(-1.0)',1,51222.00 ] + signbit_input_type = ['float','float2','float4','float8','float16'] + signbit_output_type = ['int','int2','int4','int8','int16'] + signbit_cpu_func=''' +static int signbit(float x) +{ + union { uint u; float f; } u; + u.f=x; + return u.u >> 31; +} +static int signbit_v(float x){ + if (signbit(x) == 1 && vector == 1) + return 1; + else if (signbit(x) == 1 && vector != 1) + return -1; + else + return 0; +} ''' + signbitUtests = func('signbit','signbit_v',[signbit_input_type],signbit_output_type,[signbit_input_values],'0 * INT_ULP',signbit_cpu_func) + +if __name__ == "__main__": + main() -- 1.8.5.3 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
