File: CMakeLists.txt

package info (click to toggle)
pocl 6.0-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 25,320 kB
  • sloc: lisp: 149,513; ansic: 103,778; cpp: 54,947; python: 1,513; sh: 949; ruby: 255; pascal: 226; tcl: 180; makefile: 175; java: 72; xml: 49
file content (1020 lines) | stat: -rw-r--r-- 63,471 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
#=============================================================================
#   CMake build system files
#
#   Copyright (c) 2017 Michal Babej / Tampere University of Technology
#
#   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 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.
#
#=============================================================================

set(TS_NAME "conformance")
set(TS_BASEDIR "${TESTSUITE_BASEDIR}/${TS_NAME}")
set(TS_BUILDDIR "${TS_BASEDIR}/src/${TS_NAME}-build")
set(TS_SRCDIR "${TS_BASEDIR}/src/${TS_NAME}")

if(NOT HAVE_GIT)
  message(STATUS "Disabling testsuite ${TS_NAME}, requires git to checkout sources")
  return()
endif()

if(ENABLE_ICD AND (NOT OPENCL_LIBRARIES))
  message(STATUS "Disabling ${TS_NAME}, can't find OpenCL library")
  return()
endif()

# for SPIR-V tests
find_program(SPIRV_AS "spirv-as")
find_program(SPIRV_VAL "spirv-val")
if(SPIRV_AS AND SPIRV_VAL)
  set(HAVE_SPIRV_TOOLS 1)
endif()

# the CTS is compiled against:
#    OpenCL headers in <POCL>/include/CL, which are 3.0
#    OpenCL library, which might be libpocl or ICD; we need to check ICD is 3.0 compatible
if(ENABLE_ICD AND HAVE_OCL_ICD AND (NOT HAVE_OCL_ICD_30_COMPATIBLE))
  message(STATUS "OCL-ICD is not compatible with OpenCL-CTS version 3, disabling CTS")
  return()
endif()

# if ENABLE_CONFORMANCE is OFF (default), the CTS reports a lot of failures with CPU driver
if(ENABLE_HOST_CPU_DEVICES AND (NOT ENABLE_CONFORMANCE))
  message(WARNING "OpenCL-CTS + CPU driver need ENABLE_CONFORMANCE=ON, disabling CTS")
  return()
endif()

message(STATUS "Enabling testsuite ${TS_NAME} (OpenCL-CTS version 3)")
list(APPEND ACTUALLY_ENABLED_TESTSUITES "${TS_NAME}")
set(ACTUALLY_ENABLED_TESTSUITES ${ACTUALLY_ENABLED_TESTSUITES} PARENT_SCOPE)

if(ENABLE_ICD)
  if(OPENCL_LIBRARIES AND (NOT OPENCL_LIBDIR))
    get_filename_component(OPENCL_LIBDIR "${OPENCL_LIBRARIES}" DIRECTORY)
  endif()
  set(CTS_OPENCL_LIBDIR "-DCL_LIB_DIR=${OPENCL_LIBDIR}")
  set(CTS_OPENCL_LIBRARY "-DOPENCL_LIBRARIES=${OPENCL_LIBRARIES}")
else()
  set(CTS_OPENCL_LIBDIR "-DCL_LIB_DIR=$<TARGET_FILE_DIR:${POCL_LIBRARY_NAME}>")
  set(CTS_OPENCL_LIBRARY "-DOPENCL_LIBRARIES=$<TARGET_FILE_NAME:${POCL_LIBRARY_NAME}>")
endif()

if(CUSTOM_CTS_GIT_REPO)
  set(CTS_GIT_REPO "${CUSTOM_CTS_GIT_REPO}")
else()
  # Use PoCL's fork which has pending fixes.
  set(CTS_GIT_REPO "https://github.com/pocl/OpenCL-CTS")
endif()
if(CUSTOM_CTS_GIT_TAG)
  set(CTS_GIT_TAG "${CUSTOM_CTS_GIT_TAG}")
else()
  # Use PoCL's fork which has pending fixes.
  set(CTS_GIT_TAG "v2024.06.15")
endif()

set(TS_BUILDDIR "${TS_BUILDDIR}/test_conformance")
set(TS_SRCDIR "${TS_SRCDIR}/test_conformance")

if(ENABLE_SPIRV AND HAVE_SPIRV_TOOLS)
  # build SPIR-V binary files required by the SPIR-V subtests
  set(CTS_INSTALL_COMMAND "${TS_SRCDIR}/spirv_new/assemble_spirv.py"
    "-s" "${TS_SRCDIR}/spirv_new/spirv_asm"
    "-o" "${TS_BUILDDIR}/spirv_new/spirv_bin"
    "-a" "${SPIRV_AS}"
    "-l" "${SPIRV_VAL}")
else()
  message(WARNING "spirv tools not found - disabling SPIRV tests in CTS")
  set(CTS_INSTALL_COMMAND echo "INSTALLED")
endif()

set(UPSTREAM_CMAKE_ARGS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
if(CMAKE_C_COMPILER_LAUNCHER)
  list(APPEND UPSTREAM_CMAKE_ARGS "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}")
endif()
if(CMAKE_CXX_COMPILER_LAUNCHER)
  list(APPEND UPSTREAM_CMAKE_ARGS "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}")
endif()


ExternalProject_Add(
  ${TS_NAME}
  PREFIX "${TS_BASEDIR}"
  GIT_REPOSITORY "${CTS_GIT_REPO}"
  GIT_TAG "${CTS_GIT_TAG}"
  ${GIT_OPTIONS}
  CONFIGURE_COMMAND ${CMAKE_COMMAND}
    ${UPSTREAM_CMAKE_ARGS}
    -DD3D10_IS_SUPPORTED=0 -DD3D11_IS_SUPPORTED=0
    -DGL_IS_SUPPORTED=0 -DGLES_IS_SUPPORTED=0
    -DCL_INCLUDE_DIR=${CMAKE_SOURCE_DIR}/include
    ${CTS_OPENCL_LIBDIR}
    ${CTS_OPENCL_LIBRARY}
    -DENABLE_ASAN=${ENABLE_ASAN}
    -DENABLE_TSAN=${ENABLE_TSAN}
    "${TS_BASEDIR}/src/${TS_NAME}"
  INSTALL_COMMAND ${CTS_INSTALL_COMMAND}
)


set_target_properties(${TS_NAME} PROPERTIES EXCLUDE_FROM_ALL TRUE)
add_dependencies(prepare_examples ${TS_NAME})

# unfortunately, math_brute_force is not thread-safe;
# run each test separately with 1 worker thread
# math_brute_force/test_bruteforce -p
set(MATH_FUNC_LIST acos acosh acospi asin asinh asinpi atan atanh atanpi atan2 atan2pi
  cbrt ceil copysign cos cosh cospi exp exp2 exp10 expm1 fabs fdim
  floor fma fmax fmin fmod fract frexp hypot ilogb isequal isfinite
  isgreater isgreaterequal isinf isless islessequal islessgreater isnan
  isnormal isnotequal isordered isunordered ldexp lgamma lgamma_r log
  log2 log10 log1p logb mad maxmag minmag modf nan nextafter pow pown
  powr remainder remquo rint rootn round rsqrt signbit sin sincos sinh
  sinpi sqrt sqrt_cr tan tanh tanpi trunc half_cos half_divide half_exp
  half_exp2 half_exp10 half_log half_log2 half_log10 half_powr
  half_recip half_rsqrt half_sin half_sqrt half_tan add subtract divide
  divide_cr multiply assignment not)


#################################################################################
#################################################################################
########################   FULL   ###############################################
#################################################################################
#################################################################################


function(add_cts_full_tests CTS_LABEL TS_SUFFIX)
set(EXTRA_ARGS ${ARGN})
add_test(NAME "${TS_NAME}${TS_SUFFIX}_allocations"
         COMMAND "${TS_BUILDDIR}/allocations/test_allocations" ${EXTRA_ARGS})

set(TEST_THREADS ${HOST_CPU_CORECOUNT})
if(HOST_CPU_CORECOUNT LESS 4)
  set(TEST_THREADS 4)
endif()
if(HOST_CPU_CORECOUNT GREATER 8)
  set(TEST_THREADS 8)
endif()
set(PAR_ARG "--num-worker-threads" ${TEST_THREADS})

# TODO fix this in pocl's fork:::
# on recent LLVMs, run all tests except the get_kernel_arg_info.
# That test incorrectly assumes "const" type qualifiers are returned
# for non-pointer arguments too. The spec PDF says type qualifiers
# are only returned for pointer types, so the test is incorrect AFAICT
add_test(NAME "${TS_NAME}${TS_SUFFIX}_api"
           COMMAND "${TS_BUILDDIR}/api/test_api" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_atomics"
         COMMAND "${TS_BUILDDIR}/atomics/test_atomics" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_basic"
         COMMAND "${TS_BUILDDIR}/basic/test_basic" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_commonfns"
         COMMAND "${TS_BUILDDIR}/commonfns/test_commonfns" ${EXTRA_ARGS} )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_compiler"
         COMMAND "${TS_BUILDDIR}/compiler/test_compiler" ${EXTRA_ARGS}
         WORKING_DIRECTORY "${TS_BASEDIR}/src/${TS_NAME}/test_conformance/compiler")

add_test(NAME "${TS_NAME}${TS_SUFFIX}_c11_atomics"
         COMMAND "${TS_BUILDDIR}/c11_atomics/test_c11_atomics" ${PAR_ARG} ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_computeinfo"
         COMMAND "${TS_BUILDDIR}/computeinfo/test_computeinfo" ${EXTRA_ARGS} )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_contractions"
         COMMAND "${TS_BUILDDIR}/contractions/test_contractions" ${EXTRA_ARGS} )

foreach(VEC_SIZE 1 2 3 4 8 16)
  list(APPEND CTS_CONV_TESTS_FULL "${TS_NAME}${TS_SUFFIX}_conversions_full_${VEC_SIZE}")
  add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversions_full_${VEC_SIZE}"
           COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${PAR_ARG} ${EXTRA_ARGS} "-${VEC_SIZE}")
endforeach()


add_test(NAME "${TS_NAME}${TS_SUFFIX}_device_partition"
         COMMAND "${TS_BUILDDIR}/device_partition/test_device_partition" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_device_execution"
         COMMAND "${TS_BUILDDIR}/device_execution/test_device_execution" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_device_timer"
         COMMAND "${TS_BUILDDIR}/device_timer/test_device_timer" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_events"
         COMMAND "${TS_BUILDDIR}/events/test_events" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_generic_AS"
         COMMAND "${TS_BUILDDIR}/generic_address_space/test_generic_address_space" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_geometrics"
         COMMAND "${TS_BUILDDIR}/geometrics/test_geometrics" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_half"
         COMMAND "${TS_BUILDDIR}/half/test_half" ${EXTRA_ARGS})

#***************************************************************************

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images"
         COMMAND "${TS_BUILDDIR}/images/clCopyImage/test_cl_copy_images" ${EXTRA_ARGS})
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images_max"
         COMMAND "${TS_BUILDDIR}/images/clCopyImage/test_cl_copy_images" ${EXTRA_ARGS} max_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images_min"
         COMMAND "${TS_BUILDDIR}/images/clCopyImage/test_cl_copy_images" ${EXTRA_ARGS} small_images)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images"
         COMMAND "${TS_BUILDDIR}/images/clFillImage/test_cl_fill_images" ${EXTRA_ARGS})
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images_min"
         COMMAND "${TS_BUILDDIR}/images/clFillImage/test_cl_fill_images" ${EXTRA_ARGS} small_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images_max"
         COMMAND "${TS_BUILDDIR}/images/clFillImage/test_cl_fill_images" ${EXTRA_ARGS} max_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images_pitch"
         COMMAND "${TS_BUILDDIR}/images/clFillImage/test_cl_fill_images" ${EXTRA_ARGS} use_pitches)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_get_info"
         COMMAND "${TS_BUILDDIR}/images/clGetInfo/test_cl_get_info" ${EXTRA_ARGS} )
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_get_info_min"
         COMMAND "${TS_BUILDDIR}/images/clGetInfo/test_cl_get_info" ${EXTRA_ARGS} small_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_get_info_max"
         COMMAND "${TS_BUILDDIR}/images/clGetInfo/test_cl_get_info" ${EXTRA_ARGS} max_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_get_info_random"
         COMMAND "${TS_BUILDDIR}/images/clGetInfo/test_cl_get_info" ${EXTRA_ARGS} randomize)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images"
         COMMAND "${TS_BUILDDIR}/images/clReadWriteImage/test_cl_read_write_images" ${EXTRA_ARGS} )
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images_min"
         COMMAND "${TS_BUILDDIR}/images/clReadWriteImage/test_cl_read_write_images" ${EXTRA_ARGS} small_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images_max"
         COMMAND "${TS_BUILDDIR}/images/clReadWriteImage/test_cl_read_write_images" ${EXTRA_ARGS} max_images)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images_pitch"
         COMMAND "${TS_BUILDDIR}/images/clReadWriteImage/test_cl_read_write_images" ${EXTRA_ARGS} use_pitches)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_kernel_image_methods"
         COMMAND "${TS_BUILDDIR}/images/kernel_image_methods/test_kernel_image_methods" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_image_streams"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_image_streams_pitch"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS} use_pitches)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_samplerless_reads"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_samplerless_reads_pitch"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS} use_pitches)

#***************************************************************************

add_test(NAME "${TS_NAME}${TS_SUFFIX}_integer_ops"
         COMMAND "${TS_BUILDDIR}/integer_ops/test_integer_ops" ${PAR_ARG} ${EXTRA_ARGS})

#***************************************************************************

unset(CTS_MATH_TESTS_FULL)
foreach(MATH_FUNC ${MATH_FUNC_LIST})
  list(APPEND CTS_MATH_TESTS_FULL "${TS_NAME}${TS_SUFFIX}_math_full_${MATH_FUNC}")
  add_test(NAME "${TS_NAME}${TS_SUFFIX}_math_full_${MATH_FUNC}"
           COMMAND "${TS_BUILDDIR}/math_brute_force/test_bruteforce" ${EXTRA_ARGS} --num-worker-threads 1 ${MATH_FUNC})
endforeach()

#***************************************************************************

add_test(NAME "${TS_NAME}${TS_SUFFIX}_mem_host_flags"
         COMMAND "${TS_BUILDDIR}/mem_host_flags/test_mem_host_flags" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_multiples"
         COMMAND "${TS_BUILDDIR}/multiple_device_context/test_multiples" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_non_uniform_work_group"
         COMMAND "${TS_BUILDDIR}/non_uniform_work_group/test_non_uniform_work_group" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_pipes"
         COMMAND "${TS_BUILDDIR}/pipes/test_pipes" ${EXTRA_ARGS})

# Two tests (vector_1 vector_2) fail when run with SPIR-V input, but work with C source input.
# details in issue #1017
add_test(NAME "${TS_NAME}${TS_SUFFIX}_printf"
         COMMAND "${TS_BUILDDIR}/printf/test_printf" ${EXTRA_ARGS}
           int_0 int_1 int_2 int_3 int_4 int_5 int_6 int_7 int_8 half_0 half_1 half_2 half_3 half_4 half_5 half_6 half_7 half_8 half_9 half_limits_0 half_limits_1 half_limits_2 float_0
           float_1 float_2 float_3 float_4 float_5 float_6 float_7 float_8 float_9 float_10 float_11 float_12 float_13 float_14 float_15 float_16 float_17 float_limits_0 float_limits_1
           float_limits_2 octal_0 octal_1 octal_2 octal_3 unsigned_0 unsigned_1 hexadecimal_0 hexadecimal_1 hexadecimal_2 hexadecimal_3 hexadecimal_4 char_0 char_1 char_2 string_0
           string_1 string_2 vector_0 vector_3 vector_4 vector_5 address_space_0 address_space_1 address_space_2 address_space_3 address_space_4 buffer_size
         WORKING_DIRECTORY "${TS_BASEDIR}/src/${TS_NAME}/test_conformance/printf")

add_test(NAME "${TS_NAME}${TS_SUFFIX}_profiling"
         COMMAND "${TS_BUILDDIR}/profiling/test_profiling" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_relationals"
         COMMAND "${TS_BUILDDIR}/relationals/test_relationals" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_select"
         COMMAND "${TS_BUILDDIR}/select/test_select" ${PAR_ARG} ${EXTRA_ARGS})


if(ENABLE_SPIRV AND HAVE_SPIRV_TOOLS)

# this test requires a fix in llvm-spirv
# https://github.com/KhronosGroup/SPIRV-LLVM-Translator/pull/1630
option(LLVM_SPIRV_SPEC_CONST "llvm-spirv has working --spec-const option" OFF)
unset(SPIRV_OCL_30_EXTRA_TEST)
if(LLVM_SPIRV_SPEC_CONST OR (LLVM_VERSION VERSION_GREATER_EQUAL 16.0))
  set(SPIRV_OCL_30_EXTRA_TEST op_spec_constant_double_simple)
endif()

add_test(NAME "${TS_NAME}${TS_SUFFIX}_spirv_new"
         COMMAND "${TS_BUILDDIR}/spirv_new/test_spirv_new" ${EXTRA_ARGS}
         WORKING_DIRECTORY "${TS_BUILDDIR}/spirv_new")

endif()

add_test(NAME "${TS_NAME}${TS_SUFFIX}_subgroups"
         COMMAND "${TS_BUILDDIR}/subgroups/test_subgroups" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_SVM"
         COMMAND "${TS_BUILDDIR}/SVM/test_svm" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_thread_dimensions"
         COMMAND "${TS_BUILDDIR}/thread_dimensions/test_thread_dimensions" ${PAR_ARG} ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_vectors"
         COMMAND "${TS_BUILDDIR}/vectors/test_vectors" ${PAR_ARG} ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_workgroup"
         COMMAND "${TS_BUILDDIR}/workgroups/test_workgroups" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_cl_ext_cxx"
         COMMAND "${TS_BUILDDIR}/extensions/cl_ext_cxx_for_opencl/test_cl_ext_cxx_for_opencl" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_cl_khr_command_buffer"
         COMMAND "${TS_BUILDDIR}/extensions/cl_khr_command_buffer/test_cl_khr_command_buffer" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_cl_khr_command_buffer_mutable"
         COMMAND "${TS_BUILDDIR}/extensions/cl_khr_command_buffer/cl_khr_command_buffer_mutable_dispatch/test_cl_khr_mutable_dispatch" ${EXTRA_ARGS})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_cl_khr_semaphore"
         COMMAND "${TS_BUILDDIR}/extensions/cl_khr_semaphore/test_cl_khr_semaphore" ${EXTRA_ARGS})

set(OCL_30_TESTS_FULL
    "${TS_NAME}${TS_SUFFIX}_api"
    "${TS_NAME}${TS_SUFFIX}_basic"
    "${TS_NAME}${TS_SUFFIX}_c11_atomics"
    "${TS_NAME}${TS_SUFFIX}_device_execution"
    "${TS_NAME}${TS_SUFFIX}_device_timer"
    "${TS_NAME}${TS_SUFFIX}_generic_AS"
    "${TS_NAME}${TS_SUFFIX}_integer_ops"
    "${TS_NAME}${TS_SUFFIX}_non_uniform_work_group"
    "${TS_NAME}${TS_SUFFIX}_pipes"
    "${TS_NAME}${TS_SUFFIX}_select"
    "${TS_NAME}${TS_SUFFIX}_select"
    "${TS_NAME}${TS_SUFFIX}_subgroups"
    "${TS_NAME}${TS_SUFFIX}_SVM"
    "${TS_NAME}${TS_SUFFIX}_workgroup"
    "${TS_NAME}${TS_SUFFIX}_cl_ext_cxx"
    "${TS_NAME}${TS_SUFFIX}_cl_khr_command_buffer"
    "${TS_NAME}${TS_SUFFIX}_cl_khr_command_buffer_mutable"
    "${TS_NAME}${TS_SUFFIX}_cl_khr_semaphore"
)

if(ENABLE_SPIRV AND HAVE_SPIRV_TOOLS)
  list(APPEND OCL_30_TESTS_FULL
    "${TS_NAME}${TS_SUFFIX}_spirv_new")
endif()

set(CTS_FULL_LIST
    "${TS_NAME}${TS_SUFFIX}_allocations"
    "${TS_NAME}${TS_SUFFIX}_api"
    "${TS_NAME}${TS_SUFFIX}_atomics"
    "${TS_NAME}${TS_SUFFIX}_basic"
    "${TS_NAME}${TS_SUFFIX}_buffers"
    "${TS_NAME}${TS_SUFFIX}_commonfns"
    "${TS_NAME}${TS_SUFFIX}_compiler"
    "${TS_NAME}${TS_SUFFIX}_computeinfo"
    "${TS_NAME}${TS_SUFFIX}_contractions"
    "${TS_NAME}${TS_SUFFIX}_device_partition"
    "${TS_NAME}${TS_SUFFIX}_events"
    "${TS_NAME}${TS_SUFFIX}_geometrics"
    "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images"
    "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images_max"
    "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images_min"
    "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images"
    "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images_min"
    "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images_max"
    "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images_pitch"
    "${TS_NAME}${TS_SUFFIX}_images_cl_get_info"
    "${TS_NAME}${TS_SUFFIX}_images_cl_get_info_min"
    "${TS_NAME}${TS_SUFFIX}_images_cl_get_info_max"
    "${TS_NAME}${TS_SUFFIX}_images_cl_get_info_random"
    "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images"
    "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images_min"
    "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images_max"
    "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images_pitch"
    "${TS_NAME}${TS_SUFFIX}_images_kernel_image_methods"
    "${TS_NAME}${TS_SUFFIX}_images_image_streams"
    "${TS_NAME}${TS_SUFFIX}_images_image_streams_pitch"
    "${TS_NAME}${TS_SUFFIX}_images_samplerless_reads"
    "${TS_NAME}${TS_SUFFIX}_images_samplerless_reads_pitch"
    "${TS_NAME}${TS_SUFFIX}_integer_ops"
    "${TS_NAME}${TS_SUFFIX}_mem_host_flags"
    "${TS_NAME}${TS_SUFFIX}_multiples"
    "${TS_NAME}${TS_SUFFIX}_printf"
    "${TS_NAME}${TS_SUFFIX}_profiling"
    "${TS_NAME}${TS_SUFFIX}_relationals"
    "${TS_NAME}${TS_SUFFIX}_select"
    "${TS_NAME}${TS_SUFFIX}_thread_dimensions"
    "${TS_NAME}${TS_SUFFIX}_vectors"
    ${CTS_MATH_TESTS_FULL}
    ${CTS_CONV_TESTS_FULL}
    ${OCL_30_TESTS_FULL})

foreach(CTSTEST IN LISTS CTS_FULL_LIST)
  set_property(TEST ${CTSTEST}
    APPEND PROPERTY
    LABELS ${CTS_LABEL})
  set_property(TEST ${CTSTEST}
    PROPERTY
    ENVIRONMENT "POCL_MEMORY_LIMIT=1")
endforeach()

set_property(TEST ${OCL_30_TESTS_FULL}
             APPEND PROPERTY LABELS "conformance_30_only")
set_property(TEST "${TS_NAME}${TS_SUFFIX}_non_uniform_work_group"
             PROPERTY ENVIRONMENT "POCL_MEMORY_LIMIT=4")
endfunction()

# add the full testsuite with online compilation from sources
add_cts_full_tests("conformance_suite_full_main" "_main")

# these are only approximate costs from one particular machine.
# CTest launches the tests in order from most expensive to least,
# so this helps to minimize the testsuite runtime.
set_property(TEST conformance_main_allocations  PROPERTY COST 22.57 )
set_property(TEST conformance_main_api  PROPERTY COST 419.97 )
set_property(TEST conformance_main_atomics  PROPERTY COST 178.95 )
set_property(TEST conformance_main_basic  PROPERTY COST 3883.63 )
set_property(TEST conformance_main_buffers  PROPERTY COST 1722.42 )
set_property(TEST conformance_main_c11_atomics  PROPERTY COST 59180.39 )
set_property(TEST conformance_main_cl_ext_cxx  PROPERTY COST 0.16 )
set_property(TEST conformance_main_cl_khr_command_buffer_mutable  PROPERTY COST 0.21 )
set_property(TEST conformance_main_cl_khr_command_buffer  PROPERTY COST 147.32 )
set_property(TEST conformance_main_cl_khr_semaphore  PROPERTY COST 0.20 )
set_property(TEST conformance_main_commonfns  PROPERTY COST 262.97 )
set_property(TEST conformance_main_compiler  PROPERTY COST 2395.25 )
set_property(TEST conformance_main_computeinfo  PROPERTY COST 0.17 )
set_property(TEST conformance_main_contractions  PROPERTY COST 21.64 )
set_property(TEST conformance_main_conversions_full_16  PROPERTY COST 65118.15 )
set_property(TEST conformance_main_conversions_full_1  PROPERTY COST 67196.35 )
set_property(TEST conformance_main_conversions_full_2  PROPERTY COST 67117.25 )
set_property(TEST conformance_main_conversions_full_3  PROPERTY COST 67123.59 )
set_property(TEST conformance_main_conversions_full_4  PROPERTY COST 65299.56 )
set_property(TEST conformance_main_conversions_full_8  PROPERTY COST 64943.81 )
set_property(TEST conformance_main_device_execution  PROPERTY COST 0.10 )
set_property(TEST conformance_main_device_partition  PROPERTY COST 16.30 )
set_property(TEST conformance_main_device_timer  PROPERTY COST 0.14 )
set_property(TEST conformance_main_events  PROPERTY COST 112.32 )
set_property(TEST conformance_main_generic_AS  PROPERTY COST 488.13 )
set_property(TEST conformance_main_geometrics  PROPERTY COST 66.39 )
set_property(TEST conformance_main_images_cl_copy_images_max  PROPERTY COST 76.51 )
set_property(TEST conformance_main_images_cl_copy_images_min  PROPERTY COST 500.02 )
set_property(TEST conformance_main_images_cl_copy_images  PROPERTY COST 69.64 )
set_property(TEST conformance_main_images_cl_fill_images_max  PROPERTY COST 23.65 )
set_property(TEST conformance_main_images_cl_fill_images_min  PROPERTY COST 116.38 )
set_property(TEST conformance_main_images_cl_fill_images_pitch  PROPERTY COST 15.76 )
set_property(TEST conformance_main_images_cl_fill_images  PROPERTY COST 16.28 )
set_property(TEST conformance_main_images_cl_get_info_max  PROPERTY COST 24.76 )
set_property(TEST conformance_main_images_cl_get_info_min  PROPERTY COST 2.68 )
set_property(TEST conformance_main_images_cl_get_info  PROPERTY COST 18.84 )
set_property(TEST conformance_main_images_cl_get_info_random  PROPERTY COST 18.14 )
set_property(TEST conformance_main_images_cl_read_write_images_max  PROPERTY COST 4.43 )
set_property(TEST conformance_main_images_cl_read_write_images_min  PROPERTY COST 13.86 )
set_property(TEST conformance_main_images_cl_read_write_images_pitch  PROPERTY COST 6.59 )
set_property(TEST conformance_main_images_cl_read_write_images  PROPERTY COST 4.17 )
set_property(TEST conformance_main_images_image_streams_pitch  PROPERTY COST 5305.76 )
set_property(TEST conformance_main_images_image_streams  PROPERTY COST 5333.81 )
set_property(TEST conformance_main_images_kernel_image_methods  PROPERTY COST 417.62 )
set_property(TEST conformance_main_images_samplerless_reads_pitch  PROPERTY COST 201.42 )
set_property(TEST conformance_main_images_samplerless_reads  PROPERTY COST 192.28 )
set_property(TEST conformance_main_integer_ops  PROPERTY COST 19966.25 )
set_property(TEST conformance_main_integer_ops  PROPERTY COST 4114.23 )
set_property(TEST conformance_main_math_full_acosh  PROPERTY COST 3138.29 )
set_property(TEST conformance_main_math_full_acospi  PROPERTY COST 3197.51 )
set_property(TEST conformance_main_math_full_acos  PROPERTY COST 3103.80 )
set_property(TEST conformance_main_math_full_add  PROPERTY COST 648.62 )
set_property(TEST conformance_main_math_full_asinh  PROPERTY COST 3030.94 )
set_property(TEST conformance_main_math_full_asinpi  PROPERTY COST 2187.54 )
set_property(TEST conformance_main_math_full_asin  PROPERTY COST 2940.91 )
set_property(TEST conformance_main_math_full_assignment  PROPERTY COST 473.79 )
set_property(TEST conformance_main_math_full_atan2pi  PROPERTY COST 3454.30 )
set_property(TEST conformance_main_math_full_atan2  PROPERTY COST 3786.13 )
set_property(TEST conformance_main_math_full_atanh  PROPERTY COST 1944.46 )
set_property(TEST conformance_main_math_full_atanpi  PROPERTY COST 1422.64 )
set_property(TEST conformance_main_math_full_atan  PROPERTY COST 3526.99 )
set_property(TEST conformance_main_math_full_cbrt  PROPERTY COST 4331.50 )
set_property(TEST conformance_main_math_full_ceil  PROPERTY COST 807.80 )
set_property(TEST conformance_main_math_full_copysign  PROPERTY COST 757.51 )
set_property(TEST conformance_main_math_full_cosh  PROPERTY COST 2449.31 )
set_property(TEST conformance_main_math_full_cospi  PROPERTY COST 2281.87 )
set_property(TEST conformance_main_math_full_cos  PROPERTY COST 5133.05 )
set_property(TEST conformance_main_math_full_divide_cr  PROPERTY COST 671.79 )
set_property(TEST conformance_main_math_full_divide  PROPERTY COST 968.44 )
set_property(TEST conformance_main_math_full_exp10  PROPERTY COST 2694.33 )
set_property(TEST conformance_main_math_full_exp2  PROPERTY COST 2410.00 )
set_property(TEST conformance_main_math_full_expm1  PROPERTY COST 2479.32 )
set_property(TEST conformance_main_math_full_exp  PROPERTY COST 1393.40 )
set_property(TEST conformance_main_math_full_fabs  PROPERTY COST 607.25 )
set_property(TEST conformance_main_math_full_fdim  PROPERTY COST 646.92 )
set_property(TEST conformance_main_math_full_floor  PROPERTY COST 599.64 )
set_property(TEST conformance_main_math_full_fma  PROPERTY COST 2109.31 )
set_property(TEST conformance_main_math_full_fmax  PROPERTY COST 608.06 )
set_property(TEST conformance_main_math_full_fmin  PROPERTY COST 517.41 )
set_property(TEST conformance_main_math_full_fmod  PROPERTY COST 14052.36 )
set_property(TEST conformance_main_math_full_fract  PROPERTY COST 3956.72 )
set_property(TEST conformance_main_math_full_frexp  PROPERTY COST 1907.32 )
set_property(TEST conformance_main_math_full_half_cos  PROPERTY COST 1232.52 )
set_property(TEST conformance_main_math_full_half_divide  PROPERTY COST 227.15 )
set_property(TEST conformance_main_math_full_half_exp10  PROPERTY COST 328.48 )
set_property(TEST conformance_main_math_full_half_exp2  PROPERTY COST 350.81 )
set_property(TEST conformance_main_math_full_half_exp  PROPERTY COST 303.30 )
set_property(TEST conformance_main_math_full_half_log10  PROPERTY COST 509.45 )
set_property(TEST conformance_main_math_full_half_log2  PROPERTY COST 427.99 )
set_property(TEST conformance_main_math_full_half_log  PROPERTY COST 481.66 )
set_property(TEST conformance_main_math_full_half_powr  PROPERTY COST 3278.41 )
set_property(TEST conformance_main_math_full_half_recip  PROPERTY COST 141.40 )
set_property(TEST conformance_main_math_full_half_rsqrt  PROPERTY COST 237.67 )
set_property(TEST conformance_main_math_full_half_sin  PROPERTY COST 1488.89 )
set_property(TEST conformance_main_math_full_half_sqrt  PROPERTY COST 201.16 )
set_property(TEST conformance_main_math_full_half_tan  PROPERTY COST 1737.21 )
set_property(TEST conformance_main_math_full_hypot  PROPERTY COST 1878.40 )
set_property(TEST conformance_main_math_full_ilogb  PROPERTY COST 954.91 )
set_property(TEST conformance_main_math_full_isequal  PROPERTY COST 450.78 )
set_property(TEST conformance_main_math_full_isfinite  PROPERTY COST 497.64 )
set_property(TEST conformance_main_math_full_isgreaterequal  PROPERTY COST 578.31 )
set_property(TEST conformance_main_math_full_isgreater  PROPERTY COST 585.93 )
set_property(TEST conformance_main_math_full_isinf  PROPERTY COST 514.07 )
set_property(TEST conformance_main_math_full_islessequal  PROPERTY COST 651.68 )
set_property(TEST conformance_main_math_full_islessgreater  PROPERTY COST 669.23 )
set_property(TEST conformance_main_math_full_isless  PROPERTY COST 610.62 )
set_property(TEST conformance_main_math_full_isnan  PROPERTY COST 638.78 )
set_property(TEST conformance_main_math_full_isnormal  PROPERTY COST 627.05 )
set_property(TEST conformance_main_math_full_isnotequal  PROPERTY COST 654.13 )
set_property(TEST conformance_main_math_full_isordered  PROPERTY COST 661.03 )
set_property(TEST conformance_main_math_full_isunordered  PROPERTY COST 652.58 )
set_property(TEST conformance_main_math_full_ldexp  PROPERTY COST 749.75 )
set_property(TEST conformance_main_math_full_lgamma  PROPERTY COST 6710.62 )
set_property(TEST conformance_main_math_full_lgamma_r  PROPERTY COST 17372.82 )
set_property(TEST conformance_main_math_full_log10  PROPERTY COST 1924.67 )
set_property(TEST conformance_main_math_full_log1p  PROPERTY COST 1946.84 )
set_property(TEST conformance_main_math_full_log2  PROPERTY COST 1979.56 )
set_property(TEST conformance_main_math_full_logb  PROPERTY COST 518.55 )
set_property(TEST conformance_main_math_full_log  PROPERTY COST 1956.90 )
set_property(TEST conformance_main_math_full_mad  PROPERTY COST 1642.43 )
set_property(TEST conformance_main_math_full_maxmag  PROPERTY COST 722.58 )
set_property(TEST conformance_main_math_full_minmag  PROPERTY COST 704.73 )
set_property(TEST conformance_main_math_full_modf  PROPERTY COST 2491.87 )
set_property(TEST conformance_main_math_full_multiply  PROPERTY COST 699.38 )
set_property(TEST conformance_main_math_full_nan  PROPERTY COST 6099.39 )
set_property(TEST conformance_main_math_full_nextafter  PROPERTY COST 658.28 )
set_property(TEST conformance_main_math_full_not  PROPERTY COST 520.80 )
set_property(TEST conformance_main_math_full_pown  PROPERTY COST 5350.59 )
set_property(TEST conformance_main_math_full_pow  PROPERTY COST 9478.13 )
set_property(TEST conformance_main_math_full_powr  PROPERTY COST 6459.85 )
set_property(TEST conformance_main_math_full_remainder  PROPERTY COST 17077.25 )
set_property(TEST conformance_main_math_full_remquo  PROPERTY COST 24281.00 )
set_property(TEST conformance_main_math_full_rint  PROPERTY COST 795.26 )
set_property(TEST conformance_main_math_full_rootn  PROPERTY COST 6853.61 )
set_property(TEST conformance_main_math_full_round  PROPERTY COST 615.01 )
set_property(TEST conformance_main_math_full_rsqrt  PROPERTY COST 1019.97 )
set_property(TEST conformance_main_math_full_signbit  PROPERTY COST 683.60 )
set_property(TEST conformance_main_math_full_sincos  PROPERTY COST 18400.27 )
set_property(TEST conformance_main_math_full_sinh  PROPERTY COST 2413.17 )
set_property(TEST conformance_main_math_full_sinpi  PROPERTY COST 2443.11 )
set_property(TEST conformance_main_math_full_sin  PROPERTY COST 4481.33 )
set_property(TEST conformance_main_math_full_sqrt_cr  PROPERTY COST 479.24 )
set_property(TEST conformance_main_math_full_sqrt  PROPERTY COST 499.15 )
set_property(TEST conformance_main_math_full_subtract  PROPERTY COST 708.62 )
set_property(TEST conformance_main_math_full_tanh  PROPERTY COST 1772.24 )
set_property(TEST conformance_main_math_full_tanpi  PROPERTY COST 2120.11 )
set_property(TEST conformance_main_math_full_tan  PROPERTY COST 5400.43 )
set_property(TEST conformance_main_math_full_trunc  PROPERTY COST 510.25 )
set_property(TEST conformance_main_mem_host_flags  PROPERTY COST 0.46 )
set_property(TEST conformance_main_multiples  PROPERTY COST 1826.35 )
set_property(TEST conformance_main_non_uniform_work_group  PROPERTY COST 176.34 )
set_property(TEST conformance_main_pipes  PROPERTY COST 0.16 )
set_property(TEST conformance_main_printf  PROPERTY COST 77.03 )
set_property(TEST conformance_main_profiling  PROPERTY COST 190.40 )
set_property(TEST conformance_main_relationals  PROPERTY COST 3356.48 )
set_property(TEST conformance_main_select  PROPERTY COST 2964.93 )
set_property(TEST conformance_main_subgroups  PROPERTY COST 167.60 )
set_property(TEST conformance_main_SVM  PROPERTY COST 26.91 )
set_property(TEST conformance_main_thread_dimensions  PROPERTY COST 3093.49 )
set_property(TEST conformance_main_vectors  PROPERTY COST 13271.49 )
set_property(TEST conformance_main_workgroup  PROPERTY COST 0.15 )

if(ENABLE_SPIRV AND HAVE_SPIRV_TOOLS)
  set_property(TEST conformance_main_spirv_new  PROPERTY COST 362.24 )
endif()

if(HAVE_SPIRV_TOOLS)
  set(CACHE_DIR "${CMAKE_BINARY_DIR}/CTS_FULL_CACHE")
  file(MAKE_DIRECTORY "${CACHE_DIR}")

  # add the full testsuite with offline compilation from SPIR-V
  add_cts_full_tests("conformance_suite_full_spirv" "_spirv"
                     "--compilation-mode" "spir-v"
                     "--compilation-program" "${CMAKE_BINARY_DIR}/cl_offline_compiler.sh"
                     "--compilation-cache-path" "${CACHE_DIR}")
endif()

#################################################################################
#################################################################################
########################   MICRO   ##############################################
#################################################################################
#################################################################################

function(add_cts_micro_tests CTS_LABEL TS_SUFFIX)
set(EXTRA_ARGS ${ARGN})

add_test(NAME "${TS_NAME}${TS_SUFFIX}_api_micro_ocl_30"
         COMMAND "${TS_BUILDDIR}/api/test_api" ${EXTRA_ARGS} buffer_properties_queries   clone_kernel
         consistency_2d_image_from_buffer   consistency_3d_image_writes   consistency_depth_images
         consistency_device_and_host_timer   consistency_device_enqueue   consistency_il_programs
         consistency_memory_model   consistency_non_uniform_work_group   consistency_pipes
         consistency_prog_ctor_dtor   consistency_progvar   consistency_read_write_images
         consistency_subgroups   consistency_svm   context_destructor_callback  zero_sized_enqueue
         get_command_queue_info_compatibility   get_sampler_info_compatibility  sub_group_dispatch
         image_properties_queries   ${API_OCL_30_EXTRA_TEST}    kernel_private_memory_size
         min_image_formats   negative_get_platform_ids   negative_get_platform_info
         pipe_properties_queries   queue_flush_on_release   queue_hint   queue_properties
         queue_properties_queries   retain_mem_object_set_kernel_arg)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_subgroups_micro"
         COMMAND "${TS_BUILDDIR}/subgroups/test_subgroups" ${EXTRA_ARGS} sub_group_info_ext
         sub_group_info_core work_item_functions_ext  work_item_functions_core  subgroup_functions_ext
         subgroup_functions_core  barrier_functions_ext  barrier_functions_core)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_basic_micro_other_ocl_30"
         COMMAND "${TS_BUILDDIR}/basic/test_basic" ${EXTRA_ARGS} async_copy_global_to_local2D
          async_copy_global_to_local3D  async_copy_local_to_global2D async_copy_local_to_global3D
          async_work_group_copy_fence_export_after_import_aliased_global
          async_work_group_copy_fence_export_after_import_aliased_global_and_local
          async_work_group_copy_fence_export_after_import_aliased_local
          async_work_group_copy_fence_import_after_export_aliased_global
          async_work_group_copy_fence_import_after_export_aliased_global_and_local
          async_work_group_copy_fence_import_after_export_aliased_local wg_barrier
          enqueued_local_size   get_linear_ids  global_linear_id  local_linear_id
          progvar_func_scope  progvar_prog_scope_init  progvar_prog_scope_misc   progvar_prog_scope_uninit
          rw_image_access_qualifier   simple_read_image_pitch   simple_write_image_pitch    vector_swizzle)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_SVM_micro_1"
         COMMAND "${TS_BUILDDIR}/SVM/test_svm" ${EXTRA_ARGS} svm_byte_granularity  svm_set_kernel_exec_info_svm_ptrs  svm_fine_grain_memory_consistency  svm_fine_grain_sync_buffers  svm_shared_address_space_fine_grain  svm_shared_sub_buffers  svm_shared_address_space_fine_grain_buffers)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_SVM_micro_2"
         COMMAND "${TS_BUILDDIR}/SVM/test_svm" ${EXTRA_ARGS} svm_allocate_shared_buffer  svm_shared_address_space_coarse_grain_old_api  svm_shared_address_space_coarse_grain_new_api  svm_cross_buffer_pointers_coarse_grain  svm_pointer_passing  svm_enqueue_api  svm_migrate)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_1"
         COMMAND "${TS_BUILDDIR}/c11_atomics/test_c11_atomics" ${EXTRA_ARGS} atomic_store)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_2"
         COMMAND "${TS_BUILDDIR}/c11_atomics/test_c11_atomics" ${EXTRA_ARGS} atomic_load)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_3"
         COMMAND "${TS_BUILDDIR}/c11_atomics/test_c11_atomics" ${EXTRA_ARGS} atomic_fetch_max)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_4"
         COMMAND "${TS_BUILDDIR}/c11_atomics/test_c11_atomics" ${EXTRA_ARGS} atomic_fetch_xor)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_5"
         COMMAND "${TS_BUILDDIR}/c11_atomics/test_c11_atomics" ${EXTRA_ARGS} atomic_fetch_add)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_allocations_micro_buffer"
         COMMAND "${TS_BUILDDIR}/allocations/test_allocations" ${EXTRA_ARGS} buffer buffer_non_blocking)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_allocations_micro_image"
         COMMAND "${TS_BUILDDIR}/allocations/test_allocations" ${EXTRA_ARGS} image2d_read  image2d_write
         image2d_read_non_blocking  image2d_write_non_blocking)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_integer_ops_micro_ocl_30"
         COMMAND "${TS_BUILDDIR}/integer_ops/test_integer_ops" ${EXTRA_ARGS}  integer_ctz integer_dot_product)

# skips two tests that fail in SPIR-V mode:
# compare_pointers
# builtin_functions
add_test(NAME "${TS_NAME}${TS_SUFFIX}_generic_AS_micro"
         COMMAND "${TS_BUILDDIR}/generic_address_space/test_generic_address_space" ${EXTRA_ARGS}
         function_get_fence function_to_address_space variable_get_fence variable_to_address_space casting conditional_casting chain_casting ternary_operator_casting
         language_struct language_union multiple_calls_same_function library_function generic_variable_volatile generic_variable_const
         generic_variable_gentype generic_advanced_casting generic_ptr_to_host_mem generic_ptr_to_host_mem_svm max_number_of_params)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_basic_micro_math"
         COMMAND "${TS_BUILDDIR}/basic/test_basic" ${EXTRA_ARGS} explicit_s2v fpmath fp2int int2fp intmath_int intmath_int2 intmath_int4 intmath_long intmath_long2 intmath_long4)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_basic_micro_image"
         COMMAND "${TS_BUILDDIR}/basic/test_basic" ${EXTRA_ARGS} readimage  readimage_int16  readimage_fp32  writeimage  writeimage_int16  writeimage_fp32  image_r8  imagereadwrite  imagereadwrite3d  readimage3d  readimage3d_int16  readimage3d_fp32  imagearraycopy  imagearraycopy3d  imagecopy  imagecopy3d  imagerandomcopy  arrayimagecopy  arrayimagecopy3d  imagenpot  imagedim_pow2  imagedim_non_pow2  image_param  image_multipass_integer_coord  image_multipass_float_coord  enqueue_map_image)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_basic_micro_other"
         COMMAND "${TS_BUILDDIR}/basic/test_basic" ${EXTRA_ARGS} mri_one  mri_multiple  barrier  createkernelsinprogram  work_item_functions    kernel_call_kernel_function  host_numeric_constants  kernel_numeric_constants  kernel_limit_constants  kernel_preprocessor_macros  parameter_types  vector_creation  vec_type_hint  global_work_offsets  get_global_offset  hostptr    if  sizeof  loop  pointer_cast  local_arg_def  local_kernel_def  local_kernel_scope  constant  constant_source)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_basic_micro_memory"
         COMMAND "${TS_BUILDDIR}/basic/test_basic" ${EXTRA_ARGS} vload_global  vload_local  vstore_global  vstore_local   bufferreadwriterect  arrayreadwrite  arraycopy  enqueue_map_buffer   kernel_memory_alignment_local  kernel_memory_alignment_global)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_read_async"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_read_async_int  buffer_read_async_uint  buffer_read_async_long  buffer_read_async_ulong  buffer_read_async_short  buffer_read_async_ushort  buffer_read_async_char  buffer_read_async_uchar  buffer_read_async_float)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_write_async"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS}  buffer_write_async_int  buffer_write_async_uint  buffer_write_async_short  buffer_write_async_ushort  buffer_write_async_char  buffer_write_async_uchar  buffer_write_async_float  buffer_write_async_long  buffer_write_async_ulong)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_read_array_barrier"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_read_array_barrier_int  buffer_read_array_barrier_uint  buffer_read_array_barrier_long  buffer_read_array_barrier_ulong  buffer_read_array_barrier_short  buffer_read_array_barrier_ushort  buffer_read_array_barrier_char  buffer_read_array_barrier_uchar  buffer_read_array_barrier_float)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_read"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_read_int  buffer_read_uint  buffer_read_long  buffer_read_ulong  buffer_read_short  buffer_read_ushort  buffer_read_float  buffer_read_char  buffer_read_uchar  buffer_read_struct  buffer_read_random_size buffer_read_half)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_write"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_write_int  buffer_write_uint  buffer_write_short  buffer_write_ushort  buffer_write_char  buffer_write_uchar  buffer_write_float  buffer_write_long  buffer_write_ulong  buffer_write_struct buffer_write_half)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_fill"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS}   buffer_fill_int  buffer_fill_uint  buffer_fill_short  buffer_fill_ushort  buffer_fill_char  buffer_fill_uchar  buffer_fill_long  buffer_fill_ulong  buffer_fill_float  buffer_fill_struct)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_var1"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_copy  buffer_partial_copy  mem_read_write_flags  mem_write_only_flags  mem_read_only_flags  mem_copy_host_flags  mem_alloc_ref_flags  array_info_size)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_var2"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} sub_buffers_read_write  sub_buffers_read_write_dual_devices  sub_buffers_overlapping  buffer_migrate  image_migrate)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_map_read"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_map_read_int  buffer_map_read_uint  buffer_map_read_long  buffer_map_read_ulong  buffer_map_read_short  buffer_map_read_ushort  buffer_map_read_char  buffer_map_read_uchar  buffer_map_read_float  buffer_map_read_struct)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_buffers_micro_map_write"
         COMMAND "${TS_BUILDDIR}/buffers/test_buffers" ${EXTRA_ARGS} buffer_map_write_int  buffer_map_write_uint  buffer_map_write_long  buffer_map_write_ulong  buffer_map_write_short  buffer_map_write_ushort  buffer_map_write_char  buffer_map_write_uchar  buffer_map_write_float  buffer_map_write_struct)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_vectors_micro"
         COMMAND "${TS_BUILDDIR}/vectors/test_vectors" ${EXTRA_ARGS} vec_align_array  step_type step_var step_typedef_type step_typedef_var)


if(HAVE_SPIRV_TOOLS)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_spirv_new_micro_0"
         COMMAND "${TS_BUILDDIR}/spirv_new/test_spirv_new" ${EXTRA_ARGS} decorate_restrict  decorate_aliased  decorate_alignment  decorate_constant  decorate_cpacked decorate_saturated_conversion_float_to_char decorate_saturated_conversion_float_to_short decorate_saturated_conversion_double_to_int decorate_fp_rounding_mode_rte_float_int  decorate_fp_rounding_mode_rtz_double_long get_program_il  linkage_export_function_compile  linkage_import_function_compile  linkage_import_function_link  op_atomic_inc_global  op_atomic_dec_global  op_label_simple  op_branch_simple  op_unreachable_simple  op_branch_conditional  op_branch_conditional_weighted  op_composite_construct_int4  op_composite_construct_struct
         WORKING_DIRECTORY "${TS_BUILDDIR}/spirv_new")

add_test(NAME "${TS_NAME}${TS_SUFFIX}_spirv_new_micro_1"
         COMMAND "${TS_BUILDDIR}/spirv_new/test_spirv_new" ${EXTRA_ARGS} op_constant_false_simple  op_constant_int_simple  op_constant_uchar_simple op_constant_long_simple op_constant_float_simple         op_constant_struct_int_char_simple  op_constant_struct_struct_simple op_copy_int3_simple  op_copy_struct_int_float_simple  op_copy_struct_int_char_simple  op_copy_struct_struct_simple  op_copy_half_simple op_fadd_float_regular  op_fmul_float_regular   op_fadd_float_fast  op_fadd_double_regular  op_fsub_double_fast  op_fdiv_double_fast  op_fadd_float4_regular  op_fmul_float4_regular  op_fsub_float4_fast  op_fadd_double2_regular  op_fsub_double2_fast
         WORKING_DIRECTORY "${TS_BUILDDIR}/spirv_new")

add_test(NAME "${TS_NAME}${TS_SUFFIX}_spirv_new_micro_2"
         COMMAND "${TS_BUILDDIR}/spirv_new/test_spirv_new" ${EXTRA_ARGS} function_none  function_inline  function_noinline op_lifetime_simple  op_loop_merge_branch_none op_neg_float  op_neg_double op_not_int4  op_type_opaque_simple  op_phi_2_blocks op_selection_merge_if_none  op_selection_merge_if_flatten op_spec_constant_uchar_simple  op_spec_constant_ushort_simple ${SPIRV_OCL_30_EXTRA_TEST}  op_spec_constant_true_simple op_undef_true_simple op_undef_uint_simple  op_undef_char_simple op_undef_float_simple  op_undef_double_simple op_vector_int4_extract  op_vector_float4_extract op_vector_double2_extract  op_vector_char16_extract  op_vector_int4_insert op_vector_times_scalar_double
         WORKING_DIRECTORY "${TS_BUILDDIR}/spirv_new")
endif()

add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_1D"
         COMMAND "${TS_BUILDDIR}/images/kernel_image_methods/test_kernel_image_methods" ${EXTRA_ARGS} 1D)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_2D"
         COMMAND "${TS_BUILDDIR}/images/kernel_image_methods/test_kernel_image_methods" ${EXTRA_ARGS} 2D)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_1Darray"
         COMMAND "${TS_BUILDDIR}/images/kernel_image_methods/test_kernel_image_methods" ${EXTRA_ARGS} 1Darray)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_2Darray"
         COMMAND "${TS_BUILDDIR}/images/kernel_image_methods/test_kernel_image_methods" ${EXTRA_ARGS} 2Darray)


add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_1D"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS} 1D CL_ARGB CL_SIGNED_INT8)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_2D"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS} 2D CL_A CL_UNSIGNED_INT8)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_3D"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS} 3D CL_RGBA CL_FLOAT)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_1Darray"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS} 1Darray CL_A CL_UNORM_INT8)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_2Darray"
         COMMAND "${TS_BUILDDIR}/images/kernel_read_write/test_image_streams" ${EXTRA_ARGS} 2Darray CL_RGBA CL_SNORM_INT16)


add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_1D"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS} 1D CL_A CL_UNSIGNED_INT8)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_2D"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS} 2D CL_RGBA CL_FLOAT)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_3D"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS} 3D CL_A CL_UNORM_INT8)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_1Darray"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS} 1Darray CL_RGBA CL_SNORM_INT16)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_2Darray"
         COMMAND "${TS_BUILDDIR}/images/samplerlessReads/test_samplerless_reads" ${EXTRA_ARGS} 2Darray CL_ARGB CL_SIGNED_INT8)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_integer_ops_micro_1"
         COMMAND "${TS_BUILDDIR}/integer_ops/test_integer_ops" ${EXTRA_ARGS} integer_clz  integer_hadd  integer_rhadd  integer_mul_hi  integer_rotate  integer_clamp  integer_mad_sat  integer_mad_hi  integer_min  integer_max  integer_addAssign  integer_subtractAssign  integer_multiplyAssign  integer_divideAssign  integer_moduloAssign)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_integer_ops_micro_3"
         COMMAND "${TS_BUILDDIR}/integer_ops/test_integer_ops" ${EXTRA_ARGS}  quick_long_math  quick_long_logic  quick_ulong_shift  quick_ulong_compare  quick_uint_math  quick_uint_logic  quick_int_shift  quick_int_compare  quick_short_math  quick_short_logic  quick_ushort_shift  quick_ushort_compare  quick_char_math  quick_char_logic  quick_uchar_shift  quick_uchar_compare)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_thread_dimensions_micro"
         COMMAND "${TS_BUILDDIR}/thread_dimensions/test_thread_dimensions" ${EXTRA_ARGS} quick_1d_explicit_local  quick_2d_explicit_local  quick_3d_explicit_local  quick_1d_implicit_local  quick_2d_implicit_local  quick_3d_implicit_local)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_compiler_micro"
         COMMAND "${TS_BUILDDIR}/compiler/test_compiler" ${EXTRA_ARGS} load_program_source  load_multistring_source  load_two_kernel_source  load_null_terminated_source  load_null_terminated_multi_line_source  load_null_terminated_partial_multi_line_source  load_discreet_length_source  get_program_source  get_program_build_info  get_program_info   async_build  options_build_optimizations  options_build_macro  options_build_macro_existence  options_include_directory  options_denorm_cache  preprocessor_define_udef  preprocessor_include  preprocessor_line_error  preprocessor_pragma  image_macro  simple_compile_only  simple_static_compile_only  simple_extern_compile_only  simple_compile_with_callback  simple_embedded_header_compile  simple_link_only  two_file_regular_variable_access  two_file_regular_struct_access  two_file_regular_function_access  simple_link_with_callback  simple_embedded_header_link  execute_after_simple_compile_and_link  execute_after_simple_compile_and_link_no_device_info  execute_after_simple_compile_and_link_with_defines  execute_after_simple_compile_and_link_with_callbacks  execute_after_simple_library_with_link  execute_after_two_file_link  execute_after_embedded_header_link  execute_after_included_header_link  execute_after_serialize_reload_object  execute_after_serialize_reload_library  simple_library_only  simple_library_with_callback  simple_library_with_link  two_file_link     multiple_files_multiple_libraries  program_binary_type  compile_and_link_status_options_log
         WORKING_DIRECTORY "${TS_BASEDIR}/src/${TS_NAME}/test_conformance/compiler")

# with wimpy mode
add_test(NAME "${TS_NAME}${TS_SUFFIX}_select_micro_char_char"
         COMMAND "${TS_BUILDDIR}/select/test_select" ${EXTRA_ARGS} select_char_char -w)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_select_micro_ushort_ushort"
         COMMAND "${TS_BUILDDIR}/select/test_select" ${EXTRA_ARGS} select_ushort_ushort -w)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_select_micro_int_int"
         COMMAND "${TS_BUILDDIR}/select/test_select" ${EXTRA_ARGS} select_int_int -w)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_select_micro_ulong_ulong"
         COMMAND "${TS_BUILDDIR}/select/test_select" ${EXTRA_ARGS} select_ulong_ulong -w)

# conversions, for micro version of conformance suite.
# disables multithreading, enables Wimpy mode

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_uint_uchar"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w uint_uchar uint_sat_uchar )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_short_char"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w short_char short_sat_char )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_uchar_ushort"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w uchar_ushort uchar_sat_ushort )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_char_int"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w char_int char_sat_int )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_float_char"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w float_char float_rte_char float_rtp_char float_rtn_char float_rtz_char )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_float_ushort"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w float_ushort float_rte_ushort float_rtp_ushort float_rtn_ushort float_rtz_ushort )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_int_float"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w int_float int_sat_float int_rte_float int_sat_rte_float int_rtp_float int_sat_rtp_float int_rtn_float int_sat_rtn_float int_rtz_float int_sat_rtz_float )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_double_short"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w double_short double_rte_short double_rtp_short double_rtn_short double_rtz_short )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_double_ulong"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w double_ulong double_rte_ulong double_rtp_ulong double_rtn_ulong double_rtz_ulong )

add_test(NAME "${TS_NAME}${TS_SUFFIX}_conversion_micro_long_double"
         COMMAND "${TS_BUILDDIR}/conversions/test_conversions" ${EXTRA_ARGS} -m -w long_double long_sat_double long_rte_double long_sat_rte_double long_rtp_double long_sat_rtp_double long_rtn_double long_sat_rtn_double long_rtz_double long_sat_rtz_double )

# for micro testsuite, tests math on vectors of 4 floats, in wimpy mode
unset(CTS_MATH_TESTS_MICRO)
foreach(MATH_FUNC ${MATH_FUNC_LIST})
  list(APPEND CTS_MATH_TESTS_MICRO "${TS_NAME}${TS_SUFFIX}_math_micro_${MATH_FUNC}")
  add_test(NAME "${TS_NAME}${TS_SUFFIX}_math_micro_${MATH_FUNC}"
           COMMAND "${TS_BUILDDIR}/math_brute_force/test_bruteforce" ${EXTRA_ARGS} --num-worker-threads 1 -4 -w ${MATH_FUNC})
endforeach()

add_test(NAME "${TS_NAME}${TS_SUFFIX}_events_micro"
         COMMAND "${TS_BUILDDIR}/events/test_events" ${EXTRA_ARGS} event_get_execute_status  event_get_write_array_status  event_get_read_array_status  event_get_info  event_wait_for_execute  event_wait_for_array  event_flush  event_finish_execute  event_finish_array  event_release_before_done  event_enqueue_marker  event_enqueue_marker_with_event_list  event_enqueue_barrier_with_event_list)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_events_micro_ooo"
         COMMAND "${TS_BUILDDIR}/events/test_events" ${EXTRA_ARGS} out_of_order_event_waitlist_single_queue  out_of_order_event_waitlist_multi_queue  out_of_order_event_waitlist_multi_queue_multi_device  out_of_order_event_enqueue_wait_for_events_single_queue  out_of_order_event_enqueue_wait_for_events_multi_queue  out_of_order_event_enqueue_wait_for_events_multi_queue_multi_device  out_of_order_event_enqueue_marker_single_queue  out_of_order_event_enqueue_marker_multi_queue  out_of_order_event_enqueue_marker_multi_queue_multi_device  out_of_order_event_enqueue_barrier_single_queue)
add_test(NAME "${TS_NAME}${TS_SUFFIX}_events_micro_other"
         COMMAND "${TS_BUILDDIR}/events/test_events" ${EXTRA_ARGS} userevents  waitlists  callbacks  callbacks_simultaneous  userevents_multithreaded)

add_test(NAME "${TS_NAME}${TS_SUFFIX}_relationals_micro"
         COMMAND "${TS_BUILDDIR}/relationals/test_relationals" ${EXTRA_ARGS} relational_any  relational_all  relational_bitselect  relational_select_signed  relational_select_unsigned  relational_isequal  relational_isnotequal  relational_isgreater  relational_isgreaterequal  relational_isless  relational_islessequal  relational_islessgreater)

set(OCL_30_TESTS_MICRO
    "${TS_NAME}${TS_SUFFIX}_api_micro_ocl_30"
    "${TS_NAME}${TS_SUFFIX}_basic_micro_other_ocl_30"
    "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_1"
    "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_2"
    "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_3"
    "${TS_NAME}${TS_SUFFIX}_c11_atomics_micro_4"
    "${TS_NAME}${TS_SUFFIX}_device_execution"
    "${TS_NAME}${TS_SUFFIX}_device_timer"
    "${TS_NAME}${TS_SUFFIX}_integer_ops_micro_ocl_30"
    "${TS_NAME}${TS_SUFFIX}_non_uniform_work_group"
    "${TS_NAME}${TS_SUFFIX}_generic_AS_micro"
    "${TS_NAME}${TS_SUFFIX}_subgroups_micro"
    "${TS_NAME}${TS_SUFFIX}_SVM_micro_1"
    "${TS_NAME}${TS_SUFFIX}_SVM_micro_2"
)

if(HAVE_SPIRV_TOOLS)
  list(APPEND OCL_30_TESTS_MICRO
    "${TS_NAME}${TS_SUFFIX}_spirv_new_micro_0"
    "${TS_NAME}${TS_SUFFIX}_spirv_new_micro_1"
    "${TS_NAME}${TS_SUFFIX}_spirv_new_micro_2")
endif()


set(CTS_MICRO_LIST
    "${TS_NAME}${TS_SUFFIX}_allocations_micro_buffer"
    "${TS_NAME}${TS_SUFFIX}_allocations_micro_image"
    "${TS_NAME}${TS_SUFFIX}_api"
    "${TS_NAME}${TS_SUFFIX}_atomics"
    "${TS_NAME}${TS_SUFFIX}_basic_micro_math"
    "${TS_NAME}${TS_SUFFIX}_basic_micro_image"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_read"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_write"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_fill"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_var1"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_var2"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_map_read"
    "${TS_NAME}${TS_SUFFIX}_buffers_micro_map_write"
    "${TS_NAME}${TS_SUFFIX}_cl_khr_command_buffer"
    "${TS_NAME}${TS_SUFFIX}_commonfns"
    "${TS_NAME}${TS_SUFFIX}_compiler_micro"
    "${TS_NAME}${TS_SUFFIX}_computeinfo"
    "${TS_NAME}${TS_SUFFIX}_contractions"
    "${TS_NAME}${TS_SUFFIX}_device_partition"
    "${TS_NAME}${TS_SUFFIX}_events_micro"
    "${TS_NAME}${TS_SUFFIX}_events_micro_ooo"
    "${TS_NAME}${TS_SUFFIX}_events_micro_other"
    "${TS_NAME}${TS_SUFFIX}_geometrics"
    "${TS_NAME}${TS_SUFFIX}_images_cl_copy_images"
    "${TS_NAME}${TS_SUFFIX}_images_cl_fill_images"
    "${TS_NAME}${TS_SUFFIX}_images_cl_get_info"
    "${TS_NAME}${TS_SUFFIX}_images_cl_read_write_images"

    "${TS_NAME}${TS_SUFFIX}_mem_host_flags"
    "${TS_NAME}${TS_SUFFIX}_multiples"
    "${TS_NAME}${TS_SUFFIX}_printf"
    "${TS_NAME}${TS_SUFFIX}_profiling"
    "${TS_NAME}${TS_SUFFIX}_relationals_micro"
    "${TS_NAME}${TS_SUFFIX}_thread_dimensions_micro"
    "${TS_NAME}${TS_SUFFIX}_vectors_micro"

    ${OCL_30_TESTS_MICRO}

    ${CTS_MATH_TESTS_MICRO}

    "${TS_NAME}${TS_SUFFIX}_basic_micro_memory"
    "${TS_NAME}${TS_SUFFIX}_basic_micro_other"

    "${TS_NAME}${TS_SUFFIX}_conversion_micro_uint_uchar"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_short_char"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_uchar_ushort"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_char_int"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_float_char"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_float_ushort"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_int_float"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_double_short"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_double_ulong"
    "${TS_NAME}${TS_SUFFIX}_conversion_micro_long_double"

    "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_1D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_2D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_2D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_1Darray"
    "${TS_NAME}${TS_SUFFIX}_images_micro_kernel_image_methods_2Darray"

    "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_1D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_2D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_3D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_1Darray"
    "${TS_NAME}${TS_SUFFIX}_images_micro_image_streams_2Darray"

    "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_1D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_2D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_3D"
    "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_1Darray"
    "${TS_NAME}${TS_SUFFIX}_images_micro_samplerless_reads_2Darray"

    "${TS_NAME}${TS_SUFFIX}_integer_ops_micro_1"
    "${TS_NAME}${TS_SUFFIX}_integer_ops_micro_3"

    "${TS_NAME}${TS_SUFFIX}_select_micro_char_char"
    "${TS_NAME}${TS_SUFFIX}_select_micro_ushort_ushort"
    "${TS_NAME}${TS_SUFFIX}_select_micro_int_int"
    "${TS_NAME}${TS_SUFFIX}_select_micro_ulong_ulong")

foreach(CTSTEST IN LISTS CTS_MICRO_LIST)
  set_property(TEST ${CTSTEST}
    APPEND PROPERTY
    LABELS ${CTS_LABEL})
  set_property(TEST ${CTSTEST}
    PROPERTY
    ENVIRONMENT "POCL_MEMORY_LIMIT=1")
endforeach()

set_property(TEST "${TS_NAME}${TS_SUFFIX}_non_uniform_work_group"
             PROPERTY ENVIRONMENT "POCL_MEMORY_LIMIT=4")

endfunction()

# add the micro testsuite with online compilation from sources
add_cts_micro_tests("conformance_suite_micro_main" "_main")

if(HAVE_SPIRV_TOOLS)
set(CACHE_DIR "${CMAKE_BINARY_DIR}/CTS_MICRO_CACHE")
file(MAKE_DIRECTORY "${CACHE_DIR}")

# add the micro testsuite with offline compilation from SPIR-V
add_cts_micro_tests("conformance_suite_micro_spirv" "_spirv"
                   "--compilation-mode" "spir-v"
                   "--compilation-program" "${CMAKE_BINARY_DIR}/cl_offline_compiler.sh"
                   "--compilation-cache-path" "${CACHE_DIR}")
endif()

#################################################################################