[Piglit] [PATCH 1/1] cl: Merge tests with the same name.
Jan Vesely
jan.vesely at rutgers.edu
Fri Aug 1 13:24:52 PDT 2014
This fixes hidden failures where summary would report the result
of the last test with given name.
Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
---
I saw 3 ways to deal with the problem of tests having the same name:
a) Merge the tests
b) Add index to every test
c) add support for same named tests to summary
This patch implements a), it introduces 9 regressions on Intel OCL SDK all
of which are previously hidden fails. No changes on r600.
I don't really use python, so I went for least invasive changes with ugly/non-efficient code as a side-effect. Comments welcome.
Jan
generated_tests/genclbuiltins.py | 63 ++++++++++++++++++++--------------------
1 file changed, 32 insertions(+), 31 deletions(-)
diff --git a/generated_tests/genclbuiltins.py b/generated_tests/genclbuiltins.py
index cdef80b..4a574b8 100644
--- a/generated_tests/genclbuiltins.py
+++ b/generated_tests/genclbuiltins.py
@@ -113,10 +113,10 @@ def gen_kernel(f, fnName, inTypes, outType, vecSizes, typePrefix):
suffix = ';'
if (vecSizes[0] == 1):
- f.write(' *out = ')
+ f.write(' out[get_global_id(0)] = ')
else:
f.write(' vstore'+str(vecSizes[0])+'(')
- suffix = ', 0, out)' + suffix
+ suffix = ', get_global_id(0), out)' + suffix
f.write(fnName+'(')
suffix = ')' + suffix
@@ -126,9 +126,9 @@ def gen_kernel(f, fnName, inTypes, outType, vecSizes, typePrefix):
f.write(', ')
# if scalar, don't print vload/vstore
if (vecSizes[arg] == 1):
- f.write('*in'+str(arg))
+ f.write('in'+str(arg)+'[get_global_id(0)]')
else:
- f.write('vload'+str(vecSizes[arg])+'(0, in'+str(arg)+')')
+ f.write('vload'+str(vecSizes[arg])+'(get_global_id(0), in'+str(arg)+')')
f.write(suffix+'\n}\n\n')
@@ -247,16 +247,19 @@ def getValue(type, val, isVector):
# Evaluate the value of the requested function and arguments
# TODO: Change to varargs calls after unshifting the first list element
- if (len(val) == 2):
- return (val[0])(getValue(type, val[1], isVector))
- elif (len(val) == 3):
- return (val[0])(getValue(type, val[1], isVector), getValue(type, val[2], isVector))
- elif (len(val) == 4):
- return (val[0])(getValue(type, val[1], isVector), getValue(type, val[2], isVector),
+ if (callable(val[0])):
+ if (len(val) == 2):
+ return (val[0])(getValue(type, val[1], isVector))
+ elif (len(val) == 3):
+ return (val[0])(getValue(type, val[1], isVector), getValue(type, val[2], isVector))
+ elif (len(val) == 4):
+ return (val[0])(getValue(type, val[1], isVector), getValue(type, val[2], isVector),
getValue(type, val[3], isVector))
- else:
- return (val[0])(getValue(type, val[1], isVector), getValue(type, val[2], isVector),
+ else:
+ return (val[0])(getValue(type, val[1], isVector), getValue(type, val[2], isVector),
getValue(type, val[3], isVector), getValue(type, val[4], isVector))
+ else:
+ return map(lambda x: getValue(type, x, isVector), val);
# At this point, we should have been passed a number
if (isinstance(val, (int, long, float))):
@@ -267,7 +270,7 @@ def getValue(type, val, isVector):
def getStrVal(type, val, isVector):
- return str(getValue(type, val, isVector))
+ return " ".join(map(str, getValue(type, val, isVector)))
def getArgType(baseType, argType):
@@ -288,11 +291,11 @@ def isFloatType(t):
return t not in U
# Print a test with all-vector inputs/outputs and/or mixed vector/scalar args
-def print_test(f, fnName, argType, functionDef, tests, testIdx, vecSize, tss):
+def print_test(f, fnName, argType, functionDef, tests, numTests, vecSize, tss):
# If the test allows mixed vector/scalar arguments, handle the case with
# only vector arguments through a recursive call.
if (tss):
- print_test(f, fnName, argType, functionDef, tests, testIdx, vecSize,
+ print_test(f, fnName, argType, functionDef, tests, numTests, vecSize,
False)
# The tss && vecSize==1 case is handled in the non-tss case.
@@ -305,20 +308,21 @@ def print_test(f, fnName, argType, functionDef, tests, testIdx, vecSize, tss):
if (not tss):
tssStr = ''
+ argTypes = getArgTypes(argType, functionDef['arg_types'])
+ argCount = len(argTypes)
+ tolerance = functionDef['tolerance'] if 'tolerance' in functionDef else 0
+
# Write the test header
f.write('[test]\n' + 'name: ' + fnName + ' ' + argType + str(vecSize) +
'\n' + 'kernel_name: test_' + tssStr + str(vecSize) + '_' + fnName
- + '_' + argType + '\n'
+ + '_' + argType + '\n' + 'global_size: ' + str(numTests)
+ + ' 0 0\n\n'
)
- argTypes = getArgTypes(argType, functionDef['arg_types'])
- argCount = len(argTypes)
- tolerance = functionDef['tolerance'] if 'tolerance' in functionDef else 0
-
# For each argument, write a line containing its type, index, and values
for arg in range(0, argCount):
argInOut = ''
- argVal = getStrVal(argType, tests[arg][testIdx], (vecSize > 1))
+ argVal = getStrVal(argType, tests[arg], (vecSize > 1))
if arg == 0:
argInOut = 'arg_out: '
else:
@@ -329,7 +333,8 @@ def print_test(f, fnName, argType, functionDef, tests, testIdx, vecSize, tss):
# width
if (arg < 2 or not tss):
f.write(argInOut + str(arg) + ' buffer ' + argTypes[arg] +
- '[' + str(vecSize) + '] ' + ' '.join([argVal]*vecSize)
+ '[' + str(numTests * vecSize) + '] ' +
+ ''.join(map(lambda x: (x + ' ') * vecSize, argVal.split()))
)
if arg == 0:
f.write(' tolerance {0} '.format(tolerance))
@@ -339,8 +344,8 @@ def print_test(f, fnName, argType, functionDef, tests, testIdx, vecSize, tss):
f.write('\n')
else:
argInOut = 'arg_in: '
- f.write(argInOut + str(arg) + ' buffer ' + argTypes[arg] + '[1] ' +
- argVal + '\n'
+ f.write(argInOut + str(arg) + ' buffer ' + argTypes[arg] + '[' +
+ str(numTests) + '] ' + argVal + '\n'
)
# Blank line between tests for formatting reasons
@@ -379,8 +384,7 @@ def gen(types, minVersions, functions, testDefs, dirName):
'[config]\n' +
'name: Test '+dataType+' '+fnName+' built-in on CL 1.1\n' +
'clc_version_min: '+str(clcVersionMin)+'\n' +
- 'dimensions: 1\n' +
- 'global_size: 1 0 0\n\n'
+ 'dimensions: 1\n\n'
)
# Write all tests for the built-in function
@@ -395,9 +399,8 @@ def gen(types, minVersions, functions, testDefs, dirName):
sizes = sorted(VEC_WIDTHS)
sizes.insert(0, 1) # Add 1-wide scalar to the vector widths
for vecSize in sizes:
- for testIdx in range(0, numTests):
- print_test(f, fnName, dataType, functionDef, tests,
- testIdx, vecSize, (fnType is 'tss'))
+ print_test(f, fnName, dataType, functionDef, tests,
+ numTests, vecSize, (fnType is 'tss'))
# Terminate the header section
f.write('!*/\n\n')
@@ -406,5 +409,3 @@ def gen(types, minVersions, functions, testDefs, dirName):
generate_kernels(f, dataType, fnName, functionDef)
f.close()
-
-
--
1.9.3
More information about the Piglit
mailing list