diff --git a/test_conformance/geometrics/main.cpp b/test_conformance/geometrics/main.cpp index 45f2b069..f9d6d5e6 100644 --- a/test_conformance/geometrics/main.cpp +++ b/test_conformance/geometrics/main.cpp @@ -17,27 +17,14 @@ #include #include -#include "procs.h" #include "harness/testHarness.h" #if !defined(_WIN32) #include #endif -test_definition test_list[] = { - ADD_TEST( geom_cross ), - ADD_TEST( geom_dot ), - ADD_TEST( geom_distance ), - ADD_TEST( geom_fast_distance ), - ADD_TEST( geom_length ), - ADD_TEST( geom_fast_length ), - ADD_TEST( geom_normalize ), - ADD_TEST( geom_fast_normalize ), -}; - -const int test_num = ARRAY_SIZE( test_list ); - int main(int argc, const char *argv[]) { - return runTestHarness(argc, argv, test_num, test_list, false, 0); + return runTestHarness(argc, argv, test_registry::getInstance().num_tests(), + test_registry::getInstance().definitions(), false, 0); } diff --git a/test_conformance/geometrics/procs.h b/test_conformance/geometrics/procs.h deleted file mode 100644 index f9a96ff8..00000000 --- a/test_conformance/geometrics/procs.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (c) 2017 The Khronos Group Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "harness/errorHelpers.h" -#include "harness/kernelHelpers.h" -#include "harness/typeWrappers.h" - -extern int create_program_and_kernel(const char *source, const char *kernel_name, cl_program *program_ret, cl_kernel *kernel_ret); - -extern int test_geom_cross(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_dot(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_distance(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_fast_distance(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_length(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_fast_length(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_normalize(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); -extern int test_geom_fast_normalize(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements); - -extern int test_geom_cross_double(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, MTdata d); -extern int test_geom_dot_double(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, MTdata d); -extern int test_geom_distance_double(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, MTdata d); -extern int test_geom_length_double(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, MTdata d); -extern int test_geom_normalize_double(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, MTdata d); diff --git a/test_conformance/geometrics/testBase.h b/test_conformance/geometrics/testBase.h index 5b49bfd7..dc602a17 100644 --- a/test_conformance/geometrics/testBase.h +++ b/test_conformance/geometrics/testBase.h @@ -16,14 +16,30 @@ #ifndef _testBase_h #define _testBase_h +#include #include "harness/compat.h" +#include "harness/mt19937.h" #include #include #include #include -#include "procs.h" +extern int test_geom_cross_double(cl_device_id deviceID, cl_context context, + cl_command_queue queue, int num_elements, + MTdata d); +extern int test_geom_dot_double(cl_device_id deviceID, cl_context context, + cl_command_queue queue, int num_elements, + MTdata d); +extern int test_geom_distance_double(cl_device_id deviceID, cl_context context, + cl_command_queue queue, int num_elements, + MTdata d); +extern int test_geom_length_double(cl_device_id deviceID, cl_context context, + cl_command_queue queue, int num_elements, + MTdata d); +extern int test_geom_normalize_double(cl_device_id deviceID, cl_context context, + cl_command_queue queue, int num_elements, + MTdata d); #endif // _testBase_h diff --git a/test_conformance/geometrics/test_geometrics.cpp b/test_conformance/geometrics/test_geometrics.cpp index e305026c..2706dc3f 100644 --- a/test_conformance/geometrics/test_geometrics.cpp +++ b/test_conformance/geometrics/test_geometrics.cpp @@ -148,15 +148,13 @@ void cross_product( const float *vecA, const float *vecB, float *outVector, floa } - - -int test_geom_cross(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements ) +REGISTER_TEST(geom_cross) { int vecsize; RandomSeed seed(gRandomSeed); /* Get the default rounding mode */ - cl_device_fp_config defaultRoundingMode = get_default_rounding_mode(deviceID); + cl_device_fp_config defaultRoundingMode = get_default_rounding_mode(device); if( 0 == defaultRoundingMode ) return -1; @@ -269,12 +267,16 @@ int test_geom_cross(cl_device_id deviceID, cl_context context, cl_command_queue } } // for(vecsize=... - if(!is_extension_available(deviceID, "cl_khr_fp64")) { + if (!is_extension_available(device, "cl_khr_fp64")) + { log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); return 0; - } else { + } + else + { log_info("Testing doubles...\n"); - return test_geom_cross_double( deviceID, context, queue, num_elements, seed); + return test_geom_cross_double(device, context, queue, num_elements, + seed); } } @@ -497,7 +499,7 @@ double verifyDot( float *srcA, float *srcB, size_t vecSize ) return total; } -int test_geom_dot(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_dot) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size; @@ -516,14 +518,14 @@ int test_geom_dot(cl_device_id deviceID, cl_context context, cl_command_queue qu if (retVal) return retVal; - if(!is_extension_available(deviceID, "cl_khr_fp64")) + if (!is_extension_available(device, "cl_khr_fp64")) { log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); return 0; } log_info("Testing doubles...\n"); - return test_geom_dot_double( deviceID, context, queue, num_elements, seed); + return test_geom_dot_double(device, context, queue, num_elements, seed); } double verifyFastDistance( float *srcA, float *srcB, size_t vecSize ) @@ -542,7 +544,7 @@ double verifyFastDistance( float *srcA, float *srcB, size_t vecSize ) return sqrt( total ); } -int test_geom_fast_distance(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_fast_distance) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size; @@ -589,7 +591,7 @@ double verifyDistance( float *srcA, float *srcB, size_t vecSize ) return sqrt( total ); } -int test_geom_distance(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_distance) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size; @@ -616,13 +618,14 @@ int test_geom_distance(cl_device_id deviceID, cl_context context, cl_command_que if (retVal) return retVal; - if(!is_extension_available(deviceID, "cl_khr_fp64")) + if (!is_extension_available(device, "cl_khr_fp64")) { log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); return 0; } else { log_info("Testing doubles...\n"); - return test_geom_distance_double( deviceID, context, queue, num_elements, seed); + return test_geom_distance_double(device, context, queue, num_elements, + seed); } } @@ -754,7 +757,7 @@ double verifyLength( float *srcA, size_t vecSize ) return sqrt( total ); } -int test_geom_length(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_length) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size; @@ -781,7 +784,7 @@ int test_geom_length(cl_device_id deviceID, cl_context context, cl_command_queue if (retVal) return retVal; - if(!is_extension_available(deviceID, "cl_khr_fp64")) + if (!is_extension_available(device, "cl_khr_fp64")) { log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); return 0; @@ -789,7 +792,8 @@ int test_geom_length(cl_device_id deviceID, cl_context context, cl_command_queue else { log_info("Testing doubles...\n"); - return test_geom_length_double( deviceID, context, queue, num_elements, seed); + return test_geom_length_double(device, context, queue, num_elements, + seed); } } @@ -809,7 +813,7 @@ double verifyFastLength( float *srcA, size_t vecSize ) return sqrt( total ); } -int test_geom_fast_length(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_fast_length) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size; @@ -1059,7 +1063,7 @@ void verifyNormalize( float *srcA, float *dst, size_t vecSize ) dst[i] = (float)( (double)srcA[i] / value ); } -int test_geom_normalize(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_normalize) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size; @@ -1084,18 +1088,19 @@ int test_geom_normalize(cl_device_id deviceID, cl_context context, cl_command_qu if (retVal) return retVal; - if(!is_extension_available(deviceID, "cl_khr_fp64")) + if (!is_extension_available(device, "cl_khr_fp64")) { log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); return 0; } else { log_info("Testing doubles...\n"); - return test_geom_normalize_double( deviceID, context, queue, num_elements, seed); + return test_geom_normalize_double(device, context, queue, num_elements, + seed); } } -int test_geom_fast_normalize(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +REGISTER_TEST(geom_fast_normalize) { size_t sizes[] = { 1, 2, 3, 4, 0 }; unsigned int size;