[Piglit] [PATCH 2/3] cl: Add tests for common builtin functions

Jan Vesely jan.vesely at rutgers.edu
Sat Apr 11 18:16:58 PDT 2015


Move sign and mix out of math
All tests pass on Turks (min needs a libclc patch)
All tests except min and step pass on Intel CPU. Min and step fail in NaN cases.

Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
---

NOTE: you'll need to remove old math tests (or entire builtin directory)
manually to make piglit happy.

 generated_tests/CMakeLists.txt            |   4 +
 generated_tests/gen_cl_common_builtins.py | 154 ++++++++++++++++++++++++++++++
 generated_tests/gen_cl_math_builtins.py   |  21 ----
 tests/cl.py                               |   3 +
 4 files changed, 161 insertions(+), 21 deletions(-)
 create mode 100644 generated_tests/gen_cl_common_builtins.py

diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt
index 82679e1..5036a5d 100644
--- a/generated_tests/CMakeLists.txt
+++ b/generated_tests/CMakeLists.txt
@@ -134,6 +134,9 @@ piglit_make_generated_tests(
 piglit_make_generated_tests(
 	builtin_cl_relational_tests.list
 	gen_cl_relational_builtins.py)
+piglit_make_generated_tests(
+	builtin_cl_common_tests.list
+	gen_cl_common_builtins.py)
 
 # Create a custom target for generating OpenGL tests
 # This is not added to the default target, instead it is added
@@ -167,6 +170,7 @@ add_custom_target(gen-cl-tests
 	DEPENDS builtin_cl_int_tests.list
 			builtin_cl_math_tests.list
 			builtin_cl_relational_tests.list
+			builtin_cl_common_tests.list
 			cl_store_tests.list
 )
 
diff --git a/generated_tests/gen_cl_common_builtins.py b/generated_tests/gen_cl_common_builtins.py
new file mode 100644
index 0000000..1e81d1b
--- /dev/null
+++ b/generated_tests/gen_cl_common_builtins.py
@@ -0,0 +1,154 @@
+# Copyright 2013 Advanced Micro Devices, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
+# Authors: Tom Stellard <thomas.stellard at amd.com>
+#          Aaron Watry  <awatry at gmail.com>
+#
+
+from __future__ import print_function, division, absolute_import
+import os
+
+from genclbuiltins import gen, NEGNAN
+from math import radians, degrees, pi
+
+CLC_VERSION_MIN = {
+    'clamp' : 10,
+    'degrees' : 10,
+    'max' : 10,
+    'min' : 10,
+    'mix' : 10,
+    'radians' : 10,
+    'step' : 10,
+    'smoothstep' : 10,
+    'sign' : 10
+}
+
+DATA_TYPES = ['float']
+
+F = {
+    'float' : 'float'
+}
+
+I = {
+    'float' : 'int'
+}
+
+tests = {
+    'clamp' : {
+        'arg_types': [F, F, F, F],
+        'function_type': 'tss',
+        'values': [
+            [0.5,  0.0, 0.0,  0.0, float("nan")], #Result
+            [1.0, -0.5, 0.0,  0.0, float("nan")], #Arg0
+            [0.0,  0.0, 0.0, -0.5, float("nan")], #Arg1
+            [0.5,  0.5, 0.0,  0.5, float("nan")], #Arg2
+        ]
+    },
+    'degrees' : {
+        'arg_types': [F, F],
+        'function_type': 'ttt',
+        'values': [
+            [degrees(0.5), degrees(-0.5), 180.0, 0.0, 360, 1800.0, 18000, 90], #Result
+            [0.5,                   -0.5, pi,    0.0, 2*pi, 10*pi, 100*pi, pi/2] #Arg0
+        ]
+    },
+    'max' : {
+        'arg_types': [F, F, F],
+        'function_type': 'tss',
+        'values': [
+            [1.0,  0.0, 0.0,  0.0, float("nan"), 1.0], #Result
+            [1.0, -0.5, 0.0,  0.0, 1.0, float("nan")], #Arg0
+            [0.0,  0.0, 0.0, -0.5, float("nan"), 1.0] #Arg1
+        ]
+    },
+    'min' : {
+        'arg_types': [F, F, F],
+        'function_type': 'tss',
+        'values': [
+            [0.0, -0.5, 0.0, -0.5, 1.0, float("nan")], #Result
+            [1.0, -0.5, 0.0,  0.0, 1.0, float("nan")], #Arg0
+            [0.0,  0.0, 0.0, -0.5, float("nan"), 1.0] #Arg1
+        ]
+    },
+    'mix' : { #x + (y - x) * a
+        'arg_types': [F, F, F, F],
+        'function_type': 'tts',
+        'values': [
+            [0.5, -0.25, 0.0, -0.5, 1.0, 3.0, 10.0, float("nan"), float("nan"), float("nan")], #Result
+            [1.0, -0.5,  0.0,  0.0, 1.0, 4.0, 15.0, 5.0, 4.0, float("nan")], #Arg0
+            [0.0,  0.0,  0.0, -0.5, 2.0, 2.0, 10.0, -0.2, float("nan"), 1.5], #Arg1
+            [0.5,  0.5,  0.0,  1.0, 0.0, 0.5,  1.0, float("nan"), 1.0, 0.0], #Arg2
+        ]
+    },
+    'radians' : {
+        'arg_types': [F, F],
+        'function_type': 'ttt',
+        'values': [
+            [0.5,                   -0.5, pi,    0.0, 2*pi, 10*pi, 100*pi, pi/2], #Result
+            [degrees(0.5), degrees(-0.5), 180.0, 0.0, 360, 1800.0, 18000, 90] #Arg0
+        ]
+    },
+    #TODO Add scalar combination (tst?)
+    'step' : {
+        'arg_types': [F, F, F],
+        'function_type': 'ttt',
+        'values': [
+            [0.0,  1.0, 1.0,  0.0, 1.0, 1.0], #Result
+            [1.0, -0.5, 0.0,  0.0, 1.0, float("nan")], #Arg0
+            [0.0,  0.0, 0.0, -0.5, float("nan"), 1.0] #Arg1
+        ]
+    },
+    #TODO Add scalar combination (tst?)
+    'smoothstep' : {
+        'arg_types': [F, F, F, F],
+        'function_type': 'ttt',
+        'values': [
+            [0.0,  0.0, 1.0,  1.0, 0.5,  0.896], #Result
+            [0.0,  0.0, 0.0, -0.5, 0.0,  0.0], #Arg0
+            [1.0,  1.0, 0.5,  0.0, 0.5,  0.5], #Arg1
+            [-0.5, 0.0, 0.5,  1.0, 0.25, 0.4] #Arg2
+        ]
+    },
+    'sign' : {
+        'arg_types': [F, F],
+        'function_type': 'ttt',
+        'values': [
+            [1.0, -1.0, 0.0, -0.0, 0.0], #Result
+            [0.5, -0.5, 0.0, -0.0, float("nan")] #Arg0
+        ]
+    }
+}
+
+
+def main():
+    dirName = os.path.join("cl", "builtin", "common")
+
+    testDefs = {}
+    functions = sorted(tests.keys())
+    for dataType in DATA_TYPES:
+        for fnName in functions:
+            testDefs[(dataType, fnName)] = tests[fnName]
+
+    gen(DATA_TYPES, CLC_VERSION_MIN, functions, testDefs, dirName)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/generated_tests/gen_cl_math_builtins.py b/generated_tests/gen_cl_math_builtins.py
index 9f31d3c..ce7682d 100644
--- a/generated_tests/gen_cl_math_builtins.py
+++ b/generated_tests/gen_cl_math_builtins.py
@@ -57,10 +57,8 @@ CLC_VERSION_MIN = {
     'ldexp' : 10,
     'log10' : 10,
     'log1p' : 10,
-    'mix' : 10,
     'nextafter' : 10,
     'round' : 10,
-    'sign' : 10,
     'sin' : 10,
     'sinh' : 10,
     'sinpi' : 10,
@@ -317,16 +315,6 @@ tests = {
         ],
         'tolerance' : 2
     },
-    'mix' : { #x + (y - x) * a
-        'arg_types': [F, F, F, F],
-        'function_type': 'tts',
-        'values': [
-            [float("nan"), float("nan"), 1.0, 3.0, 10.0  ], # Result
-            [1.0         , 1.0,          1.0, 4.0, 15.0 ], # Arg0
-            [2.0         , float("nan"), 2.0, 2.0, 10.0 ], # Arg1
-            [float("nan"), 0.0,          0.0, 0.5, 1.0  ], # Arg2
-        ]
-    },
     'nextafter' : {
         'arg_types': [F, F, F],
         'function_type': 'ttt',
@@ -344,15 +332,6 @@ tests = {
             [0.5, -0.5, 0.0, -0.0, float("nan"), -3.99, 1.5, 0.4, 0.6]
         ]
     },
-    'sign' : { # This is really a Common function but it uses the same types
-               # as a lot of the math functions.
-        'arg_types': [F, F],
-        'function_type': 'ttt',
-        'values': [
-            [1.0, -1.0, 0.0, -0.0, 0.0],
-            [0.5, -0.5, 0.0, -0.0, float("nan")]
-        ]
-    },
     'sin' : {
         'arg_types' : [F, F],
         'function_type': 'ttt',
diff --git a/tests/cl.py b/tests/cl.py
index dbc9232..0640729 100644
--- a/tests/cl.py
+++ b/tests/cl.py
@@ -123,5 +123,8 @@ add_program_test_dir(grouptools.join('program', 'execute', 'builtin'),
 add_program_test_dir(grouptools.join('program', 'execute', 'builtin'),
                      os.path.join(GENERATED_TESTS_DIR, 'cl', 'builtin',
                                   'relational'))
+add_program_test_dir(grouptools.join('program', 'execute', 'builtin'),
+                     os.path.join(GENERATED_TESTS_DIR, 'cl', 'builtin',
+                                  'common'))
 add_program_test_dir(grouptools.join('program', 'execute', 'store'),
                      os.path.join(GENERATED_TESTS_DIR, 'cl', 'store'))
-- 
2.1.0



More information about the Piglit mailing list