浏览代码

Merge branch 'backport-ctest-resource-groups'

Brad King 6 年之前
父节点
当前提交
016601e5e6
共有 100 个文件被更改,包括 943 次插入988 次删除
  1. 4 4
      Help/command/ctest_test.rst
  2. 1 1
      Help/manual/cmake-properties.7.rst
  3. 72 71
      Help/manual/ctest.1.rst
  4. 0 54
      Help/prop_test/PROCESSES.rst
  5. 54 0
      Help/prop_test/RESOURCE_GROUPS.rst
  6. 7 7
      Help/prop_test/RESOURCE_LOCK.rst
  7. 2 2
      Help/release/3.16.rst
  8. 6 6
      Source/CMakeLists.txt
  9. 67 65
      Source/CTest/cmCTestBinPacker.cxx
  10. 5 5
      Source/CTest/cmCTestBinPacker.h
  11. 51 50
      Source/CTest/cmCTestMultiProcessHandler.cxx
  12. 16 16
      Source/CTest/cmCTestMultiProcessHandler.h
  13. 0 55
      Source/CTest/cmCTestProcessesLexerHelper.cxx
  14. 10 10
      Source/CTest/cmCTestResourceAllocator.cxx
  15. 5 5
      Source/CTest/cmCTestResourceAllocator.h
  16. 55 0
      Source/CTest/cmCTestResourceGroupsLexerHelper.cxx
  17. 6 6
      Source/CTest/cmCTestResourceGroupsLexerHelper.h
  18. 14 14
      Source/CTest/cmCTestResourceSpec.cxx
  19. 5 5
      Source/CTest/cmCTestResourceSpec.h
  20. 8 8
      Source/CTest/cmCTestRunTest.cxx
  21. 12 9
      Source/CTest/cmCTestRunTest.h
  22. 3 3
      Source/CTest/cmCTestTestCommand.cxx
  23. 1 1
      Source/CTest/cmCTestTestCommand.h
  24. 14 14
      Source/CTest/cmCTestTestHandler.cxx
  25. 6 6
      Source/CTest/cmCTestTestHandler.h
  26. 2 2
      Source/LexerParser/.gitattributes
  27. 84 84
      Source/LexerParser/cmCTestResourceGroupsLexer.cxx
  28. 126 126
      Source/LexerParser/cmCTestResourceGroupsLexer.h
  29. 19 19
      Source/LexerParser/cmCTestResourceGroupsLexer.in.l
  30. 3 3
      Source/cmCTest.cxx
  31. 1 1
      Source/ctest.cxx
  32. 4 4
      Tests/CMakeLib/CMakeLists.txt
  33. 9 9
      Tests/CMakeLib/testCTestBinPacker.cxx
  34. 33 33
      Tests/CMakeLib/testCTestResourceAllocator.cxx
  35. 6 5
      Tests/CMakeLib/testCTestResourceGroups.cxx
  36. 8 8
      Tests/CMakeLib/testCTestResourceSpec.cxx
  37. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec1.json
  38. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec10.json
  39. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec11.json
  40. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec12.json
  41. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec13.json
  42. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec14.json
  43. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec15.json
  44. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec16.json
  45. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec17.json
  46. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec18.json
  47. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec2.json
  48. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec3.json
  49. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec4.json
  50. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec5.json
  51. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec6.json
  52. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec7.json
  53. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec8.json
  54. 0 0
      Tests/CMakeLib/testCTestResourceSpec_data/spec9.json
  55. 12 12
      Tests/RunCMake/CMakeLists.txt
  56. 1 1
      Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
  57. 3 3
      Tests/RunCMake/CTestCommandLine/show-only_json-v1_check.py
  58. 0 23
      Tests/RunCMake/CTestHardwareAllocation/HardwareCommon.cmake
  59. 0 167
      Tests/RunCMake/CTestHardwareAllocation/RunCMakeTest.cmake
  60. 0 1
      Tests/RunCMake/CTestHardwareAllocation/checkfree1-ctest-s-hw-check.cmake
  61. 0 7
      Tests/RunCMake/CTestHardwareAllocation/checkfree1.cmake
  62. 0 1
      Tests/RunCMake/CTestHardwareAllocation/checkfree2-ctest-s-hw-check.cmake
  63. 0 8
      Tests/RunCMake/CTestHardwareAllocation/checkfree2.cmake
  64. 0 6
      Tests/RunCMake/CTestHardwareAllocation/cthwalloc-write-proc-good2-check.cmake
  65. 0 1
      Tests/RunCMake/CTestHardwareAllocation/lotsoftests-ctest-s-hw-check.cmake
  66. 0 16
      Tests/RunCMake/CTestHardwareAllocation/lotsoftests.cmake
  67. 0 3
      Tests/RunCMake/CTestHardwareAllocation/notenough1-ctest-s-hw-check.cmake
  68. 0 4
      Tests/RunCMake/CTestHardwareAllocation/notenough1-ctest-s-hw-stderr.txt
  69. 0 5
      Tests/RunCMake/CTestHardwareAllocation/notenough1.cmake
  70. 0 3
      Tests/RunCMake/CTestHardwareAllocation/notenough2-ctest-s-hw-check.cmake
  71. 0 4
      Tests/RunCMake/CTestHardwareAllocation/notenough2-ctest-s-hw-stderr.txt
  72. 0 5
      Tests/RunCMake/CTestHardwareAllocation/notenough2.cmake
  73. 0 1
      Tests/RunCMake/CTestHardwareAllocation/process_count-ctest-s-hw-check.cmake
  74. 0 5
      Tests/RunCMake/CTestHardwareAllocation/process_count.cmake
  75. 1 1
      Tests/RunCMake/CTestResourceAllocation/CMakeLists.txt.in
  76. 23 0
      Tests/RunCMake/CTestResourceAllocation/ResourceCommon.cmake
  77. 167 0
      Tests/RunCMake/CTestResourceAllocation/RunCMakeTest.cmake
  78. 1 0
      Tests/RunCMake/CTestResourceAllocation/checkfree1-ctest-s-res-check.cmake
  79. 7 0
      Tests/RunCMake/CTestResourceAllocation/checkfree1.cmake
  80. 1 0
      Tests/RunCMake/CTestResourceAllocation/checkfree2-ctest-s-res-check.cmake
  81. 8 0
      Tests/RunCMake/CTestResourceAllocation/checkfree2.cmake
  82. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-baddealloc-result.txt
  83. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-baddealloc.log
  84. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest1-result.txt
  85. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest1.log
  86. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest2-result.txt
  87. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest2.log
  88. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest3-result.txt
  89. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest3.log
  90. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest4-result.txt
  91. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest4.log
  92. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest5-result.txt
  93. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest5.log
  94. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-good1.log
  95. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-good2.log
  96. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-leak-result.txt
  97. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-leak.log
  98. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-nobegin-result.txt
  99. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-nobegin.log
  100. 0 0
      Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-noend-result.txt

+ 4 - 4
Help/command/ctest_test.rst

@@ -17,7 +17,7 @@ Perform the :ref:`CTest Test Step` as a :ref:`Dashboard Client`.
              [EXCLUDE_FIXTURE_SETUP <regex>]
              [EXCLUDE_FIXTURE_SETUP <regex>]
              [EXCLUDE_FIXTURE_CLEANUP <regex>]
              [EXCLUDE_FIXTURE_CLEANUP <regex>]
              [PARALLEL_LEVEL <level>]
              [PARALLEL_LEVEL <level>]
-             [HARDWARE_SPEC_FILE <file>]
+             [RESOURCE_SPEC_FILE <file>]
              [TEST_LOAD <threshold>]
              [TEST_LOAD <threshold>]
              [SCHEDULE_RANDOM <ON|OFF>]
              [SCHEDULE_RANDOM <ON|OFF>]
              [STOP_TIME <time-of-day>]
              [STOP_TIME <time-of-day>]
@@ -83,10 +83,10 @@ The options are:
   Specify a positive number representing the number of tests to
   Specify a positive number representing the number of tests to
   be run in parallel.
   be run in parallel.
 
 
-``HARDWARE_SPEC_FILE <file>``
+``RESOURCE_SPEC_FILE <file>``
   Specify a
   Specify a
-  :ref:`hardware specification file <ctest-hardware-specification-file>`. See
-  :ref:`ctest-hardware-allocation` for more information.
+  :ref:`resource specification file <ctest-resource-specification-file>`. See
+  :ref:`ctest-resource-allocation` for more information.
 
 
 ``TEST_LOAD <threshold>``
 ``TEST_LOAD <threshold>``
   While running tests in parallel, try not to start tests when they
   While running tests in parallel, try not to start tests when they

+ 1 - 1
Help/manual/cmake-properties.7.rst

@@ -415,10 +415,10 @@ Properties on Tests
    /prop_test/LABELS
    /prop_test/LABELS
    /prop_test/MEASUREMENT
    /prop_test/MEASUREMENT
    /prop_test/PASS_REGULAR_EXPRESSION
    /prop_test/PASS_REGULAR_EXPRESSION
-   /prop_test/PROCESSES
    /prop_test/PROCESSOR_AFFINITY
    /prop_test/PROCESSOR_AFFINITY
    /prop_test/PROCESSORS
    /prop_test/PROCESSORS
    /prop_test/REQUIRED_FILES
    /prop_test/REQUIRED_FILES
+   /prop_test/RESOURCE_GROUPS
    /prop_test/RESOURCE_LOCK
    /prop_test/RESOURCE_LOCK
    /prop_test/RUN_SERIAL
    /prop_test/RUN_SERIAL
    /prop_test/SKIP_REGULAR_EXPRESSION
    /prop_test/SKIP_REGULAR_EXPRESSION

+ 72 - 71
Help/manual/ctest.1.rst

@@ -90,14 +90,14 @@ Options
 
 
  See `Label and Subproject Summary`_.
  See `Label and Subproject Summary`_.
 
 
-``--hardware-spec-file <file>``
- Run CTest with :ref:`hardware allocation <ctest-hardware-allocation>` enabled,
+``--resource-spec-file <file>``
+ Run CTest with :ref:`resource allocation <ctest-resource-allocation>` enabled,
  using the
  using the
- :ref:`hardware specification file <ctest-hardware-specification-file>`
+ :ref:`resource specification file <ctest-resource-specification-file>`
  specified in ``<file>``.
  specified in ``<file>``.
 
 
  When ``ctest`` is run as a `Dashboard Client`_ this sets the
  When ``ctest`` is run as a `Dashboard Client`_ this sets the
- ``HardwareSpecFile`` option of the `CTest Test Step`_.
+ ``ResourceSpecFile`` option of the `CTest Test Step`_.
 
 
 ``--test-load <level>``
 ``--test-load <level>``
  While running tests in parallel (e.g. with ``-j``), try not to start
  While running tests in parallel (e.g. with ``-j``), try not to start
@@ -980,10 +980,10 @@ Arguments to the command may specify some of the step settings.
 
 
 Configuration settings include:
 Configuration settings include:
 
 
-``HardwareSpecFile``
+``ResourceSpecFile``
   Specify a
   Specify a
-  :ref:`hardware specification file <ctest-hardware-specification-file>`. See
-  :ref:`ctest-hardware-allocation` for more information.
+  :ref:`resource specification file <ctest-resource-specification-file>`. See
+  :ref:`ctest-resource-allocation` for more information.
 
 
 ``LabelsForSubprojects``
 ``LabelsForSubprojects``
   Specify a semicolon-separated list of labels that will be treated as
   Specify a semicolon-separated list of labels that will be treated as
@@ -1294,22 +1294,22 @@ model is defined as follows:
     Test properties.
     Test properties.
     Can contain keys for each of the supported test properties.
     Can contain keys for each of the supported test properties.
 
 
-.. _`ctest-hardware-allocation`:
+.. _`ctest-resource-allocation`:
 
 
-Hardware Allocation
+Resource Allocation
 ===================
 ===================
 
 
-CTest provides a mechanism for tests to specify the hardware that they need and
-how much of it they need, and for users to specify the hardware availiable on
+CTest provides a mechanism for tests to specify the resources that they need
+in a fine-grained way, and for users to specify the resources availiable on
 the running machine. This allows CTest to internally keep track of which
 the running machine. This allows CTest to internally keep track of which
-hardware is in use and which is free, scheduling tests in a way that prevents
-them from trying to claim hardware that is not available.
+resources are in use and which are free, scheduling tests in a way that
+prevents them from trying to claim resources that are not available.
 
 
 A common use case for this feature is for tests that require the use of a GPU.
 A common use case for this feature is for tests that require the use of a GPU.
 Multiple tests can simultaneously allocate memory from a GPU, but if too many
 Multiple tests can simultaneously allocate memory from a GPU, but if too many
 tests try to do this at once, some of them will fail to allocate, resulting in
 tests try to do this at once, some of them will fail to allocate, resulting in
 a failed test, even though the test would have succeeded if it had the memory
 a failed test, even though the test would have succeeded if it had the memory
-it needed. By using the hardware allocation feature, each test can specify how
+it needed. By using the resource allocation feature, each test can specify how
 much memory it requires from a GPU, allowing CTest to schedule tests in a way
 much memory it requires from a GPU, allowing CTest to schedule tests in a way
 that running several of these tests at once does not exhaust the GPU's memory
 that running several of these tests at once does not exhaust the GPU's memory
 pool.
 pool.
@@ -1325,36 +1325,35 @@ When a test is executed, and slots from a resource are allocated to that test,
 tests may assume that they have exclusive use of those slots for the duration
 tests may assume that they have exclusive use of those slots for the duration
 of the test's process.
 of the test's process.
 
 
-The CTest hardware allocation feature consists of two inputs:
+The CTest resource allocation feature consists of two inputs:
 
 
-* The :ref:`hardware specification file <ctest-hardware-specification-file>`,
-  described below, which describes the hardware resources available on the
-  system, and
-* The :prop_test:`PROCESSES` property of tests, which describes the resources
-  required by the test
+* The :ref:`resource specification file <ctest-resource-specification-file>`,
+  described below, which describes the resources available on the system.
+* The :prop_test:`RESOURCE_GROUPS` property of tests, which describes the
+  resources required by the test.
 
 
-When CTest runs a test, the hardware allocated to that test is passed in the
+When CTest runs a test, the resources allocated to that test are passed in the
 form of a set of
 form of a set of
-:ref:`environment variables <ctest-hardware-environment-variables>` as
+:ref:`environment variables <ctest-resource-environment-variables>` as
 described below. Using this information to decide which resource to connect to
 described below. Using this information to decide which resource to connect to
 is left to the test writer.
 is left to the test writer.
 
 
-Please note that these processes are not spawned by CTest. The ``PROCESSES``
-property merely tells CTest what processes the test expects to launch. It is up
-to the test itself to do this process spawning, and read the :ref:`environment
-variables <ctest-hardware-environment-variables>` to determine which resources
-each process has been allocated.
+The ``RESOURCE_GROUPS`` property tells CTest what resources a test expects
+to use grouped in a way meaningful to the test.  The test itself must read
+the :ref:`environment variables <ctest-resource-environment-variables>` to
+determine which resources have been allocated to each group.  For example,
+each group may correspond to a process the test will spawn when executed.
 
 
-.. _`ctest-hardware-specification-file`:
+.. _`ctest-resource-specification-file`:
 
 
-Hardware Specification File
+Resource Specification File
 ---------------------------
 ---------------------------
 
 
-The hardware specification file is a JSON file which is passed to CTest, either
-on the :manual:`ctest(1)` command line as ``--hardware-spec-file``, or as the
-``HARDWARE_SPEC_FILE`` argument of :command:`ctest_test`. The hardware
+The resource specification file is a JSON file which is passed to CTest, either
+on the :manual:`ctest(1)` command line as ``--resource-spec-file``, or as the
+``RESOURCE_SPEC_FILE`` argument of :command:`ctest_test`. The resource
 specification file must be a JSON object. All examples in this document assume
 specification file must be a JSON object. All examples in this document assume
-the following hardware specification file:
+the following resource specification file:
 
 
 .. code-block:: json
 .. code-block:: json
 
 
@@ -1391,11 +1390,11 @@ the following hardware specification file:
 The members are:
 The members are:
 
 
 ``local``
 ``local``
-  A JSON array consisting of CPU sockets present on the system. Currently, only
-  one socket is supported.
+  A JSON array of resource sets present on the system.  Currently, this array
+  is restricted to being of size 1.
 
 
-  Each socket is a JSON object with members whose names are equal to the
-  desired resource types, such as ``gpu``. These names must start with a
+  Each array element is a JSON object with members whose names are equal to the
+  desired resource types, such as ``gpus``. These names must start with a
   lowercase letter or an underscore, and subsequent characters can be a
   lowercase letter or an underscore, and subsequent characters can be a
   lowercase letter, a digit, or an underscore. Uppercase letters are not
   lowercase letter, a digit, or an underscore. Uppercase letters are not
   allowed, because certain platforms have case-insensitive environment
   allowed, because certain platforms have case-insensitive environment
@@ -1436,12 +1435,12 @@ In the example file above, there are four GPUs with ID's 0 through 3. GPU 0 has
 2 slots, GPU 1 has 4, GPU 2 has 2, and GPU 3 has a default of 1 slot. There is
 2 slots, GPU 1 has 4, GPU 2 has 2, and GPU 3 has a default of 1 slot. There is
 also one cryptography chip with 4 slots.
 also one cryptography chip with 4 slots.
 
 
-``PROCESSES`` Property
-----------------------
+``RESOURCE_GROUPS`` Property
+----------------------------
 
 
-See :prop_test:`PROCESSES` for a description of this property.
+See :prop_test:`RESOURCE_GROUPS` for a description of this property.
 
 
-.. _`ctest-hardware-environment-variables`:
+.. _`ctest-resource-environment-variables`:
 
 
 Environment Variables
 Environment Variables
 ---------------------
 ---------------------
@@ -1449,65 +1448,67 @@ Environment Variables
 Once CTest has decided which resources to allocate to a test, it passes this
 Once CTest has decided which resources to allocate to a test, it passes this
 information to the test executable as a series of environment variables. For
 information to the test executable as a series of environment variables. For
 each example below, we will assume that the test in question has a
 each example below, we will assume that the test in question has a
-:prop_test:`PROCESSES` property of ``2,gpus:2;gpus:4,gpus:1,crypto_chips:2``.
+:prop_test:`RESOURCE_GROUPS` property of
+``2,gpus:2;gpus:4,gpus:1,crypto_chips:2``.
 
 
 The following variables are passed to the test process:
 The following variables are passed to the test process:
 
 
-.. envvar:: CTEST_PROCESS_COUNT
+.. envvar:: CTEST_RESOURCE_GROUP_COUNT
 
 
-  The total number of processes specified by the :prop_test:`PROCESSES`
+  The total number of groups specified by the :prop_test:`RESOURCE_GROUPS`
   property. For example:
   property. For example:
 
 
-  * ``CTEST_PROCESS_COUNT=3``
+  * ``CTEST_RESOURCE_GROUP_COUNT=3``
 
 
   This variable will only be defined if :manual:`ctest(1)` has been given a
   This variable will only be defined if :manual:`ctest(1)` has been given a
-  ``--hardware-spec-file``, or if :command:`ctest_test` has been given a
-  ``HARDWARE_SPEC_FILE``. If no hardware specification file has been given,
+  ``--resource-spec-file``, or if :command:`ctest_test` has been given a
+  ``RESOURCE_SPEC_FILE``. If no resource specification file has been given,
   this variable will not be defined.
   this variable will not be defined.
 
 
-.. envvar:: CTEST_PROCESS_<num>
+.. envvar:: CTEST_RESOURCE_GROUP_<num>
 
 
-  The list of resource types allocated to each process, with each item
+  The list of resource types allocated to each group, with each item
   separated by a comma. ``<num>`` is a number from zero to
   separated by a comma. ``<num>`` is a number from zero to
-  ``CTEST_PROCESS_COUNT`` minus one. ``CTEST_PROCESS_<num>`` is defined for
-  each ``<num>`` in this range. For example:
+  ``CTEST_RESOURCE_GROUP_COUNT`` minus one. ``CTEST_RESOURCE_GROUP_<num>``
+  is defined for each ``<num>`` in this range. For example:
 
 
-  * ``CTEST_PROCESS_0=gpus``
-  * ``CTEST_PROCESS_1=gpus``
-  * ``CTEST_PROCESS_2=crypto_chips,gpus``
+  * ``CTEST_RESOURCE_GROUP_0=gpus``
+  * ``CTEST_RESOURCE_GROUP_1=gpus``
+  * ``CTEST_RESOURCE_GROUP_2=crypto_chips,gpus``
 
 
-.. envvar:: CTEST_PROCESS_<num>_<resource-type>
+.. envvar:: CTEST_RESOURCE_GROUP_<num>_<resource-type>
 
 
   The list of resource IDs and number of slots from each ID allocated to each
   The list of resource IDs and number of slots from each ID allocated to each
-  process for a given resource type. This variable consists of a series of
+  group for a given resource type. This variable consists of a series of
   pairs, each pair separated by a semicolon, and with the two items in the pair
   pairs, each pair separated by a semicolon, and with the two items in the pair
   separated by a comma. The first item in each pair is ``id:`` followed by the
   separated by a comma. The first item in each pair is ``id:`` followed by the
   ID of a resource of type ``<resource-type>``, and the second item is
   ID of a resource of type ``<resource-type>``, and the second item is
   ``slots:`` followed by the number of slots from that resource allocated to
   ``slots:`` followed by the number of slots from that resource allocated to
-  the given process. For example:
+  the given group. For example:
 
 
-  * ``CTEST_PROCESS_0_GPUS=id:0,slots:2``
-  * ``CTEST_PROCESS_1_GPUS=id:2,slots:2``
-  * ``CTEST_PROCESS_2_GPUS=id:1,slots:4;id:3,slots:1``
-  * ``CTEST_PROCESS_2_CRYPTO_CHIPS=id:card0,slots:2``
+  * ``CTEST_RESOURCE_GROUP_0_GPUS=id:0,slots:2``
+  * ``CTEST_RESOURCE_GROUP_1_GPUS=id:2,slots:2``
+  * ``CTEST_RESOURCE_GROUP_2_GPUS=id:1,slots:4;id:3,slots:1``
+  * ``CTEST_RESOURCE_GROUP_2_CRYPTO_CHIPS=id:card0,slots:2``
 
 
-  In this example, process 0 gets 2 slots from GPU ``0``, process 1 gets 2 slots
-  from GPU ``2``, and process 2 gets 4 slots from GPU ``1`` and 2 slots from
-  cryptography chip ``card0``.
+  In this example, group 0 gets 2 slots from GPU ``0``, group 1 gets 2 slots
+  from GPU ``2``, and group 2 gets 4 slots from GPU ``1``, 1 slot from GPU
+  ``3``, and 2 slots from cryptography chip ``card0``.
 
 
-  ``<num>`` is a number from zero to ``CTEST_PROCESS_COUNT`` minus one.
+  ``<num>`` is a number from zero to ``CTEST_RESOURCE_GROUP_COUNT`` minus one.
   ``<resource-type>`` is the name of a resource type, converted to uppercase.
   ``<resource-type>`` is the name of a resource type, converted to uppercase.
-  ``CTEST_PROCESS_<num>_<resource-type>`` is defined for the product of each
-  ``<num>`` in the range listed above and each resource type listed in
-  ``CTEST_PROCESS_<num>``.
+  ``CTEST_RESOURCE_GROUP_<num>_<resource-type>`` is defined for the product
+  of each ``<num>`` in the range listed above and each resource type listed in
+  ``CTEST_RESOURCE_GROUP_<num>``.
 
 
   Because some platforms have case-insensitive names for environment variables,
   Because some platforms have case-insensitive names for environment variables,
   the names of resource types may not clash in a case-insensitive environment.
   the names of resource types may not clash in a case-insensitive environment.
   Because of this, for the sake of simplicity, all resource types must be
   Because of this, for the sake of simplicity, all resource types must be
   listed in all lowercase in the
   listed in all lowercase in the
-  :ref:`hardware specification file <ctest-hardware-specification-file>` and in
-  the :prop_test:`PROCESSES` property, and they are converted to all uppercase
-  in the ``CTEST_PROCESS_<num>_<resource-type>`` environment variable.
+  :ref:`resource specification file <ctest-resource-specification-file>` and
+  in the :prop_test:`RESOURCE_GROUPS` property, and they are converted to all
+  uppercase in the ``CTEST_RESOURCE_GROUP_<num>_<resource-type>`` environment
+  variable.
 
 
 See Also
 See Also
 ========
 ========

+ 0 - 54
Help/prop_test/PROCESSES.rst

@@ -1,54 +0,0 @@
-PROCESSES
-----------
-
-Set to specify the number of processes spawned by a test, and the resources
-that they require. See :ref:`hardware allocation <ctest-hardware-allocation>`
-for more information on how this property integrates into the CTest hardware
-allocation feature.
-
-The ``PROCESSES`` property is a :ref:`semicolon-separated list <CMake Language
-Lists>` of process descriptions. Each process description consists of an
-optional number of processes for the description followed by a series of
-resource requirements for those processes. These requirements (and the number
-of processes) are separated by commas. The resource requirements consist of the
-name of a resource type, followed by a colon, followed by an unsigned integer
-specifying the number of slots required on one resource of the given type.
-
-Please note that these processes are not spawned by CTest. The ``PROCESSES``
-property merely tells CTest what processes the test expects to launch. It is up
-to the test itself to do this process spawning, and read the :ref:`environment
-variables <ctest-hardware-environment-variables>` to determine which resources
-each process has been allocated.
-
-Consider the following example:
-
-.. code-block:: cmake
-
-  add_test(NAME MyTest COMMAND MyExe)
-  set_property(TEST MyTest PROPERTY PROCESSES
-    "2,gpus:2"
-    "gpus:4,crypto_chips:2")
-
-In this example, there are two process descriptions (implicitly separated by a
-semicolon.) The content of the first description is ``2,gpus:2``. This
-description spawns 2 processes, each of which requires 2 slots from a single
-GPU. The content of the second description is ``gpus:4,crypto_chips:2``. This
-description does not specify a process count, so a default of 1 is assumed.
-This single process requires 4 slots from a single GPU and 2 slots from a
-single cryptography chip. In total, 3 processes are spawned from this test,
-each with their own unique requirements.
-
-When CTest sets the :ref:`environment variables
-<ctest-hardware-environment-variables>` for a test, it assigns a process number
-based on the process description, starting at 0 on the left and the number of
-processes minus 1 on the right. For example, in the example above, the two
-processes in the first description would have IDs of 0 and 1, and the single
-process in the second description would have an ID of 2.
-
-Both the ``PROCESSES`` and :prop_test:`RESOURCE_LOCK` properties serve similar
-purposes, but they are distinct and orthogonal. Resources specified by
-``PROCESSES`` do not affect :prop_test:`RESOURCE_LOCK`, and vice versa. Whereas
-:prop_test:`RESOURCE_LOCK` is a simpler property that is used for locking one
-global resource, ``PROCESSES`` is a more advanced property that allows multiple
-tests to simultaneously use multiple resources of the same type, specifying
-their requirements in a fine-grained manner.

+ 54 - 0
Help/prop_test/RESOURCE_GROUPS.rst

@@ -0,0 +1,54 @@
+RESOURCE_GROUPS
+---------------
+
+Specify resources required by a test, grouped in a way that is meaningful to
+the test.  See :ref:`resource allocation <ctest-resource-allocation>`
+for more information on how this property integrates into the CTest resource
+allocation feature.
+
+The ``RESOURCE_GROUPS`` property is a :ref:`semicolon-separated list <CMake
+Language Lists>` of group descriptions. Each entry consists of an optional
+number of groups using the description followed by a series of resource
+requirements for those groups. These requirements (and the number of groups)
+are separated by commas. The resource requirements consist of the name of a
+resource type, followed by a colon, followed by an unsigned integer
+specifying the number of slots required on one resource of the given type.
+
+The ``RESOURCE_GROUPS`` property tells CTest what resources a test expects
+to use grouped in a way meaningful to the test.  The test itself must read
+the :ref:`environment variables <ctest-resource-environment-variables>` to
+determine which resources have been allocated to each group.  For example,
+each group may correspond to a process the test will spawn when executed.
+
+Consider the following example:
+
+.. code-block:: cmake
+
+  add_test(NAME MyTest COMMAND MyExe)
+  set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
+    "2,gpus:2"
+    "gpus:4,crypto_chips:2")
+
+In this example, there are two group descriptions (implicitly separated by a
+semicolon.) The content of the first description is ``2,gpus:2``. This
+description specifies 2 groups, each of which requires 2 slots from a single
+GPU. The content of the second description is ``gpus:4,crypto_chips:2``. This
+description does not specify a group count, so a default of 1 is assumed.
+This single group requires 4 slots from a single GPU and 2 slots from a
+single cryptography chip. In total, 3 resource groups are specified for this
+test, each with its own unique requirements.
+
+When CTest sets the :ref:`environment variables
+<ctest-resource-environment-variables>` for a test, it assigns a group number
+based on the group description, starting at 0 on the left and the number of
+groups minus 1 on the right. For example, in the example above, the two
+groups in the first description would have IDs of 0 and 1, and the single
+group in the second description would have an ID of 2.
+
+Both the ``RESOURCE_GROUPS`` and :prop_test:`RESOURCE_LOCK` properties serve
+similar purposes, but they are distinct and orthogonal. Resources specified by
+``RESOURCE_GROUPS`` do not affect :prop_test:`RESOURCE_LOCK`, and vice versa.
+Whereas :prop_test:`RESOURCE_LOCK` is a simpler property that is used for
+locking one global resource, ``RESOURCE_GROUPS`` is a more advanced property
+that allows multiple tests to simultaneously use multiple resources of the
+same type, specifying their requirements in a fine-grained manner.

+ 7 - 7
Help/prop_test/RESOURCE_LOCK.rst

@@ -9,10 +9,10 @@ not to run concurrently.
 See also :prop_test:`FIXTURES_REQUIRED` if the resource requires any setup or
 See also :prop_test:`FIXTURES_REQUIRED` if the resource requires any setup or
 cleanup steps.
 cleanup steps.
 
 
-Both the :prop_test:`PROCESSES` and ``RESOURCE_LOCK`` properties serve similar
-purposes, but they are distinct and orthogonal. Resources specified by
-:prop_test:`PROCESSES` do not affect ``RESOURCE_LOCK``, and vice versa. Whereas
-``RESOURCE_LOCK`` is a simpler property that is used for locking one global
-resource, :prop_test:`PROCESSES` is a more advanced property that allows
-multiple tests to simultaneously use multiple resources of the same type,
-specifying their requirements in a fine-grained manner.
+Both the :prop_test:`RESOURCE_GROUPS` and ``RESOURCE_LOCK`` properties serve
+similar purposes, but they are distinct and orthogonal. Resources specified by
+:prop_test:`RESOURCE_GROUPS` do not affect ``RESOURCE_LOCK``, and vice versa.
+Whereas ``RESOURCE_LOCK`` is a simpler property that is used for locking one
+global resource, :prop_test:`RESOURCE_GROUPS` is a more advanced property
+that allows multiple tests to simultaneously use multiple resources of the
+same type, specifying their requirements in a fine-grained manner.

+ 2 - 2
Help/release/3.16.rst

@@ -192,8 +192,8 @@ Autogen
 CTest
 CTest
 -----
 -----
 
 
-* :manual:`ctest(1)` now has the ability to serialize tests based on hardware
-  requirements for each test. See :ref:`ctest-hardware-allocation` for
+* :manual:`ctest(1)` now has the ability to schedule tests based on resource
+  requirements for each test. See :ref:`ctest-resource-allocation` for
   details.
   details.
 
 
 * A new test property, :prop_test:`SKIP_REGULAR_EXPRESSION`, has been added.
 * A new test property, :prop_test:`SKIP_REGULAR_EXPRESSION`, has been added.

+ 6 - 6
Source/CMakeLists.txt

@@ -921,14 +921,14 @@ set(CTEST_SRCS cmCTest.cxx
   CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
   CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
   CTest/cmCTestGenericHandler.cxx
   CTest/cmCTestGenericHandler.cxx
   CTest/cmCTestHandlerCommand.cxx
   CTest/cmCTestHandlerCommand.cxx
-  CTest/cmCTestHardwareAllocator.cxx
-  CTest/cmCTestHardwareSpec.cxx
+  CTest/cmCTestResourceAllocator.cxx
+  CTest/cmCTestResourceSpec.cxx
   CTest/cmCTestLaunch.cxx
   CTest/cmCTestLaunch.cxx
   CTest/cmCTestMemCheckCommand.cxx
   CTest/cmCTestMemCheckCommand.cxx
   CTest/cmCTestMemCheckHandler.cxx
   CTest/cmCTestMemCheckHandler.cxx
   CTest/cmCTestMultiProcessHandler.cxx
   CTest/cmCTestMultiProcessHandler.cxx
-  CTest/cmCTestProcessesLexerHelper.cxx
   CTest/cmCTestReadCustomFilesCommand.cxx
   CTest/cmCTestReadCustomFilesCommand.cxx
+  CTest/cmCTestResourceGroupsLexerHelper.cxx
   CTest/cmCTestRunScriptCommand.cxx
   CTest/cmCTestRunScriptCommand.cxx
   CTest/cmCTestRunTest.cxx
   CTest/cmCTestRunTest.cxx
   CTest/cmCTestScriptHandler.cxx
   CTest/cmCTestScriptHandler.cxx
@@ -960,9 +960,9 @@ set(CTEST_SRCS cmCTest.cxx
   CTest/cmCTestP4.cxx
   CTest/cmCTestP4.cxx
   CTest/cmCTestP4.h
   CTest/cmCTestP4.h
 
 
-  LexerParser/cmCTestProcessesLexer.cxx
-  LexerParser/cmCTestProcessesLexer.h
-  LexerParser/cmCTestProcessesLexer.in.l
+  LexerParser/cmCTestResourceGroupsLexer.cxx
+  LexerParser/cmCTestResourceGroupsLexer.h
+  LexerParser/cmCTestResourceGroupsLexer.in.l
   )
   )
 
 
 # Build CTestLib
 # Build CTestLib

+ 67 - 65
Source/CTest/cmCTestBinPacker.cxx

@@ -23,7 +23,7 @@ namespace {
 /*
 /*
  * The following algorithm is used to do two things:
  * The following algorithm is used to do two things:
  *
  *
- * 1) Determine if a test's hardware requirements can fit within the hardware
+ * 1) Determine if a test's resource requirements can fit within the resources
  *    present on the system, and
  *    present on the system, and
  * 2) Do the actual allocation
  * 2) Do the actual allocation
  *
  *
@@ -34,46 +34,46 @@ namespace {
  * more combinations can be tried.
  * more combinations can be tried.
  */
  */
 template <typename AllocationStrategy>
 template <typename AllocationStrategy>
-static bool AllocateCTestHardware(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-  const std::vector<std::string>& hardwareSorted, std::size_t currentIndex,
+static bool AllocateCTestResources(
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+  const std::vector<std::string>& resourcesSorted, std::size_t currentIndex,
   std::vector<cmCTestBinPackerAllocation*>& allocations)
   std::vector<cmCTestBinPackerAllocation*>& allocations)
 {
 {
   // Iterate through all large enough resources until we find a solution
   // Iterate through all large enough resources until we find a solution
-  std::size_t hardwareIndex = 0;
-  while (hardwareIndex < hardwareSorted.size()) {
-    auto const& resource = hardware.at(hardwareSorted[hardwareIndex]);
+  std::size_t resourceIndex = 0;
+  while (resourceIndex < resourcesSorted.size()) {
+    auto const& resource = resources.at(resourcesSorted[resourceIndex]);
     if (resource.Free() >=
     if (resource.Free() >=
         static_cast<unsigned int>(allocations[currentIndex]->SlotsNeeded)) {
         static_cast<unsigned int>(allocations[currentIndex]->SlotsNeeded)) {
       // Preemptively allocate the resource
       // Preemptively allocate the resource
-      allocations[currentIndex]->Id = hardwareSorted[hardwareIndex];
+      allocations[currentIndex]->Id = resourcesSorted[resourceIndex];
       if (currentIndex + 1 >= allocations.size()) {
       if (currentIndex + 1 >= allocations.size()) {
         // We have a solution
         // We have a solution
         return true;
         return true;
       }
       }
 
 
       // Move the resource up the list until it is sorted again
       // Move the resource up the list until it is sorted again
-      auto hardware2 = hardware;
-      auto hardwareSorted2 = hardwareSorted;
-      hardware2[hardwareSorted2[hardwareIndex]].Locked +=
+      auto resources2 = resources;
+      auto resourcesSorted2 = resourcesSorted;
+      resources2[resourcesSorted2[resourceIndex]].Locked +=
         allocations[currentIndex]->SlotsNeeded;
         allocations[currentIndex]->SlotsNeeded;
-      AllocationStrategy::IncrementalSort(hardware2, hardwareSorted2,
-                                          hardwareIndex);
+      AllocationStrategy::IncrementalSort(resources2, resourcesSorted2,
+                                          resourceIndex);
 
 
       // Recurse one level deeper
       // Recurse one level deeper
-      if (AllocateCTestHardware<AllocationStrategy>(
-            hardware2, hardwareSorted2, currentIndex + 1, allocations)) {
+      if (AllocateCTestResources<AllocationStrategy>(
+            resources2, resourcesSorted2, currentIndex + 1, allocations)) {
         return true;
         return true;
       }
       }
     }
     }
 
 
     // No solution found here, deallocate the resource and try the next one
     // No solution found here, deallocate the resource and try the next one
     allocations[currentIndex]->Id.clear();
     allocations[currentIndex]->Id.clear();
-    auto freeSlots = hardware.at(hardwareSorted.at(hardwareIndex)).Free();
+    auto freeSlots = resources.at(resourcesSorted.at(resourceIndex)).Free();
     do {
     do {
-      ++hardwareIndex;
-    } while (hardwareIndex < hardwareSorted.size() &&
-             hardware.at(hardwareSorted.at(hardwareIndex)).Free() ==
+      ++resourceIndex;
+    } while (resourceIndex < resourcesSorted.size() &&
+             resources.at(resourcesSorted.at(resourceIndex)).Free() ==
                freeSlots);
                freeSlots);
   }
   }
 
 
@@ -82,8 +82,8 @@ static bool AllocateCTestHardware(
 }
 }
 
 
 template <typename AllocationStrategy>
 template <typename AllocationStrategy>
-static bool AllocateCTestHardware(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
+static bool AllocateCTestResources(
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
   std::vector<cmCTestBinPackerAllocation>& allocations)
   std::vector<cmCTestBinPackerAllocation>& allocations)
 {
 {
   // Sort the resource requirements in descending order by slots needed
   // Sort the resource requirements in descending order by slots needed
@@ -99,103 +99,105 @@ static bool AllocateCTestHardware(
     });
     });
 
 
   // Sort the resources according to sort strategy
   // Sort the resources according to sort strategy
-  std::vector<std::string> hardwareSorted;
-  hardwareSorted.reserve(hardware.size());
-  for (auto const& hw : hardware) {
-    hardwareSorted.push_back(hw.first);
+  std::vector<std::string> resourcesSorted;
+  resourcesSorted.reserve(resources.size());
+  for (auto const& res : resources) {
+    resourcesSorted.push_back(res.first);
   }
   }
-  AllocationStrategy::InitialSort(hardware, hardwareSorted);
+  AllocationStrategy::InitialSort(resources, resourcesSorted);
 
 
   // Do the actual allocation
   // Do the actual allocation
-  return AllocateCTestHardware<AllocationStrategy>(
-    hardware, hardwareSorted, std::size_t(0), allocationsPtr);
+  return AllocateCTestResources<AllocationStrategy>(
+    resources, resourcesSorted, std::size_t(0), allocationsPtr);
 }
 }
 
 
 class RoundRobinAllocationStrategy
 class RoundRobinAllocationStrategy
 {
 {
 public:
 public:
   static void InitialSort(
   static void InitialSort(
-    const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-    std::vector<std::string>& hardwareSorted);
+    const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+    std::vector<std::string>& resourcesSorted);
 
 
   static void IncrementalSort(
   static void IncrementalSort(
-    const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-    std::vector<std::string>& hardwareSorted, std::size_t lastAllocatedIndex);
+    const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+    std::vector<std::string>& resourcesSorted, std::size_t lastAllocatedIndex);
 };
 };
 
 
 void RoundRobinAllocationStrategy::InitialSort(
 void RoundRobinAllocationStrategy::InitialSort(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-  std::vector<std::string>& hardwareSorted)
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+  std::vector<std::string>& resourcesSorted)
 {
 {
   std::stable_sort(
   std::stable_sort(
-    hardwareSorted.rbegin(), hardwareSorted.rend(),
-    [&hardware](const std::string& id1, const std::string& id2) {
-      return hardware.at(id1).Free() < hardware.at(id2).Free();
+    resourcesSorted.rbegin(), resourcesSorted.rend(),
+    [&resources](const std::string& id1, const std::string& id2) {
+      return resources.at(id1).Free() < resources.at(id2).Free();
     });
     });
 }
 }
 
 
 void RoundRobinAllocationStrategy::IncrementalSort(
 void RoundRobinAllocationStrategy::IncrementalSort(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-  std::vector<std::string>& hardwareSorted, std::size_t lastAllocatedIndex)
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+  std::vector<std::string>& resourcesSorted, std::size_t lastAllocatedIndex)
 {
 {
-  auto tmp = hardwareSorted[lastAllocatedIndex];
+  auto tmp = resourcesSorted[lastAllocatedIndex];
   std::size_t i = lastAllocatedIndex;
   std::size_t i = lastAllocatedIndex;
-  while (i < hardwareSorted.size() - 1 &&
-         hardware.at(hardwareSorted[i + 1]).Free() > hardware.at(tmp).Free()) {
-    hardwareSorted[i] = hardwareSorted[i + 1];
+  while (i < resourcesSorted.size() - 1 &&
+         resources.at(resourcesSorted[i + 1]).Free() >
+           resources.at(tmp).Free()) {
+    resourcesSorted[i] = resourcesSorted[i + 1];
     ++i;
     ++i;
   }
   }
-  hardwareSorted[i] = tmp;
+  resourcesSorted[i] = tmp;
 }
 }
 
 
 class BlockAllocationStrategy
 class BlockAllocationStrategy
 {
 {
 public:
 public:
   static void InitialSort(
   static void InitialSort(
-    const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-    std::vector<std::string>& hardwareSorted);
+    const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+    std::vector<std::string>& resourcesSorted);
 
 
   static void IncrementalSort(
   static void IncrementalSort(
-    const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-    std::vector<std::string>& hardwareSorted, std::size_t lastAllocatedIndex);
+    const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+    std::vector<std::string>& resourcesSorted, std::size_t lastAllocatedIndex);
 };
 };
 
 
 void BlockAllocationStrategy::InitialSort(
 void BlockAllocationStrategy::InitialSort(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
-  std::vector<std::string>& hardwareSorted)
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
+  std::vector<std::string>& resourcesSorted)
 {
 {
   std::stable_sort(
   std::stable_sort(
-    hardwareSorted.rbegin(), hardwareSorted.rend(),
-    [&hardware](const std::string& id1, const std::string& id2) {
-      return hardware.at(id1).Free() < hardware.at(id2).Free();
+    resourcesSorted.rbegin(), resourcesSorted.rend(),
+    [&resources](const std::string& id1, const std::string& id2) {
+      return resources.at(id1).Free() < resources.at(id2).Free();
     });
     });
 }
 }
 
 
 void BlockAllocationStrategy::IncrementalSort(
 void BlockAllocationStrategy::IncrementalSort(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>&,
-  std::vector<std::string>& hardwareSorted, std::size_t lastAllocatedIndex)
+  const std::map<std::string, cmCTestResourceAllocator::Resource>&,
+  std::vector<std::string>& resourcesSorted, std::size_t lastAllocatedIndex)
 {
 {
-  auto tmp = hardwareSorted[lastAllocatedIndex];
+  auto tmp = resourcesSorted[lastAllocatedIndex];
   std::size_t i = lastAllocatedIndex;
   std::size_t i = lastAllocatedIndex;
   while (i > 0) {
   while (i > 0) {
-    hardwareSorted[i] = hardwareSorted[i - 1];
+    resourcesSorted[i] = resourcesSorted[i - 1];
     --i;
     --i;
   }
   }
-  hardwareSorted[i] = tmp;
+  resourcesSorted[i] = tmp;
 }
 }
 }
 }
 
 
-bool cmAllocateCTestHardwareRoundRobin(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
+bool cmAllocateCTestResourcesRoundRobin(
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
   std::vector<cmCTestBinPackerAllocation>& allocations)
   std::vector<cmCTestBinPackerAllocation>& allocations)
 {
 {
-  return AllocateCTestHardware<RoundRobinAllocationStrategy>(hardware,
-                                                             allocations);
+  return AllocateCTestResources<RoundRobinAllocationStrategy>(resources,
+                                                              allocations);
 }
 }
 
 
-bool cmAllocateCTestHardwareBlock(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
+bool cmAllocateCTestResourcesBlock(
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
   std::vector<cmCTestBinPackerAllocation>& allocations)
   std::vector<cmCTestBinPackerAllocation>& allocations)
 {
 {
-  return AllocateCTestHardware<BlockAllocationStrategy>(hardware, allocations);
+  return AllocateCTestResources<BlockAllocationStrategy>(resources,
+                                                         allocations);
 }
 }

+ 5 - 5
Source/CTest/cmCTestBinPacker.h

@@ -8,7 +8,7 @@
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
-#include "cmCTestHardwareAllocator.h"
+#include "cmCTestResourceAllocator.h"
 
 
 struct cmCTestBinPackerAllocation
 struct cmCTestBinPackerAllocation
 {
 {
@@ -20,12 +20,12 @@ struct cmCTestBinPackerAllocation
   bool operator!=(const cmCTestBinPackerAllocation& other) const;
   bool operator!=(const cmCTestBinPackerAllocation& other) const;
 };
 };
 
 
-bool cmAllocateCTestHardwareRoundRobin(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
+bool cmAllocateCTestResourcesRoundRobin(
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
   std::vector<cmCTestBinPackerAllocation>& allocations);
   std::vector<cmCTestBinPackerAllocation>& allocations);
 
 
-bool cmAllocateCTestHardwareBlock(
-  const std::map<std::string, cmCTestHardwareAllocator::Resource>& hardware,
+bool cmAllocateCTestResourcesBlock(
+  const std::map<std::string, cmCTestResourceAllocator::Resource>& resources,
   std::vector<cmCTestBinPackerAllocation>& allocations);
   std::vector<cmCTestBinPackerAllocation>& allocations);
 
 
 #endif
 #endif

+ 51 - 50
Source/CTest/cmCTestMultiProcessHandler.cxx

@@ -140,7 +140,7 @@ void cmCTestMultiProcessHandler::RunTests()
     assert(this->Completed == this->Total);
     assert(this->Completed == this->Total);
     assert(this->Tests.empty());
     assert(this->Tests.empty());
   }
   }
-  assert(this->AllHardwareAvailable());
+  assert(this->AllResourcesAvailable());
 
 
   this->MarkFinished();
   this->MarkFinished();
   this->UpdateCostData();
   this->UpdateCostData();
@@ -177,9 +177,9 @@ bool cmCTestMultiProcessHandler::StartTestProcess(int test)
   }
   }
   testRun->SetIndex(test);
   testRun->SetIndex(test);
   testRun->SetTestProperties(this->Properties[test]);
   testRun->SetTestProperties(this->Properties[test]);
-  if (this->TestHandler->UseHardwareSpec) {
-    testRun->SetUseAllocatedHardware(true);
-    testRun->SetAllocatedHardware(this->AllocatedHardware[test]);
+  if (this->TestHandler->UseResourceSpec) {
+    testRun->SetUseAllocatedResources(true);
+    testRun->SetAllocatedResources(this->AllocatedResources[test]);
   }
   }
 
 
   // Find any failed dependencies for this test. We assume the more common
   // Find any failed dependencies for this test. We assume the more common
@@ -192,10 +192,10 @@ bool cmCTestMultiProcessHandler::StartTestProcess(int test)
 
 
   // Always lock the resources we'll be using, even if we fail to set the
   // Always lock the resources we'll be using, even if we fail to set the
   // working directory because FinishTestProcess() will try to unlock them
   // working directory because FinishTestProcess() will try to unlock them
-  this->AllocateResources(test);
+  this->LockResources(test);
 
 
-  if (!this->TestsHaveSufficientHardware[test]) {
-    testRun->StartFailure("Insufficient hardware");
+  if (!this->TestsHaveSufficientResources[test]) {
+    testRun->StartFailure("Insufficient resources");
     this->FinishTestProcess(testRun, false);
     this->FinishTestProcess(testRun, false);
     return false;
     return false;
   }
   }
@@ -218,26 +218,26 @@ bool cmCTestMultiProcessHandler::StartTestProcess(int test)
   return false;
   return false;
 }
 }
 
 
-bool cmCTestMultiProcessHandler::AllocateHardware(int index)
+bool cmCTestMultiProcessHandler::AllocateResources(int index)
 {
 {
-  if (!this->TestHandler->UseHardwareSpec) {
+  if (!this->TestHandler->UseResourceSpec) {
     return true;
     return true;
   }
   }
 
 
   std::map<std::string, std::vector<cmCTestBinPackerAllocation>> allocations;
   std::map<std::string, std::vector<cmCTestBinPackerAllocation>> allocations;
-  if (!this->TryAllocateHardware(index, allocations)) {
+  if (!this->TryAllocateResources(index, allocations)) {
     return false;
     return false;
   }
   }
 
 
-  auto& allocatedHardware = this->AllocatedHardware[index];
-  allocatedHardware.resize(this->Properties[index]->Processes.size());
+  auto& allocatedResources = this->AllocatedResources[index];
+  allocatedResources.resize(this->Properties[index]->ResourceGroups.size());
   for (auto const& it : allocations) {
   for (auto const& it : allocations) {
     for (auto const& alloc : it.second) {
     for (auto const& alloc : it.second) {
-      bool result = this->HardwareAllocator.AllocateResource(
+      bool result = this->ResourceAllocator.AllocateResource(
         it.first, alloc.Id, alloc.SlotsNeeded);
         it.first, alloc.Id, alloc.SlotsNeeded);
       (void)result;
       (void)result;
       assert(result);
       assert(result);
-      allocatedHardware[alloc.ProcessIndex][it.first].push_back(
+      allocatedResources[alloc.ProcessIndex][it.first].push_back(
         { alloc.Id, static_cast<unsigned int>(alloc.SlotsNeeded) });
         { alloc.Id, static_cast<unsigned int>(alloc.SlotsNeeded) });
     }
     }
   }
   }
@@ -245,14 +245,14 @@ bool cmCTestMultiProcessHandler::AllocateHardware(int index)
   return true;
   return true;
 }
 }
 
 
-bool cmCTestMultiProcessHandler::TryAllocateHardware(
+bool cmCTestMultiProcessHandler::TryAllocateResources(
   int index,
   int index,
   std::map<std::string, std::vector<cmCTestBinPackerAllocation>>& allocations)
   std::map<std::string, std::vector<cmCTestBinPackerAllocation>>& allocations)
 {
 {
   allocations.clear();
   allocations.clear();
 
 
   std::size_t processIndex = 0;
   std::size_t processIndex = 0;
-  for (auto const& process : this->Properties[index]->Processes) {
+  for (auto const& process : this->Properties[index]->ResourceGroups) {
     for (auto const& requirement : process) {
     for (auto const& requirement : process) {
       for (int i = 0; i < requirement.UnitsNeeded; ++i) {
       for (int i = 0; i < requirement.UnitsNeeded; ++i) {
         allocations[requirement.ResourceType].push_back(
         allocations[requirement.ResourceType].push_back(
@@ -262,13 +262,13 @@ bool cmCTestMultiProcessHandler::TryAllocateHardware(
     ++processIndex;
     ++processIndex;
   }
   }
 
 
-  auto const& availableHardware = this->HardwareAllocator.GetResources();
+  auto const& availableResources = this->ResourceAllocator.GetResources();
   for (auto& it : allocations) {
   for (auto& it : allocations) {
-    if (!availableHardware.count(it.first)) {
+    if (!availableResources.count(it.first)) {
       return false;
       return false;
     }
     }
-    if (!cmAllocateCTestHardwareRoundRobin(availableHardware.at(it.first),
-                                           it.second)) {
+    if (!cmAllocateCTestResourcesRoundRobin(availableResources.at(it.first),
+                                            it.second)) {
       return false;
       return false;
     }
     }
   }
   }
@@ -276,19 +276,19 @@ bool cmCTestMultiProcessHandler::TryAllocateHardware(
   return true;
   return true;
 }
 }
 
 
-void cmCTestMultiProcessHandler::DeallocateHardware(int index)
+void cmCTestMultiProcessHandler::DeallocateResources(int index)
 {
 {
-  if (!this->TestHandler->UseHardwareSpec) {
+  if (!this->TestHandler->UseResourceSpec) {
     return;
     return;
   }
   }
 
 
   {
   {
-    auto& allocatedHardware = this->AllocatedHardware[index];
-    for (auto const& processAlloc : allocatedHardware) {
+    auto& allocatedResources = this->AllocatedResources[index];
+    for (auto const& processAlloc : allocatedResources) {
       for (auto const& it : processAlloc) {
       for (auto const& it : processAlloc) {
         auto resourceType = it.first;
         auto resourceType = it.first;
         for (auto const& it2 : it.second) {
         for (auto const& it2 : it.second) {
-          bool success = this->HardwareAllocator.DeallocateResource(
+          bool success = this->ResourceAllocator.DeallocateResource(
             resourceType, it2.Id, it2.Slots);
             resourceType, it2.Id, it2.Slots);
           (void)success;
           (void)success;
           assert(success);
           assert(success);
@@ -296,12 +296,12 @@ void cmCTestMultiProcessHandler::DeallocateHardware(int index)
       }
       }
     }
     }
   }
   }
-  this->AllocatedHardware.erase(index);
+  this->AllocatedResources.erase(index);
 }
 }
 
 
-bool cmCTestMultiProcessHandler::AllHardwareAvailable()
+bool cmCTestMultiProcessHandler::AllResourcesAvailable()
 {
 {
-  for (auto const& it : this->HardwareAllocator.GetResources()) {
+  for (auto const& it : this->ResourceAllocator.GetResources()) {
     for (auto const& it2 : it.second) {
     for (auto const& it2 : it.second) {
       if (it2.second.Locked != 0) {
       if (it2.second.Locked != 0) {
         return false;
         return false;
@@ -312,13 +312,13 @@ bool cmCTestMultiProcessHandler::AllHardwareAvailable()
   return true;
   return true;
 }
 }
 
 
-void cmCTestMultiProcessHandler::CheckHardwareAvailable()
+void cmCTestMultiProcessHandler::CheckResourcesAvailable()
 {
 {
   for (auto test : this->SortedTests) {
   for (auto test : this->SortedTests) {
     std::map<std::string, std::vector<cmCTestBinPackerAllocation>> allocations;
     std::map<std::string, std::vector<cmCTestBinPackerAllocation>> allocations;
-    this->TestsHaveSufficientHardware[test] =
-      !this->TestHandler->UseHardwareSpec ||
-      this->TryAllocateHardware(test, allocations);
+    this->TestsHaveSufficientResources[test] =
+      !this->TestHandler->UseResourceSpec ||
+      this->TryAllocateResources(test, allocations);
   }
   }
 }
 }
 
 
@@ -346,7 +346,7 @@ void cmCTestMultiProcessHandler::SetStopTimePassed()
   }
   }
 }
 }
 
 
-void cmCTestMultiProcessHandler::AllocateResources(int index)
+void cmCTestMultiProcessHandler::LockResources(int index)
 {
 {
   this->LockedResources.insert(
   this->LockedResources.insert(
     this->Properties[index]->LockedResources.begin(),
     this->Properties[index]->LockedResources.begin(),
@@ -357,7 +357,7 @@ void cmCTestMultiProcessHandler::AllocateResources(int index)
   }
   }
 }
 }
 
 
-void cmCTestMultiProcessHandler::DeallocateResources(int index)
+void cmCTestMultiProcessHandler::UnlockResources(int index)
 {
 {
   for (std::string const& i : this->Properties[index]->LockedResources) {
   for (std::string const& i : this->Properties[index]->LockedResources) {
     this->LockedResources.erase(i);
     this->LockedResources.erase(i);
@@ -404,10 +404,10 @@ bool cmCTestMultiProcessHandler::StartTest(int test)
     }
     }
   }
   }
 
 
-  // Allocate hardware
-  if (this->TestsHaveSufficientHardware[test] &&
-      !this->AllocateHardware(test)) {
-    this->DeallocateHardware(test);
+  // Allocate resources
+  if (this->TestsHaveSufficientResources[test] &&
+      !this->AllocateResources(test)) {
+    this->DeallocateResources(test);
     return false;
     return false;
   }
   }
 
 
@@ -417,7 +417,7 @@ bool cmCTestMultiProcessHandler::StartTest(int test)
   }
   }
   // This test was not able to start because it is waiting
   // This test was not able to start because it is waiting
   // on depends to run
   // on depends to run
-  this->DeallocateHardware(test);
+  this->DeallocateResources(test);
   return false;
   return false;
 }
 }
 
 
@@ -602,8 +602,8 @@ void cmCTestMultiProcessHandler::FinishTestProcess(cmCTestRunTest* runner,
   this->TestFinishMap[test] = true;
   this->TestFinishMap[test] = true;
   this->TestRunningMap[test] = false;
   this->TestRunningMap[test] = false;
   this->WriteCheckpoint(test);
   this->WriteCheckpoint(test);
-  this->DeallocateHardware(test);
   this->DeallocateResources(test);
   this->DeallocateResources(test);
+  this->UnlockResources(test);
   this->RunningCount -= GetProcessorsUsed(test);
   this->RunningCount -= GetProcessorsUsed(test);
 
 
   for (auto p : properties->Affinity) {
   for (auto p : properties->Affinity) {
@@ -912,14 +912,14 @@ static Json::Value DumpTimeoutAfterMatch(
   return timeoutAfterMatch;
   return timeoutAfterMatch;
 }
 }
 
 
-static Json::Value DumpProcessesToJsonArray(
+static Json::Value DumpResourceGroupsToJsonArray(
   const std::vector<
   const std::vector<
     std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
     std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
-    processes)
+    resourceGroups)
 {
 {
-  Json::Value jsonProcesses = Json::arrayValue;
-  for (auto const& it : processes) {
-    Json::Value jsonProcess = Json::objectValue;
+  Json::Value jsonResourceGroups = Json::arrayValue;
+  for (auto const& it : resourceGroups) {
+    Json::Value jsonResourceGroup = Json::objectValue;
     Json::Value requirements = Json::arrayValue;
     Json::Value requirements = Json::arrayValue;
     for (auto const& it2 : it) {
     for (auto const& it2 : it) {
       Json::Value res = Json::objectValue;
       Json::Value res = Json::objectValue;
@@ -928,10 +928,10 @@ static Json::Value DumpProcessesToJsonArray(
       res["slots"] = it2.SlotsNeeded;
       res["slots"] = it2.SlotsNeeded;
       requirements.append(res);
       requirements.append(res);
     }
     }
-    jsonProcess["requirements"] = requirements;
-    jsonProcesses.append(jsonProcess);
+    jsonResourceGroup["requirements"] = requirements;
+    jsonResourceGroups.append(jsonResourceGroup);
   }
   }
-  return jsonProcesses;
+  return jsonResourceGroups;
 }
 }
 
 
 static Json::Value DumpCTestProperty(std::string const& name,
 static Json::Value DumpCTestProperty(std::string const& name,
@@ -1005,9 +1005,10 @@ static Json::Value DumpCTestProperties(
       "PASS_REGULAR_EXPRESSION",
       "PASS_REGULAR_EXPRESSION",
       DumpRegExToJsonArray(testProperties.RequiredRegularExpressions)));
       DumpRegExToJsonArray(testProperties.RequiredRegularExpressions)));
   }
   }
-  if (!testProperties.Processes.empty()) {
+  if (!testProperties.ResourceGroups.empty()) {
     properties.append(DumpCTestProperty(
     properties.append(DumpCTestProperty(
-      "PROCESSES", DumpProcessesToJsonArray(testProperties.Processes)));
+      "RESOURCE_GROUPS",
+      DumpResourceGroupsToJsonArray(testProperties.ResourceGroups)));
   }
   }
   if (testProperties.WantAffinity) {
   if (testProperties.WantAffinity) {
     properties.append(
     properties.append(

+ 16 - 16
Source/CTest/cmCTestMultiProcessHandler.h

@@ -14,13 +14,13 @@
 
 
 #include "cm_uv.h"
 #include "cm_uv.h"
 
 
-#include "cmCTestHardwareAllocator.h"
+#include "cmCTestResourceAllocator.h"
 #include "cmCTestTestHandler.h"
 #include "cmCTestTestHandler.h"
 #include "cmUVHandlePtr.h"
 #include "cmUVHandlePtr.h"
 
 
 class cmCTest;
 class cmCTest;
 struct cmCTestBinPackerAllocation;
 struct cmCTestBinPackerAllocation;
-class cmCTestHardwareSpec;
+class cmCTestResourceSpec;
 class cmCTestRunTest;
 class cmCTestRunTest;
 
 
 /** \class cmCTestMultiProcessHandler
 /** \class cmCTestMultiProcessHandler
@@ -47,7 +47,7 @@ public:
     : public std::map<int, cmCTestTestHandler::cmCTestTestProperties*>
     : public std::map<int, cmCTestTestHandler::cmCTestTestProperties*>
   {
   {
   };
   };
-  struct HardwareAllocation
+  struct ResourceAllocation
   {
   {
     std::string Id;
     std::string Id;
     unsigned int Slots;
     unsigned int Slots;
@@ -87,12 +87,12 @@ public:
 
 
   void SetQuiet(bool b) { this->Quiet = b; }
   void SetQuiet(bool b) { this->Quiet = b; }
 
 
-  void InitHardwareAllocator(const cmCTestHardwareSpec& spec)
+  void InitResourceAllocator(const cmCTestResourceSpec& spec)
   {
   {
-    this->HardwareAllocator.InitializeFromHardwareSpec(spec);
+    this->ResourceAllocator.InitializeFromResourceSpec(spec);
   }
   }
 
 
-  void CheckHardwareAvailable();
+  void CheckResourcesAvailable();
 
 
 protected:
 protected:
   // Start the next test or tests as many as are allowed by
   // Start the next test or tests as many as are allowed by
@@ -134,16 +134,16 @@ protected:
   bool CheckStopTimePassed();
   bool CheckStopTimePassed();
   void SetStopTimePassed();
   void SetStopTimePassed();
 
 
-  void AllocateResources(int index);
-  void DeallocateResources(int index);
+  void LockResources(int index);
+  void UnlockResources(int index);
 
 
-  bool AllocateHardware(int index);
-  bool TryAllocateHardware(
+  bool AllocateResources(int index);
+  bool TryAllocateResources(
     int index,
     int index,
     std::map<std::string, std::vector<cmCTestBinPackerAllocation>>&
     std::map<std::string, std::vector<cmCTestBinPackerAllocation>>&
       allocations);
       allocations);
-  void DeallocateHardware(int index);
-  bool AllHardwareAvailable();
+  void DeallocateResources(int index);
+  bool AllResourcesAvailable();
 
 
   // map from test number to set of depend tests
   // map from test number to set of depend tests
   TestMap Tests;
   TestMap Tests;
@@ -166,10 +166,10 @@ protected:
   std::vector<std::string> LastTestsFailed;
   std::vector<std::string> LastTestsFailed;
   std::set<std::string> LockedResources;
   std::set<std::string> LockedResources;
   std::map<int,
   std::map<int,
-           std::vector<std::map<std::string, std::vector<HardwareAllocation>>>>
-    AllocatedHardware;
-  std::map<int, bool> TestsHaveSufficientHardware;
-  cmCTestHardwareAllocator HardwareAllocator;
+           std::vector<std::map<std::string, std::vector<ResourceAllocation>>>>
+    AllocatedResources;
+  std::map<int, bool> TestsHaveSufficientResources;
+  cmCTestResourceAllocator ResourceAllocator;
   std::vector<cmCTestTestHandler::cmCTestTestResult>* TestResults;
   std::vector<cmCTestTestHandler::cmCTestTestResult>* TestResults;
   size_t ParallelLevel; // max number of process that can be run at once
   size_t ParallelLevel; // max number of process that can be run at once
   unsigned long TestLoad;
   unsigned long TestLoad;

+ 0 - 55
Source/CTest/cmCTestProcessesLexerHelper.cxx

@@ -1,55 +0,0 @@
-/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-   file Copyright.txt or https://cmake.org/licensing for details.  */
-#include "cmCTestProcessesLexerHelper.h"
-
-#include "cmCTestProcessesLexer.h"
-#include "cmCTestTestHandler.h"
-
-cmCTestProcessesLexerHelper::cmCTestProcessesLexerHelper(
-  std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
-    output)
-  : Output(output)
-{
-}
-
-bool cmCTestProcessesLexerHelper::ParseString(const std::string& value)
-{
-  yyscan_t lexer;
-  cmCTestProcesses_yylex_init_extra(this, &lexer);
-
-  auto state = cmCTestProcesses_yy_scan_string(value.c_str(), lexer);
-  int retval = cmCTestProcesses_yylex(lexer);
-  cmCTestProcesses_yy_delete_buffer(state, lexer);
-
-  cmCTestProcesses_yylex_destroy(lexer);
-  return retval == 0;
-}
-
-void cmCTestProcessesLexerHelper::SetProcessCount(unsigned int count)
-{
-  this->ProcessCount = count;
-}
-
-void cmCTestProcessesLexerHelper::SetResourceType(const std::string& type)
-{
-  this->ResourceType = type;
-}
-
-void cmCTestProcessesLexerHelper::SetNeededSlots(int count)
-{
-  this->NeededSlots = count;
-}
-
-void cmCTestProcessesLexerHelper::WriteRequirement()
-{
-  this->Process.push_back({ this->ResourceType, this->NeededSlots, 1 });
-}
-
-void cmCTestProcessesLexerHelper::WriteProcess()
-{
-  for (unsigned int i = 0; i < this->ProcessCount; ++i) {
-    this->Output.push_back(this->Process);
-  }
-  this->Process.clear();
-  this->ProcessCount = 1;
-}

+ 10 - 10
Source/CTest/cmCTestHardwareAllocator.cxx → Source/CTest/cmCTestResourceAllocator.cxx

@@ -1,15 +1,15 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
    file Copyright.txt or https://cmake.org/licensing for details.  */
 
 
-#include "cmCTestHardwareAllocator.h"
+#include "cmCTestResourceAllocator.h"
 
 
 #include <utility>
 #include <utility>
 #include <vector>
 #include <vector>
 
 
-#include "cmCTestHardwareSpec.h"
+#include "cmCTestResourceSpec.h"
 
 
-void cmCTestHardwareAllocator::InitializeFromHardwareSpec(
-  const cmCTestHardwareSpec& spec)
+void cmCTestResourceAllocator::InitializeFromResourceSpec(
+  const cmCTestResourceSpec& spec)
 {
 {
   this->Resources.clear();
   this->Resources.clear();
 
 
@@ -23,13 +23,13 @@ void cmCTestHardwareAllocator::InitializeFromHardwareSpec(
 }
 }
 
 
 const std::map<std::string,
 const std::map<std::string,
-               std::map<std::string, cmCTestHardwareAllocator::Resource>>&
-cmCTestHardwareAllocator::GetResources() const
+               std::map<std::string, cmCTestResourceAllocator::Resource>>&
+cmCTestResourceAllocator::GetResources() const
 {
 {
   return this->Resources;
   return this->Resources;
 }
 }
 
 
-bool cmCTestHardwareAllocator::AllocateResource(const std::string& name,
+bool cmCTestResourceAllocator::AllocateResource(const std::string& name,
                                                 const std::string& id,
                                                 const std::string& id,
                                                 unsigned int slots)
                                                 unsigned int slots)
 {
 {
@@ -51,7 +51,7 @@ bool cmCTestHardwareAllocator::AllocateResource(const std::string& name,
   return true;
   return true;
 }
 }
 
 
-bool cmCTestHardwareAllocator::DeallocateResource(const std::string& name,
+bool cmCTestResourceAllocator::DeallocateResource(const std::string& name,
                                                   const std::string& id,
                                                   const std::string& id,
                                                   unsigned int slots)
                                                   unsigned int slots)
 {
 {
@@ -73,13 +73,13 @@ bool cmCTestHardwareAllocator::DeallocateResource(const std::string& name,
   return true;
   return true;
 }
 }
 
 
-bool cmCTestHardwareAllocator::Resource::operator==(
+bool cmCTestResourceAllocator::Resource::operator==(
   const Resource& other) const
   const Resource& other) const
 {
 {
   return this->Total == other.Total && this->Locked == other.Locked;
   return this->Total == other.Total && this->Locked == other.Locked;
 }
 }
 
 
-bool cmCTestHardwareAllocator::Resource::operator!=(
+bool cmCTestResourceAllocator::Resource::operator!=(
   const Resource& other) const
   const Resource& other) const
 {
 {
   return !(*this == other);
   return !(*this == other);

+ 5 - 5
Source/CTest/cmCTestHardwareAllocator.h → Source/CTest/cmCTestResourceAllocator.h

@@ -1,14 +1,14 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
    file Copyright.txt or https://cmake.org/licensing for details.  */
-#ifndef cmCTestHardwareAllocator_h
-#define cmCTestHardwareAllocator_h
+#ifndef cmCTestResourceAllocator_h
+#define cmCTestResourceAllocator_h
 
 
 #include <map>
 #include <map>
 #include <string>
 #include <string>
 
 
-class cmCTestHardwareSpec;
+class cmCTestResourceSpec;
 
 
-class cmCTestHardwareAllocator
+class cmCTestResourceAllocator
 {
 {
 public:
 public:
   struct Resource
   struct Resource
@@ -22,7 +22,7 @@ public:
     bool operator!=(const Resource& other) const;
     bool operator!=(const Resource& other) const;
   };
   };
 
 
-  void InitializeFromHardwareSpec(const cmCTestHardwareSpec& spec);
+  void InitializeFromResourceSpec(const cmCTestResourceSpec& spec);
 
 
   const std::map<std::string, std::map<std::string, Resource>>& GetResources()
   const std::map<std::string, std::map<std::string, Resource>>& GetResources()
     const;
     const;

+ 55 - 0
Source/CTest/cmCTestResourceGroupsLexerHelper.cxx

@@ -0,0 +1,55 @@
+/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+   file Copyright.txt or https://cmake.org/licensing for details.  */
+#include "cmCTestResourceGroupsLexerHelper.h"
+
+#include "cmCTestResourceGroupsLexer.h"
+#include "cmCTestTestHandler.h"
+
+cmCTestResourceGroupsLexerHelper::cmCTestResourceGroupsLexerHelper(
+  std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
+    output)
+  : Output(output)
+{
+}
+
+bool cmCTestResourceGroupsLexerHelper::ParseString(const std::string& value)
+{
+  yyscan_t lexer;
+  cmCTestResourceGroups_yylex_init_extra(this, &lexer);
+
+  auto state = cmCTestResourceGroups_yy_scan_string(value.c_str(), lexer);
+  int retval = cmCTestResourceGroups_yylex(lexer);
+  cmCTestResourceGroups_yy_delete_buffer(state, lexer);
+
+  cmCTestResourceGroups_yylex_destroy(lexer);
+  return retval == 0;
+}
+
+void cmCTestResourceGroupsLexerHelper::SetProcessCount(unsigned int count)
+{
+  this->ProcessCount = count;
+}
+
+void cmCTestResourceGroupsLexerHelper::SetResourceType(const std::string& type)
+{
+  this->ResourceType = type;
+}
+
+void cmCTestResourceGroupsLexerHelper::SetNeededSlots(int count)
+{
+  this->NeededSlots = count;
+}
+
+void cmCTestResourceGroupsLexerHelper::WriteRequirement()
+{
+  this->Process.push_back({ this->ResourceType, this->NeededSlots, 1 });
+}
+
+void cmCTestResourceGroupsLexerHelper::WriteProcess()
+{
+  for (unsigned int i = 0; i < this->ProcessCount; ++i) {
+    this->Output.push_back(this->Process);
+  }
+  this->Process.clear();
+  this->ProcessCount = 1;
+}

+ 6 - 6
Source/CTest/cmCTestProcessesLexerHelper.h → Source/CTest/cmCTestResourceGroupsLexerHelper.h

@@ -1,25 +1,25 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
    file Copyright.txt or https://cmake.org/licensing for details.  */
-#ifndef cmCTestProcessesLexerHelper_h
-#define cmCTestProcessesLexerHelper_h
+#ifndef cmCTestResourceGroupsLexerHelper_h
+#define cmCTestResourceGroupsLexerHelper_h
 
 
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
 #include "cmCTestTestHandler.h"
 #include "cmCTestTestHandler.h"
 
 
-class cmCTestProcessesLexerHelper
+class cmCTestResourceGroupsLexerHelper
 {
 {
 public:
 public:
   struct ParserType
   struct ParserType
   {
   {
   };
   };
 
 
-  cmCTestProcessesLexerHelper(
+  cmCTestResourceGroupsLexerHelper(
     std::vector<
     std::vector<
       std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
       std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
       output);
       output);
-  ~cmCTestProcessesLexerHelper() = default;
+  ~cmCTestResourceGroupsLexerHelper() = default;
 
 
   bool ParseString(const std::string& value);
   bool ParseString(const std::string& value);
 
 
@@ -39,6 +39,6 @@ private:
   std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement> Process;
   std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement> Process;
 };
 };
 
 
-#define YY_EXTRA_TYPE cmCTestProcessesLexerHelper*
+#define YY_EXTRA_TYPE cmCTestResourceGroupsLexerHelper*
 
 
 #endif
 #endif

+ 14 - 14
Source/CTest/cmCTestHardwareSpec.cxx → Source/CTest/cmCTestResourceSpec.cxx

@@ -1,6 +1,6 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
    file Copyright.txt or https://cmake.org/licensing for details.  */
-#include "cmCTestHardwareSpec.h"
+#include "cmCTestResourceSpec.h"
 
 
 #include <map>
 #include <map>
 #include <string>
 #include <string>
@@ -16,7 +16,7 @@
 static const cmsys::RegularExpression IdentifierRegex{ "^[a-z_][a-z0-9_]*$" };
 static const cmsys::RegularExpression IdentifierRegex{ "^[a-z_][a-z0-9_]*$" };
 static const cmsys::RegularExpression IdRegex{ "^[a-z0-9_]+$" };
 static const cmsys::RegularExpression IdRegex{ "^[a-z0-9_]+$" };
 
 
-bool cmCTestHardwareSpec::ReadFromJSONFile(const std::string& filename)
+bool cmCTestResourceSpec::ReadFromJSONFile(const std::string& filename)
 {
 {
   cmsys::ifstream fin(filename.c_str());
   cmsys::ifstream fin(filename.c_str());
   if (!fin) {
   if (!fin) {
@@ -50,7 +50,7 @@ bool cmCTestHardwareSpec::ReadFromJSONFile(const std::string& filename)
   if (!localSocket.isObject()) {
   if (!localSocket.isObject()) {
     return false;
     return false;
   }
   }
-  std::map<std::string, std::vector<cmCTestHardwareSpec::Resource>> resources;
+  std::map<std::string, std::vector<cmCTestResourceSpec::Resource>> resources;
   cmsys::RegularExpressionMatch match;
   cmsys::RegularExpressionMatch match;
   for (auto const& key : localSocket.getMemberNames()) {
   for (auto const& key : localSocket.getMemberNames()) {
     if (IdentifierRegex.find(key.c_str(), match)) {
     if (IdentifierRegex.find(key.c_str(), match)) {
@@ -59,7 +59,7 @@ bool cmCTestHardwareSpec::ReadFromJSONFile(const std::string& filename)
       if (value.isArray()) {
       if (value.isArray()) {
         for (auto const& item : value) {
         for (auto const& item : value) {
           if (item.isObject()) {
           if (item.isObject()) {
-            cmCTestHardwareSpec::Resource resource;
+            cmCTestResourceSpec::Resource resource;
 
 
             if (!item.isMember("id")) {
             if (!item.isMember("id")) {
               return false;
               return false;
@@ -98,36 +98,36 @@ bool cmCTestHardwareSpec::ReadFromJSONFile(const std::string& filename)
   return true;
   return true;
 }
 }
 
 
-bool cmCTestHardwareSpec::operator==(const cmCTestHardwareSpec& other) const
+bool cmCTestResourceSpec::operator==(const cmCTestResourceSpec& other) const
 {
 {
   return this->LocalSocket == other.LocalSocket;
   return this->LocalSocket == other.LocalSocket;
 }
 }
 
 
-bool cmCTestHardwareSpec::operator!=(const cmCTestHardwareSpec& other) const
+bool cmCTestResourceSpec::operator!=(const cmCTestResourceSpec& other) const
 {
 {
   return !(*this == other);
   return !(*this == other);
 }
 }
 
 
-bool cmCTestHardwareSpec::Socket::operator==(
-  const cmCTestHardwareSpec::Socket& other) const
+bool cmCTestResourceSpec::Socket::operator==(
+  const cmCTestResourceSpec::Socket& other) const
 {
 {
   return this->Resources == other.Resources;
   return this->Resources == other.Resources;
 }
 }
 
 
-bool cmCTestHardwareSpec::Socket::operator!=(
-  const cmCTestHardwareSpec::Socket& other) const
+bool cmCTestResourceSpec::Socket::operator!=(
+  const cmCTestResourceSpec::Socket& other) const
 {
 {
   return !(*this == other);
   return !(*this == other);
 }
 }
 
 
-bool cmCTestHardwareSpec::Resource::operator==(
-  const cmCTestHardwareSpec::Resource& other) const
+bool cmCTestResourceSpec::Resource::operator==(
+  const cmCTestResourceSpec::Resource& other) const
 {
 {
   return this->Id == other.Id && this->Capacity == other.Capacity;
   return this->Id == other.Id && this->Capacity == other.Capacity;
 }
 }
 
 
-bool cmCTestHardwareSpec::Resource::operator!=(
-  const cmCTestHardwareSpec::Resource& other) const
+bool cmCTestResourceSpec::Resource::operator!=(
+  const cmCTestResourceSpec::Resource& other) const
 {
 {
   return !(*this == other);
   return !(*this == other);
 }
 }

+ 5 - 5
Source/CTest/cmCTestHardwareSpec.h → Source/CTest/cmCTestResourceSpec.h

@@ -1,13 +1,13 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
    file Copyright.txt or https://cmake.org/licensing for details.  */
-#ifndef cmCTestHardwareSpec_h
-#define cmCTestHardwareSpec_h
+#ifndef cmCTestResourceSpec_h
+#define cmCTestResourceSpec_h
 
 
 #include <map>
 #include <map>
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
-class cmCTestHardwareSpec
+class cmCTestResourceSpec
 {
 {
 public:
 public:
   class Resource
   class Resource
@@ -33,8 +33,8 @@ public:
 
 
   bool ReadFromJSONFile(const std::string& filename);
   bool ReadFromJSONFile(const std::string& filename);
 
 
-  bool operator==(const cmCTestHardwareSpec& other) const;
-  bool operator!=(const cmCTestHardwareSpec& other) const;
+  bool operator==(const cmCTestResourceSpec& other) const;
+  bool operator!=(const cmCTestResourceSpec& other) const;
 };
 };
 
 
 #endif
 #endif

+ 8 - 8
Source/CTest/cmCTestRunTest.cxx

@@ -691,25 +691,25 @@ bool cmCTestRunTest::ForkProcess(cmDuration testTimeOut, bool explicitTimeout,
     cmSystemTools::AppendEnv(*environment);
     cmSystemTools::AppendEnv(*environment);
   }
   }
 
 
-  if (this->UseAllocatedHardware) {
-    this->SetupHardwareEnvironment();
+  if (this->UseAllocatedResources) {
+    this->SetupResourcesEnvironment();
   } else {
   } else {
-    cmSystemTools::UnsetEnv("CTEST_PROCESS_COUNT");
+    cmSystemTools::UnsetEnv("CTEST_RESOURCE_GROUP_COUNT");
   }
   }
 
 
   return this->TestProcess->StartProcess(this->MultiTestHandler.Loop,
   return this->TestProcess->StartProcess(this->MultiTestHandler.Loop,
                                          affinity);
                                          affinity);
 }
 }
 
 
-void cmCTestRunTest::SetupHardwareEnvironment()
+void cmCTestRunTest::SetupResourcesEnvironment()
 {
 {
-  std::string processCount = "CTEST_PROCESS_COUNT=";
-  processCount += std::to_string(this->AllocatedHardware.size());
+  std::string processCount = "CTEST_RESOURCE_GROUP_COUNT=";
+  processCount += std::to_string(this->AllocatedResources.size());
   cmSystemTools::PutEnv(processCount);
   cmSystemTools::PutEnv(processCount);
 
 
   std::size_t i = 0;
   std::size_t i = 0;
-  for (auto const& process : this->AllocatedHardware) {
-    std::string prefix = "CTEST_PROCESS_";
+  for (auto const& process : this->AllocatedResources) {
+    std::string prefix = "CTEST_RESOURCE_GROUP_";
     prefix += std::to_string(i);
     prefix += std::to_string(i);
     std::string resourceList = prefix + '=';
     std::string resourceList = prefix + '=';
     prefix += '_';
     prefix += '_';

+ 12 - 9
Source/CTest/cmCTestRunTest.h

@@ -88,14 +88,17 @@ public:
 
 
   bool TimedOutForStopTime() const { return this->TimeoutIsForStopTime; }
   bool TimedOutForStopTime() const { return this->TimeoutIsForStopTime; }
 
 
-  void SetUseAllocatedHardware(bool use) { this->UseAllocatedHardware = use; }
-  void SetAllocatedHardware(
+  void SetUseAllocatedResources(bool use)
+  {
+    this->UseAllocatedResources = use;
+  }
+  void SetAllocatedResources(
     const std::vector<
     const std::vector<
       std::map<std::string,
       std::map<std::string,
-               std::vector<cmCTestMultiProcessHandler::HardwareAllocation>>>&
-      hardware)
+               std::vector<cmCTestMultiProcessHandler::ResourceAllocation>>>&
+      resources)
   {
   {
-    this->AllocatedHardware = hardware;
+    this->AllocatedResources = resources;
   }
   }
 
 
 private:
 private:
@@ -109,7 +112,7 @@ private:
   // Run post processing of the process output for MemCheck
   // Run post processing of the process output for MemCheck
   void MemCheckPostProcess();
   void MemCheckPostProcess();
 
 
-  void SetupHardwareEnvironment();
+  void SetupResourcesEnvironment();
 
 
   // Returns "completed/total Test #Index: "
   // Returns "completed/total Test #Index: "
   std::string GetTestPrefix(size_t completed, size_t total) const;
   std::string GetTestPrefix(size_t completed, size_t total) const;
@@ -129,10 +132,10 @@ private:
   std::string StartTime;
   std::string StartTime;
   std::string ActualCommand;
   std::string ActualCommand;
   std::vector<std::string> Arguments;
   std::vector<std::string> Arguments;
-  bool UseAllocatedHardware = false;
+  bool UseAllocatedResources = false;
   std::vector<std::map<
   std::vector<std::map<
-    std::string, std::vector<cmCTestMultiProcessHandler::HardwareAllocation>>>
-    AllocatedHardware;
+    std::string, std::vector<cmCTestMultiProcessHandler::ResourceAllocation>>>
+    AllocatedResources;
   cmCTest::Rerun RerunMode = cmCTest::Rerun::Never;
   cmCTest::Rerun RerunMode = cmCTest::Rerun::Never;
   int NumberOfRunsLeft = 1;  // default to 1 run of the test
   int NumberOfRunsLeft = 1;  // default to 1 run of the test
   int NumberOfRunsTotal = 1; // default to 1 run of the test
   int NumberOfRunsTotal = 1; // default to 1 run of the test

+ 3 - 3
Source/CTest/cmCTestTestCommand.cxx

@@ -32,7 +32,7 @@ void cmCTestTestCommand::BindArguments()
   this->Bind("SCHEDULE_RANDOM"_s, this->ScheduleRandom);
   this->Bind("SCHEDULE_RANDOM"_s, this->ScheduleRandom);
   this->Bind("STOP_TIME"_s, this->StopTime);
   this->Bind("STOP_TIME"_s, this->StopTime);
   this->Bind("TEST_LOAD"_s, this->TestLoad);
   this->Bind("TEST_LOAD"_s, this->TestLoad);
-  this->Bind("HARDWARE_SPEC_FILE"_s, this->HardwareSpecFile);
+  this->Bind("RESOURCE_SPEC_FILE"_s, this->ResourceSpecFile);
 }
 }
 
 
 cmCTestGenericHandler* cmCTestTestCommand::InitializeHandler()
 cmCTestGenericHandler* cmCTestTestCommand::InitializeHandler()
@@ -88,8 +88,8 @@ cmCTestGenericHandler* cmCTestTestCommand::InitializeHandler()
   if (!this->ScheduleRandom.empty()) {
   if (!this->ScheduleRandom.empty()) {
     handler->SetOption("ScheduleRandom", this->ScheduleRandom.c_str());
     handler->SetOption("ScheduleRandom", this->ScheduleRandom.c_str());
   }
   }
-  if (!this->HardwareSpecFile.empty()) {
-    handler->SetOption("HardwareSpecFile", this->HardwareSpecFile.c_str());
+  if (!this->ResourceSpecFile.empty()) {
+    handler->SetOption("ResourceSpecFile", this->ResourceSpecFile.c_str());
   }
   }
   if (!this->StopTime.empty()) {
   if (!this->StopTime.empty()) {
     this->CTest->SetStopTime(this->StopTime);
     this->CTest->SetStopTime(this->StopTime);

+ 1 - 1
Source/CTest/cmCTestTestCommand.h

@@ -58,7 +58,7 @@ protected:
   std::string ScheduleRandom;
   std::string ScheduleRandom;
   std::string StopTime;
   std::string StopTime;
   std::string TestLoad;
   std::string TestLoad;
-  std::string HardwareSpecFile;
+  std::string ResourceSpecFile;
 };
 };
 
 
 #endif
 #endif

+ 14 - 14
Source/CTest/cmCTestTestHandler.cxx

@@ -29,7 +29,7 @@
 #include "cmAlgorithms.h"
 #include "cmAlgorithms.h"
 #include "cmCTest.h"
 #include "cmCTest.h"
 #include "cmCTestMultiProcessHandler.h"
 #include "cmCTestMultiProcessHandler.h"
-#include "cmCTestProcessesLexerHelper.h"
+#include "cmCTestResourceGroupsLexerHelper.h"
 #include "cmDuration.h"
 #include "cmDuration.h"
 #include "cmExecutionStatus.h"
 #include "cmExecutionStatus.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratedFileStream.h"
@@ -289,7 +289,7 @@ cmCTestTestHandler::cmCTestTestHandler()
   this->UseIncludeRegExpFlag = false;
   this->UseIncludeRegExpFlag = false;
   this->UseExcludeRegExpFlag = false;
   this->UseExcludeRegExpFlag = false;
   this->UseExcludeRegExpFirst = false;
   this->UseExcludeRegExpFirst = false;
-  this->UseHardwareSpec = false;
+  this->UseResourceSpec = false;
 
 
   this->CustomMaximumPassedTestOutputSize = 1 * 1024;
   this->CustomMaximumPassedTestOutputSize = 1 * 1024;
   this->CustomMaximumFailedTestOutputSize = 300 * 1024;
   this->CustomMaximumFailedTestOutputSize = 300 * 1024;
@@ -510,12 +510,12 @@ bool cmCTestTestHandler::ProcessOptions()
   }
   }
   this->SetRerunFailed(cmIsOn(this->GetOption("RerunFailed")));
   this->SetRerunFailed(cmIsOn(this->GetOption("RerunFailed")));
 
 
-  val = this->GetOption("HardwareSpecFile");
+  val = this->GetOption("ResourceSpecFile");
   if (val) {
   if (val) {
-    this->UseHardwareSpec = true;
-    if (!this->HardwareSpec.ReadFromJSONFile(val)) {
+    this->UseResourceSpec = true;
+    if (!this->ResourceSpec.ReadFromJSONFile(val)) {
       cmCTestLog(this->CTest, ERROR_MESSAGE,
       cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "Could not read hardware spec file: " << val << std::endl);
+                 "Could not read resource spec file: " << val << std::endl);
       return false;
       return false;
     }
     }
   }
   }
@@ -1237,8 +1237,8 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<std::string>& passed,
   } else {
   } else {
     parallel->SetTestLoad(this->CTest->GetTestLoad());
     parallel->SetTestLoad(this->CTest->GetTestLoad());
   }
   }
-  if (this->UseHardwareSpec) {
-    parallel->InitHardwareAllocator(this->HardwareSpec);
+  if (this->UseResourceSpec) {
+    parallel->InitResourceAllocator(this->ResourceSpec);
   }
   }
 
 
   *this->LogFile
   *this->LogFile
@@ -1283,7 +1283,7 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<std::string>& passed,
   parallel->SetPassFailVectors(&passed, &failed);
   parallel->SetPassFailVectors(&passed, &failed);
   this->TestResults.clear();
   this->TestResults.clear();
   parallel->SetTestResults(&this->TestResults);
   parallel->SetTestResults(&this->TestResults);
-  parallel->CheckHardwareAvailable();
+  parallel->CheckResourcesAvailable();
 
 
   if (this->CTest->ShouldPrintLabels()) {
   if (this->CTest->ShouldPrintLabels()) {
     parallel->PrintLabels();
     parallel->PrintLabels();
@@ -1626,11 +1626,11 @@ std::string cmCTestTestHandler::FindExecutable(
   return fullPath;
   return fullPath;
 }
 }
 
 
-bool cmCTestTestHandler::ParseProcessesProperty(
+bool cmCTestTestHandler::ParseResourceGroupsProperty(
   const std::string& val,
   const std::string& val,
-  std::vector<std::vector<cmCTestTestResourceRequirement>>& processes)
+  std::vector<std::vector<cmCTestTestResourceRequirement>>& resourceGroups)
 {
 {
-  cmCTestProcessesLexerHelper lexer(processes);
+  cmCTestResourceGroupsLexerHelper lexer(resourceGroups);
   return lexer.ParseString(val);
   return lexer.ParseString(val);
 }
 }
 
 
@@ -2203,8 +2203,8 @@ bool cmCTestTestHandler::SetTestsProperties(
           if (key == "PROCESSOR_AFFINITY") {
           if (key == "PROCESSOR_AFFINITY") {
             rt.WantAffinity = cmIsOn(val);
             rt.WantAffinity = cmIsOn(val);
           }
           }
-          if (key == "PROCESSES") {
-            if (!ParseProcessesProperty(val, rt.Processes)) {
+          if (key == "RESOURCE_GROUPS") {
+            if (!ParseResourceGroupsProperty(val, rt.ResourceGroups)) {
               return false;
               return false;
             }
             }
           }
           }

+ 6 - 6
Source/CTest/cmCTestTestHandler.h

@@ -19,7 +19,7 @@
 #include "cmsys/RegularExpression.hxx"
 #include "cmsys/RegularExpression.hxx"
 
 
 #include "cmCTestGenericHandler.h"
 #include "cmCTestGenericHandler.h"
-#include "cmCTestHardwareSpec.h"
+#include "cmCTestResourceSpec.h"
 #include "cmDuration.h"
 #include "cmDuration.h"
 #include "cmListFileCache.h"
 #include "cmListFileCache.h"
 
 
@@ -158,7 +158,7 @@ public:
     std::set<std::string> FixturesCleanup;
     std::set<std::string> FixturesCleanup;
     std::set<std::string> FixturesRequired;
     std::set<std::string> FixturesRequired;
     std::set<std::string> RequireSuccessDepends;
     std::set<std::string> RequireSuccessDepends;
-    std::vector<std::vector<cmCTestTestResourceRequirement>> Processes;
+    std::vector<std::vector<cmCTestTestResourceRequirement>> ResourceGroups;
     // Private test generator properties used to track backtraces
     // Private test generator properties used to track backtraces
     cmListFileBacktrace Backtrace;
     cmListFileBacktrace Backtrace;
   };
   };
@@ -202,9 +202,9 @@ public:
                                     std::vector<std::string>& extraPaths,
                                     std::vector<std::string>& extraPaths,
                                     std::vector<std::string>& failed);
                                     std::vector<std::string>& failed);
 
 
-  static bool ParseProcessesProperty(
+  static bool ParseResourceGroupsProperty(
     const std::string& val,
     const std::string& val,
-    std::vector<std::vector<cmCTestTestResourceRequirement>>& processes);
+    std::vector<std::vector<cmCTestTestResourceRequirement>>& resourceGroups);
 
 
   using ListOfTests = std::vector<cmCTestTestProperties>;
   using ListOfTests = std::vector<cmCTestTestProperties>;
 
 
@@ -336,8 +336,8 @@ private:
   cmsys::RegularExpression IncludeTestsRegularExpression;
   cmsys::RegularExpression IncludeTestsRegularExpression;
   cmsys::RegularExpression ExcludeTestsRegularExpression;
   cmsys::RegularExpression ExcludeTestsRegularExpression;
 
 
-  bool UseHardwareSpec;
-  cmCTestHardwareSpec HardwareSpec;
+  bool UseResourceSpec;
+  cmCTestResourceSpec ResourceSpec;
 
 
   void GenerateRegressionImages(cmXMLWriter& xml, const std::string& dart);
   void GenerateRegressionImages(cmXMLWriter& xml, const std::string& dart);
   cmsys::RegularExpression DartStuff1;
   cmsys::RegularExpression DartStuff1;

+ 2 - 2
Source/LexerParser/.gitattributes

@@ -2,8 +2,8 @@
 /cmCommandArgumentLexer.h          generated
 /cmCommandArgumentLexer.h          generated
 /cmCommandArgumentParser.cxx       generated
 /cmCommandArgumentParser.cxx       generated
 /cmCommandArgumentParserTokens.h   generated
 /cmCommandArgumentParserTokens.h   generated
-/cmCTestProcessesLexer.cxx         generated
-/cmCTestProcessesLexer.h           generated
+/cmCTestResourceGroupsLexer.cxx    generated
+/cmCTestResourceGroupsLexer.h      generated
 /cmDependsJavaLexer.cxx            generated
 /cmDependsJavaLexer.cxx            generated
 /cmDependsJavaLexer.h              generated
 /cmDependsJavaLexer.h              generated
 /cmDependsJavaParser.cxx           generated
 /cmDependsJavaParser.cxx           generated

+ 84 - 84
Source/LexerParser/cmCTestProcessesLexer.cxx → Source/LexerParser/cmCTestResourceGroupsLexer.cxx

@@ -14,213 +14,213 @@
 #endif
 #endif
 
 
 #ifdef yy_create_buffer
 #ifdef yy_create_buffer
-#define cmCTestProcesses_yy_create_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_create_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_create_buffer cmCTestProcesses_yy_create_buffer
+#define yy_create_buffer cmCTestResourceGroups_yy_create_buffer
 #endif
 #endif
 
 
 #ifdef yy_delete_buffer
 #ifdef yy_delete_buffer
-#define cmCTestProcesses_yy_delete_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_delete_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_delete_buffer cmCTestProcesses_yy_delete_buffer
+#define yy_delete_buffer cmCTestResourceGroups_yy_delete_buffer
 #endif
 #endif
 
 
 #ifdef yy_scan_buffer
 #ifdef yy_scan_buffer
-#define cmCTestProcesses_yy_scan_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_scan_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_scan_buffer cmCTestProcesses_yy_scan_buffer
+#define yy_scan_buffer cmCTestResourceGroups_yy_scan_buffer
 #endif
 #endif
 
 
 #ifdef yy_scan_string
 #ifdef yy_scan_string
-#define cmCTestProcesses_yy_scan_string_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_scan_string_ALREADY_DEFINED
 #else
 #else
-#define yy_scan_string cmCTestProcesses_yy_scan_string
+#define yy_scan_string cmCTestResourceGroups_yy_scan_string
 #endif
 #endif
 
 
 #ifdef yy_scan_bytes
 #ifdef yy_scan_bytes
-#define cmCTestProcesses_yy_scan_bytes_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_scan_bytes_ALREADY_DEFINED
 #else
 #else
-#define yy_scan_bytes cmCTestProcesses_yy_scan_bytes
+#define yy_scan_bytes cmCTestResourceGroups_yy_scan_bytes
 #endif
 #endif
 
 
 #ifdef yy_init_buffer
 #ifdef yy_init_buffer
-#define cmCTestProcesses_yy_init_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_init_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_init_buffer cmCTestProcesses_yy_init_buffer
+#define yy_init_buffer cmCTestResourceGroups_yy_init_buffer
 #endif
 #endif
 
 
 #ifdef yy_flush_buffer
 #ifdef yy_flush_buffer
-#define cmCTestProcesses_yy_flush_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_flush_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_flush_buffer cmCTestProcesses_yy_flush_buffer
+#define yy_flush_buffer cmCTestResourceGroups_yy_flush_buffer
 #endif
 #endif
 
 
 #ifdef yy_load_buffer_state
 #ifdef yy_load_buffer_state
-#define cmCTestProcesses_yy_load_buffer_state_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_load_buffer_state_ALREADY_DEFINED
 #else
 #else
-#define yy_load_buffer_state cmCTestProcesses_yy_load_buffer_state
+#define yy_load_buffer_state cmCTestResourceGroups_yy_load_buffer_state
 #endif
 #endif
 
 
 #ifdef yy_switch_to_buffer
 #ifdef yy_switch_to_buffer
-#define cmCTestProcesses_yy_switch_to_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_switch_to_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_switch_to_buffer cmCTestProcesses_yy_switch_to_buffer
+#define yy_switch_to_buffer cmCTestResourceGroups_yy_switch_to_buffer
 #endif
 #endif
 
 
 #ifdef yypush_buffer_state
 #ifdef yypush_buffer_state
-#define cmCTestProcesses_yypush_buffer_state_ALREADY_DEFINED
+#define cmCTestResourceGroups_yypush_buffer_state_ALREADY_DEFINED
 #else
 #else
-#define yypush_buffer_state cmCTestProcesses_yypush_buffer_state
+#define yypush_buffer_state cmCTestResourceGroups_yypush_buffer_state
 #endif
 #endif
 
 
 #ifdef yypop_buffer_state
 #ifdef yypop_buffer_state
-#define cmCTestProcesses_yypop_buffer_state_ALREADY_DEFINED
+#define cmCTestResourceGroups_yypop_buffer_state_ALREADY_DEFINED
 #else
 #else
-#define yypop_buffer_state cmCTestProcesses_yypop_buffer_state
+#define yypop_buffer_state cmCTestResourceGroups_yypop_buffer_state
 #endif
 #endif
 
 
 #ifdef yyensure_buffer_stack
 #ifdef yyensure_buffer_stack
-#define cmCTestProcesses_yyensure_buffer_stack_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyensure_buffer_stack_ALREADY_DEFINED
 #else
 #else
-#define yyensure_buffer_stack cmCTestProcesses_yyensure_buffer_stack
+#define yyensure_buffer_stack cmCTestResourceGroups_yyensure_buffer_stack
 #endif
 #endif
 
 
 #ifdef yylex
 #ifdef yylex
-#define cmCTestProcesses_yylex_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_ALREADY_DEFINED
 #else
 #else
-#define yylex cmCTestProcesses_yylex
+#define yylex cmCTestResourceGroups_yylex
 #endif
 #endif
 
 
 #ifdef yyrestart
 #ifdef yyrestart
-#define cmCTestProcesses_yyrestart_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyrestart_ALREADY_DEFINED
 #else
 #else
-#define yyrestart cmCTestProcesses_yyrestart
+#define yyrestart cmCTestResourceGroups_yyrestart
 #endif
 #endif
 
 
 #ifdef yylex_init
 #ifdef yylex_init
-#define cmCTestProcesses_yylex_init_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_init_ALREADY_DEFINED
 #else
 #else
-#define yylex_init cmCTestProcesses_yylex_init
+#define yylex_init cmCTestResourceGroups_yylex_init
 #endif
 #endif
 
 
 #ifdef yylex_init_extra
 #ifdef yylex_init_extra
-#define cmCTestProcesses_yylex_init_extra_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_init_extra_ALREADY_DEFINED
 #else
 #else
-#define yylex_init_extra cmCTestProcesses_yylex_init_extra
+#define yylex_init_extra cmCTestResourceGroups_yylex_init_extra
 #endif
 #endif
 
 
 #ifdef yylex_destroy
 #ifdef yylex_destroy
-#define cmCTestProcesses_yylex_destroy_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_destroy_ALREADY_DEFINED
 #else
 #else
-#define yylex_destroy cmCTestProcesses_yylex_destroy
+#define yylex_destroy cmCTestResourceGroups_yylex_destroy
 #endif
 #endif
 
 
 #ifdef yyget_debug
 #ifdef yyget_debug
-#define cmCTestProcesses_yyget_debug_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_debug_ALREADY_DEFINED
 #else
 #else
-#define yyget_debug cmCTestProcesses_yyget_debug
+#define yyget_debug cmCTestResourceGroups_yyget_debug
 #endif
 #endif
 
 
 #ifdef yyset_debug
 #ifdef yyset_debug
-#define cmCTestProcesses_yyset_debug_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_debug_ALREADY_DEFINED
 #else
 #else
-#define yyset_debug cmCTestProcesses_yyset_debug
+#define yyset_debug cmCTestResourceGroups_yyset_debug
 #endif
 #endif
 
 
 #ifdef yyget_extra
 #ifdef yyget_extra
-#define cmCTestProcesses_yyget_extra_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_extra_ALREADY_DEFINED
 #else
 #else
-#define yyget_extra cmCTestProcesses_yyget_extra
+#define yyget_extra cmCTestResourceGroups_yyget_extra
 #endif
 #endif
 
 
 #ifdef yyset_extra
 #ifdef yyset_extra
-#define cmCTestProcesses_yyset_extra_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_extra_ALREADY_DEFINED
 #else
 #else
-#define yyset_extra cmCTestProcesses_yyset_extra
+#define yyset_extra cmCTestResourceGroups_yyset_extra
 #endif
 #endif
 
 
 #ifdef yyget_in
 #ifdef yyget_in
-#define cmCTestProcesses_yyget_in_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_in_ALREADY_DEFINED
 #else
 #else
-#define yyget_in cmCTestProcesses_yyget_in
+#define yyget_in cmCTestResourceGroups_yyget_in
 #endif
 #endif
 
 
 #ifdef yyset_in
 #ifdef yyset_in
-#define cmCTestProcesses_yyset_in_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_in_ALREADY_DEFINED
 #else
 #else
-#define yyset_in cmCTestProcesses_yyset_in
+#define yyset_in cmCTestResourceGroups_yyset_in
 #endif
 #endif
 
 
 #ifdef yyget_out
 #ifdef yyget_out
-#define cmCTestProcesses_yyget_out_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_out_ALREADY_DEFINED
 #else
 #else
-#define yyget_out cmCTestProcesses_yyget_out
+#define yyget_out cmCTestResourceGroups_yyget_out
 #endif
 #endif
 
 
 #ifdef yyset_out
 #ifdef yyset_out
-#define cmCTestProcesses_yyset_out_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_out_ALREADY_DEFINED
 #else
 #else
-#define yyset_out cmCTestProcesses_yyset_out
+#define yyset_out cmCTestResourceGroups_yyset_out
 #endif
 #endif
 
 
 #ifdef yyget_leng
 #ifdef yyget_leng
-#define cmCTestProcesses_yyget_leng_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_leng_ALREADY_DEFINED
 #else
 #else
-#define yyget_leng cmCTestProcesses_yyget_leng
+#define yyget_leng cmCTestResourceGroups_yyget_leng
 #endif
 #endif
 
 
 #ifdef yyget_text
 #ifdef yyget_text
-#define cmCTestProcesses_yyget_text_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_text_ALREADY_DEFINED
 #else
 #else
-#define yyget_text cmCTestProcesses_yyget_text
+#define yyget_text cmCTestResourceGroups_yyget_text
 #endif
 #endif
 
 
 #ifdef yyget_lineno
 #ifdef yyget_lineno
-#define cmCTestProcesses_yyget_lineno_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_lineno_ALREADY_DEFINED
 #else
 #else
-#define yyget_lineno cmCTestProcesses_yyget_lineno
+#define yyget_lineno cmCTestResourceGroups_yyget_lineno
 #endif
 #endif
 
 
 #ifdef yyset_lineno
 #ifdef yyset_lineno
-#define cmCTestProcesses_yyset_lineno_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_lineno_ALREADY_DEFINED
 #else
 #else
-#define yyset_lineno cmCTestProcesses_yyset_lineno
+#define yyset_lineno cmCTestResourceGroups_yyset_lineno
 #endif
 #endif
 
 
 #ifdef yyget_column
 #ifdef yyget_column
-#define cmCTestProcesses_yyget_column_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_column_ALREADY_DEFINED
 #else
 #else
-#define yyget_column cmCTestProcesses_yyget_column
+#define yyget_column cmCTestResourceGroups_yyget_column
 #endif
 #endif
 
 
 #ifdef yyset_column
 #ifdef yyset_column
-#define cmCTestProcesses_yyset_column_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_column_ALREADY_DEFINED
 #else
 #else
-#define yyset_column cmCTestProcesses_yyset_column
+#define yyset_column cmCTestResourceGroups_yyset_column
 #endif
 #endif
 
 
 #ifdef yywrap
 #ifdef yywrap
-#define cmCTestProcesses_yywrap_ALREADY_DEFINED
+#define cmCTestResourceGroups_yywrap_ALREADY_DEFINED
 #else
 #else
-#define yywrap cmCTestProcesses_yywrap
+#define yywrap cmCTestResourceGroups_yywrap
 #endif
 #endif
 
 
 #ifdef yyalloc
 #ifdef yyalloc
-#define cmCTestProcesses_yyalloc_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyalloc_ALREADY_DEFINED
 #else
 #else
-#define yyalloc cmCTestProcesses_yyalloc
+#define yyalloc cmCTestResourceGroups_yyalloc
 #endif
 #endif
 
 
 #ifdef yyrealloc
 #ifdef yyrealloc
-#define cmCTestProcesses_yyrealloc_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyrealloc_ALREADY_DEFINED
 #else
 #else
-#define yyrealloc cmCTestProcesses_yyrealloc
+#define yyrealloc cmCTestResourceGroups_yyrealloc
 #endif
 #endif
 
 
 #ifdef yyfree
 #ifdef yyfree
-#define cmCTestProcesses_yyfree_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyfree_ALREADY_DEFINED
 #else
 #else
-#define yyfree cmCTestProcesses_yyfree
+#define yyfree cmCTestResourceGroups_yyfree
 #endif
 #endif
 
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -526,7 +526,7 @@ void yyfree ( void * , yyscan_t yyscanner );
 
 
 /* Begin user sect3 */
 /* Begin user sect3 */
 
 
-#define cmCTestProcesses_yywrap(yyscanner) (/*CONSTCOND*/1)
+#define cmCTestResourceGroups_yywrap(yyscanner) (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 #define YY_SKIP_YYWRAP
 typedef flex_uint8_t YY_CHAR;
 typedef flex_uint8_t YY_CHAR;
 
 
@@ -648,12 +648,12 @@ This file must be translated to C++ and modified to build everywhere.
 
 
 Run flex >= 2.6 like this:
 Run flex >= 2.6 like this:
 
 
-  flex --nounistd -DFLEXINT_H --noline --header-file=cmCTestProcessesLexer.h -ocmCTestProcessesLexer.cxx cmCTestProcessesLexer.in.l
+  flex --nounistd -DFLEXINT_H --noline --header-file=cmCTestResourceGroupsLexer.h -ocmCTestResourceGroupsLexer.cxx cmCTestResourceGroupsLexer.in.l
 
 
-Modify cmCTestProcessesLexer.cxx:
-  - remove trailing whitespace:              sed -i 's/\s*$//' cmCTestProcessesLexer.h cmCTestProcessesLexer.cxx
-  - remove blank lines at end of file:       sed -i '${/^$/d;}' cmCTestProcessesLexer.h cmCTestProcessesLexer.cxx
-  - #include "cmStandardLexer.h" at the top: sed -i '1i#include "cmStandardLexer.h"' cmCTestProcessesLexer.cxx
+Modify cmCTestResourceGroupsLexer.cxx:
+  - remove trailing whitespace:              sed -i 's/\s*$//' cmCTestResourceGroupsLexer.h cmCTestResourceGroupsLexer.cxx
+  - remove blank lines at end of file:       sed -i '${/^$/d;}' cmCTestResourceGroupsLexer.h cmCTestResourceGroupsLexer.cxx
+  - #include "cmStandardLexer.h" at the top: sed -i '1i#include "cmStandardLexer.h"' cmCTestResourceGroupsLexer.cxx
 
 
 */
 */
 
 
@@ -661,7 +661,7 @@ Modify cmCTestProcessesLexer.cxx:
 
 
 #ifndef __clang_analyzer__ /* Suppress clang scan-build warnings */
 #ifndef __clang_analyzer__ /* Suppress clang scan-build warnings */
 
 
-#include "cmCTestProcessesLexerHelper.h"
+#include "cmCTestResourceGroupsLexerHelper.h"
 
 
 #include <string>
 #include <string>
 
 
@@ -670,8 +670,8 @@ Modify cmCTestProcessesLexer.cxx:
 /*--------------------------------------------------------------------------*/
 /*--------------------------------------------------------------------------*/
 
 
 #define INITIAL 0
 #define INITIAL 0
-#define PROCESSES_START 1
-#define PROCESSES_END 2
+#define RESOURCE_GROUPS_START 1
+#define RESOURCE_GROUPS_END 2
 #define RESOURCE_START 3
 #define RESOURCE_START 3
 #define RESOURCE_COUNT 4
 #define RESOURCE_COUNT 4
 #define RESOURCE_END 5
 #define RESOURCE_END 5
@@ -990,7 +990,7 @@ YY_RULE_SETUP
 case 2:
 case 2:
 YY_RULE_SETUP
 YY_RULE_SETUP
 {
 {
-  BEGIN(PROCESSES_END);
+  BEGIN(RESOURCE_GROUPS_END);
   std::size_t len = yyleng;
   std::size_t len = yyleng;
   yyextra->SetProcessCount(std::stoll(yytext, &len, 10));
   yyextra->SetProcessCount(std::stoll(yytext, &len, 10));
 }
 }
@@ -1013,18 +1013,18 @@ YY_RULE_SETUP
 case 5:
 case 5:
 YY_RULE_SETUP
 YY_RULE_SETUP
 {
 {
-  BEGIN(PROCESSES_START);
+  BEGIN(RESOURCE_GROUPS_START);
 }
 }
 	YY_BREAK
 	YY_BREAK
 case 6:
 case 6:
 YY_RULE_SETUP
 YY_RULE_SETUP
 {
 {
-  BEGIN(PROCESSES_START);
+  BEGIN(RESOURCE_GROUPS_START);
   yyextra->WriteProcess();
   yyextra->WriteProcess();
 }
 }
 	YY_BREAK
 	YY_BREAK
 case YY_STATE_EOF(RESOURCE_START):
 case YY_STATE_EOF(RESOURCE_START):
-case YY_STATE_EOF(PROCESSES_END):
+case YY_STATE_EOF(RESOURCE_GROUPS_END):
 case YY_STATE_EOF(RESOURCE_END):
 case YY_STATE_EOF(RESOURCE_END):
 {
 {
   yyextra->WriteProcess();
   yyextra->WriteProcess();
@@ -1032,7 +1032,7 @@ case YY_STATE_EOF(RESOURCE_END):
 }
 }
 	YY_BREAK
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(PROCESSES_START):
+case YY_STATE_EOF(RESOURCE_GROUPS_START):
 {
 {
   return 0;
   return 0;
 }
 }

+ 126 - 126
Source/LexerParser/cmCTestProcessesLexer.h → Source/LexerParser/cmCTestResourceGroupsLexer.h

@@ -1,6 +1,6 @@
-#ifndef cmCTestProcesses_yyHEADER_H
-#define cmCTestProcesses_yyHEADER_H 1
-#define cmCTestProcesses_yyIN_HEADER 1
+#ifndef cmCTestResourceGroups_yyHEADER_H
+#define cmCTestResourceGroups_yyHEADER_H 1
+#define cmCTestResourceGroups_yyIN_HEADER 1
 
 
 #define FLEXINT_H 1
 #define FLEXINT_H 1
 #define  YY_INT_ALIGNED short int
 #define  YY_INT_ALIGNED short int
@@ -16,213 +16,213 @@
 #endif
 #endif
 
 
 #ifdef yy_create_buffer
 #ifdef yy_create_buffer
-#define cmCTestProcesses_yy_create_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_create_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_create_buffer cmCTestProcesses_yy_create_buffer
+#define yy_create_buffer cmCTestResourceGroups_yy_create_buffer
 #endif
 #endif
 
 
 #ifdef yy_delete_buffer
 #ifdef yy_delete_buffer
-#define cmCTestProcesses_yy_delete_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_delete_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_delete_buffer cmCTestProcesses_yy_delete_buffer
+#define yy_delete_buffer cmCTestResourceGroups_yy_delete_buffer
 #endif
 #endif
 
 
 #ifdef yy_scan_buffer
 #ifdef yy_scan_buffer
-#define cmCTestProcesses_yy_scan_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_scan_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_scan_buffer cmCTestProcesses_yy_scan_buffer
+#define yy_scan_buffer cmCTestResourceGroups_yy_scan_buffer
 #endif
 #endif
 
 
 #ifdef yy_scan_string
 #ifdef yy_scan_string
-#define cmCTestProcesses_yy_scan_string_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_scan_string_ALREADY_DEFINED
 #else
 #else
-#define yy_scan_string cmCTestProcesses_yy_scan_string
+#define yy_scan_string cmCTestResourceGroups_yy_scan_string
 #endif
 #endif
 
 
 #ifdef yy_scan_bytes
 #ifdef yy_scan_bytes
-#define cmCTestProcesses_yy_scan_bytes_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_scan_bytes_ALREADY_DEFINED
 #else
 #else
-#define yy_scan_bytes cmCTestProcesses_yy_scan_bytes
+#define yy_scan_bytes cmCTestResourceGroups_yy_scan_bytes
 #endif
 #endif
 
 
 #ifdef yy_init_buffer
 #ifdef yy_init_buffer
-#define cmCTestProcesses_yy_init_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_init_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_init_buffer cmCTestProcesses_yy_init_buffer
+#define yy_init_buffer cmCTestResourceGroups_yy_init_buffer
 #endif
 #endif
 
 
 #ifdef yy_flush_buffer
 #ifdef yy_flush_buffer
-#define cmCTestProcesses_yy_flush_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_flush_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_flush_buffer cmCTestProcesses_yy_flush_buffer
+#define yy_flush_buffer cmCTestResourceGroups_yy_flush_buffer
 #endif
 #endif
 
 
 #ifdef yy_load_buffer_state
 #ifdef yy_load_buffer_state
-#define cmCTestProcesses_yy_load_buffer_state_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_load_buffer_state_ALREADY_DEFINED
 #else
 #else
-#define yy_load_buffer_state cmCTestProcesses_yy_load_buffer_state
+#define yy_load_buffer_state cmCTestResourceGroups_yy_load_buffer_state
 #endif
 #endif
 
 
 #ifdef yy_switch_to_buffer
 #ifdef yy_switch_to_buffer
-#define cmCTestProcesses_yy_switch_to_buffer_ALREADY_DEFINED
+#define cmCTestResourceGroups_yy_switch_to_buffer_ALREADY_DEFINED
 #else
 #else
-#define yy_switch_to_buffer cmCTestProcesses_yy_switch_to_buffer
+#define yy_switch_to_buffer cmCTestResourceGroups_yy_switch_to_buffer
 #endif
 #endif
 
 
 #ifdef yypush_buffer_state
 #ifdef yypush_buffer_state
-#define cmCTestProcesses_yypush_buffer_state_ALREADY_DEFINED
+#define cmCTestResourceGroups_yypush_buffer_state_ALREADY_DEFINED
 #else
 #else
-#define yypush_buffer_state cmCTestProcesses_yypush_buffer_state
+#define yypush_buffer_state cmCTestResourceGroups_yypush_buffer_state
 #endif
 #endif
 
 
 #ifdef yypop_buffer_state
 #ifdef yypop_buffer_state
-#define cmCTestProcesses_yypop_buffer_state_ALREADY_DEFINED
+#define cmCTestResourceGroups_yypop_buffer_state_ALREADY_DEFINED
 #else
 #else
-#define yypop_buffer_state cmCTestProcesses_yypop_buffer_state
+#define yypop_buffer_state cmCTestResourceGroups_yypop_buffer_state
 #endif
 #endif
 
 
 #ifdef yyensure_buffer_stack
 #ifdef yyensure_buffer_stack
-#define cmCTestProcesses_yyensure_buffer_stack_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyensure_buffer_stack_ALREADY_DEFINED
 #else
 #else
-#define yyensure_buffer_stack cmCTestProcesses_yyensure_buffer_stack
+#define yyensure_buffer_stack cmCTestResourceGroups_yyensure_buffer_stack
 #endif
 #endif
 
 
 #ifdef yylex
 #ifdef yylex
-#define cmCTestProcesses_yylex_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_ALREADY_DEFINED
 #else
 #else
-#define yylex cmCTestProcesses_yylex
+#define yylex cmCTestResourceGroups_yylex
 #endif
 #endif
 
 
 #ifdef yyrestart
 #ifdef yyrestart
-#define cmCTestProcesses_yyrestart_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyrestart_ALREADY_DEFINED
 #else
 #else
-#define yyrestart cmCTestProcesses_yyrestart
+#define yyrestart cmCTestResourceGroups_yyrestart
 #endif
 #endif
 
 
 #ifdef yylex_init
 #ifdef yylex_init
-#define cmCTestProcesses_yylex_init_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_init_ALREADY_DEFINED
 #else
 #else
-#define yylex_init cmCTestProcesses_yylex_init
+#define yylex_init cmCTestResourceGroups_yylex_init
 #endif
 #endif
 
 
 #ifdef yylex_init_extra
 #ifdef yylex_init_extra
-#define cmCTestProcesses_yylex_init_extra_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_init_extra_ALREADY_DEFINED
 #else
 #else
-#define yylex_init_extra cmCTestProcesses_yylex_init_extra
+#define yylex_init_extra cmCTestResourceGroups_yylex_init_extra
 #endif
 #endif
 
 
 #ifdef yylex_destroy
 #ifdef yylex_destroy
-#define cmCTestProcesses_yylex_destroy_ALREADY_DEFINED
+#define cmCTestResourceGroups_yylex_destroy_ALREADY_DEFINED
 #else
 #else
-#define yylex_destroy cmCTestProcesses_yylex_destroy
+#define yylex_destroy cmCTestResourceGroups_yylex_destroy
 #endif
 #endif
 
 
 #ifdef yyget_debug
 #ifdef yyget_debug
-#define cmCTestProcesses_yyget_debug_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_debug_ALREADY_DEFINED
 #else
 #else
-#define yyget_debug cmCTestProcesses_yyget_debug
+#define yyget_debug cmCTestResourceGroups_yyget_debug
 #endif
 #endif
 
 
 #ifdef yyset_debug
 #ifdef yyset_debug
-#define cmCTestProcesses_yyset_debug_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_debug_ALREADY_DEFINED
 #else
 #else
-#define yyset_debug cmCTestProcesses_yyset_debug
+#define yyset_debug cmCTestResourceGroups_yyset_debug
 #endif
 #endif
 
 
 #ifdef yyget_extra
 #ifdef yyget_extra
-#define cmCTestProcesses_yyget_extra_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_extra_ALREADY_DEFINED
 #else
 #else
-#define yyget_extra cmCTestProcesses_yyget_extra
+#define yyget_extra cmCTestResourceGroups_yyget_extra
 #endif
 #endif
 
 
 #ifdef yyset_extra
 #ifdef yyset_extra
-#define cmCTestProcesses_yyset_extra_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_extra_ALREADY_DEFINED
 #else
 #else
-#define yyset_extra cmCTestProcesses_yyset_extra
+#define yyset_extra cmCTestResourceGroups_yyset_extra
 #endif
 #endif
 
 
 #ifdef yyget_in
 #ifdef yyget_in
-#define cmCTestProcesses_yyget_in_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_in_ALREADY_DEFINED
 #else
 #else
-#define yyget_in cmCTestProcesses_yyget_in
+#define yyget_in cmCTestResourceGroups_yyget_in
 #endif
 #endif
 
 
 #ifdef yyset_in
 #ifdef yyset_in
-#define cmCTestProcesses_yyset_in_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_in_ALREADY_DEFINED
 #else
 #else
-#define yyset_in cmCTestProcesses_yyset_in
+#define yyset_in cmCTestResourceGroups_yyset_in
 #endif
 #endif
 
 
 #ifdef yyget_out
 #ifdef yyget_out
-#define cmCTestProcesses_yyget_out_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_out_ALREADY_DEFINED
 #else
 #else
-#define yyget_out cmCTestProcesses_yyget_out
+#define yyget_out cmCTestResourceGroups_yyget_out
 #endif
 #endif
 
 
 #ifdef yyset_out
 #ifdef yyset_out
-#define cmCTestProcesses_yyset_out_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_out_ALREADY_DEFINED
 #else
 #else
-#define yyset_out cmCTestProcesses_yyset_out
+#define yyset_out cmCTestResourceGroups_yyset_out
 #endif
 #endif
 
 
 #ifdef yyget_leng
 #ifdef yyget_leng
-#define cmCTestProcesses_yyget_leng_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_leng_ALREADY_DEFINED
 #else
 #else
-#define yyget_leng cmCTestProcesses_yyget_leng
+#define yyget_leng cmCTestResourceGroups_yyget_leng
 #endif
 #endif
 
 
 #ifdef yyget_text
 #ifdef yyget_text
-#define cmCTestProcesses_yyget_text_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_text_ALREADY_DEFINED
 #else
 #else
-#define yyget_text cmCTestProcesses_yyget_text
+#define yyget_text cmCTestResourceGroups_yyget_text
 #endif
 #endif
 
 
 #ifdef yyget_lineno
 #ifdef yyget_lineno
-#define cmCTestProcesses_yyget_lineno_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_lineno_ALREADY_DEFINED
 #else
 #else
-#define yyget_lineno cmCTestProcesses_yyget_lineno
+#define yyget_lineno cmCTestResourceGroups_yyget_lineno
 #endif
 #endif
 
 
 #ifdef yyset_lineno
 #ifdef yyset_lineno
-#define cmCTestProcesses_yyset_lineno_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_lineno_ALREADY_DEFINED
 #else
 #else
-#define yyset_lineno cmCTestProcesses_yyset_lineno
+#define yyset_lineno cmCTestResourceGroups_yyset_lineno
 #endif
 #endif
 
 
 #ifdef yyget_column
 #ifdef yyget_column
-#define cmCTestProcesses_yyget_column_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyget_column_ALREADY_DEFINED
 #else
 #else
-#define yyget_column cmCTestProcesses_yyget_column
+#define yyget_column cmCTestResourceGroups_yyget_column
 #endif
 #endif
 
 
 #ifdef yyset_column
 #ifdef yyset_column
-#define cmCTestProcesses_yyset_column_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyset_column_ALREADY_DEFINED
 #else
 #else
-#define yyset_column cmCTestProcesses_yyset_column
+#define yyset_column cmCTestResourceGroups_yyset_column
 #endif
 #endif
 
 
 #ifdef yywrap
 #ifdef yywrap
-#define cmCTestProcesses_yywrap_ALREADY_DEFINED
+#define cmCTestResourceGroups_yywrap_ALREADY_DEFINED
 #else
 #else
-#define yywrap cmCTestProcesses_yywrap
+#define yywrap cmCTestResourceGroups_yywrap
 #endif
 #endif
 
 
 #ifdef yyalloc
 #ifdef yyalloc
-#define cmCTestProcesses_yyalloc_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyalloc_ALREADY_DEFINED
 #else
 #else
-#define yyalloc cmCTestProcesses_yyalloc
+#define yyalloc cmCTestResourceGroups_yyalloc
 #endif
 #endif
 
 
 #ifdef yyrealloc
 #ifdef yyrealloc
-#define cmCTestProcesses_yyrealloc_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyrealloc_ALREADY_DEFINED
 #else
 #else
-#define yyrealloc cmCTestProcesses_yyrealloc
+#define yyrealloc cmCTestResourceGroups_yyrealloc
 #endif
 #endif
 
 
 #ifdef yyfree
 #ifdef yyfree
-#define cmCTestProcesses_yyfree_ALREADY_DEFINED
+#define cmCTestResourceGroups_yyfree_ALREADY_DEFINED
 #else
 #else
-#define yyfree cmCTestProcesses_yyfree
+#define yyfree cmCTestResourceGroups_yyfree
 #endif
 #endif
 
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -423,15 +423,15 @@ void yyfree ( void * , yyscan_t yyscanner );
 
 
 /* Begin user sect3 */
 /* Begin user sect3 */
 
 
-#define cmCTestProcesses_yywrap(yyscanner) (/*CONSTCOND*/1)
+#define cmCTestResourceGroups_yywrap(yyscanner) (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 #define YY_SKIP_YYWRAP
 
 
 #define yytext_ptr yytext_r
 #define yytext_ptr yytext_r
 
 
 #ifdef YY_HEADER_EXPORT_START_CONDITIONS
 #ifdef YY_HEADER_EXPORT_START_CONDITIONS
 #define INITIAL 0
 #define INITIAL 0
-#define PROCESSES_START 1
-#define PROCESSES_END 2
+#define RESOURCE_GROUPS_START 1
+#define RESOURCE_GROUPS_END 2
 #define RESOURCE_START 3
 #define RESOURCE_START 3
 #define RESOURCE_COUNT 4
 #define RESOURCE_COUNT 4
 #define RESOURCE_END 5
 #define RESOURCE_END 5
@@ -543,150 +543,150 @@ extern int yylex (yyscan_t yyscanner);
 #undef YY_DECL
 #undef YY_DECL
 #endif
 #endif
 
 
-#ifndef cmCTestProcesses_yy_create_buffer_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_create_buffer_ALREADY_DEFINED
 #undef yy_create_buffer
 #undef yy_create_buffer
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_delete_buffer_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_delete_buffer_ALREADY_DEFINED
 #undef yy_delete_buffer
 #undef yy_delete_buffer
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_scan_buffer_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_scan_buffer_ALREADY_DEFINED
 #undef yy_scan_buffer
 #undef yy_scan_buffer
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_scan_string_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_scan_string_ALREADY_DEFINED
 #undef yy_scan_string
 #undef yy_scan_string
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_scan_bytes_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_scan_bytes_ALREADY_DEFINED
 #undef yy_scan_bytes
 #undef yy_scan_bytes
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_init_buffer_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_init_buffer_ALREADY_DEFINED
 #undef yy_init_buffer
 #undef yy_init_buffer
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_flush_buffer_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_flush_buffer_ALREADY_DEFINED
 #undef yy_flush_buffer
 #undef yy_flush_buffer
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_load_buffer_state_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_load_buffer_state_ALREADY_DEFINED
 #undef yy_load_buffer_state
 #undef yy_load_buffer_state
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_switch_to_buffer_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_switch_to_buffer_ALREADY_DEFINED
 #undef yy_switch_to_buffer
 #undef yy_switch_to_buffer
 #endif
 #endif
-#ifndef cmCTestProcesses_yypush_buffer_state_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yypush_buffer_state_ALREADY_DEFINED
 #undef yypush_buffer_state
 #undef yypush_buffer_state
 #endif
 #endif
-#ifndef cmCTestProcesses_yypop_buffer_state_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yypop_buffer_state_ALREADY_DEFINED
 #undef yypop_buffer_state
 #undef yypop_buffer_state
 #endif
 #endif
-#ifndef cmCTestProcesses_yyensure_buffer_stack_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyensure_buffer_stack_ALREADY_DEFINED
 #undef yyensure_buffer_stack
 #undef yyensure_buffer_stack
 #endif
 #endif
-#ifndef cmCTestProcesses_yylex_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yylex_ALREADY_DEFINED
 #undef yylex
 #undef yylex
 #endif
 #endif
-#ifndef cmCTestProcesses_yyrestart_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyrestart_ALREADY_DEFINED
 #undef yyrestart
 #undef yyrestart
 #endif
 #endif
-#ifndef cmCTestProcesses_yylex_init_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yylex_init_ALREADY_DEFINED
 #undef yylex_init
 #undef yylex_init
 #endif
 #endif
-#ifndef cmCTestProcesses_yylex_init_extra_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yylex_init_extra_ALREADY_DEFINED
 #undef yylex_init_extra
 #undef yylex_init_extra
 #endif
 #endif
-#ifndef cmCTestProcesses_yylex_destroy_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yylex_destroy_ALREADY_DEFINED
 #undef yylex_destroy
 #undef yylex_destroy
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_debug_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_debug_ALREADY_DEFINED
 #undef yyget_debug
 #undef yyget_debug
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_debug_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_debug_ALREADY_DEFINED
 #undef yyset_debug
 #undef yyset_debug
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_extra_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_extra_ALREADY_DEFINED
 #undef yyget_extra
 #undef yyget_extra
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_extra_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_extra_ALREADY_DEFINED
 #undef yyset_extra
 #undef yyset_extra
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_in_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_in_ALREADY_DEFINED
 #undef yyget_in
 #undef yyget_in
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_in_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_in_ALREADY_DEFINED
 #undef yyset_in
 #undef yyset_in
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_out_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_out_ALREADY_DEFINED
 #undef yyget_out
 #undef yyget_out
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_out_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_out_ALREADY_DEFINED
 #undef yyset_out
 #undef yyset_out
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_leng_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_leng_ALREADY_DEFINED
 #undef yyget_leng
 #undef yyget_leng
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_text_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_text_ALREADY_DEFINED
 #undef yyget_text
 #undef yyget_text
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_lineno_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_lineno_ALREADY_DEFINED
 #undef yyget_lineno
 #undef yyget_lineno
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_lineno_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_lineno_ALREADY_DEFINED
 #undef yyset_lineno
 #undef yyset_lineno
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_column_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_column_ALREADY_DEFINED
 #undef yyget_column
 #undef yyget_column
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_column_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_column_ALREADY_DEFINED
 #undef yyset_column
 #undef yyset_column
 #endif
 #endif
-#ifndef cmCTestProcesses_yywrap_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yywrap_ALREADY_DEFINED
 #undef yywrap
 #undef yywrap
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_lval_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_lval_ALREADY_DEFINED
 #undef yyget_lval
 #undef yyget_lval
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_lval_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_lval_ALREADY_DEFINED
 #undef yyset_lval
 #undef yyset_lval
 #endif
 #endif
-#ifndef cmCTestProcesses_yyget_lloc_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyget_lloc_ALREADY_DEFINED
 #undef yyget_lloc
 #undef yyget_lloc
 #endif
 #endif
-#ifndef cmCTestProcesses_yyset_lloc_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyset_lloc_ALREADY_DEFINED
 #undef yyset_lloc
 #undef yyset_lloc
 #endif
 #endif
-#ifndef cmCTestProcesses_yyalloc_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyalloc_ALREADY_DEFINED
 #undef yyalloc
 #undef yyalloc
 #endif
 #endif
-#ifndef cmCTestProcesses_yyrealloc_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyrealloc_ALREADY_DEFINED
 #undef yyrealloc
 #undef yyrealloc
 #endif
 #endif
-#ifndef cmCTestProcesses_yyfree_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyfree_ALREADY_DEFINED
 #undef yyfree
 #undef yyfree
 #endif
 #endif
-#ifndef cmCTestProcesses_yytext_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yytext_ALREADY_DEFINED
 #undef yytext
 #undef yytext
 #endif
 #endif
-#ifndef cmCTestProcesses_yyleng_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyleng_ALREADY_DEFINED
 #undef yyleng
 #undef yyleng
 #endif
 #endif
-#ifndef cmCTestProcesses_yyin_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyin_ALREADY_DEFINED
 #undef yyin
 #undef yyin
 #endif
 #endif
-#ifndef cmCTestProcesses_yyout_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyout_ALREADY_DEFINED
 #undef yyout
 #undef yyout
 #endif
 #endif
-#ifndef cmCTestProcesses_yy_flex_debug_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yy_flex_debug_ALREADY_DEFINED
 #undef yy_flex_debug
 #undef yy_flex_debug
 #endif
 #endif
-#ifndef cmCTestProcesses_yylineno_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yylineno_ALREADY_DEFINED
 #undef yylineno
 #undef yylineno
 #endif
 #endif
-#ifndef cmCTestProcesses_yytables_fload_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yytables_fload_ALREADY_DEFINED
 #undef yytables_fload
 #undef yytables_fload
 #endif
 #endif
-#ifndef cmCTestProcesses_yytables_destroy_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yytables_destroy_ALREADY_DEFINED
 #undef yytables_destroy
 #undef yytables_destroy
 #endif
 #endif
-#ifndef cmCTestProcesses_yyTABLES_NAME_ALREADY_DEFINED
+#ifndef cmCTestResourceGroups_yyTABLES_NAME_ALREADY_DEFINED
 #undef yyTABLES_NAME
 #undef yyTABLES_NAME
 #endif
 #endif
 
 
-#undef cmCTestProcesses_yyIN_HEADER
-#endif /* cmCTestProcesses_yyHEADER_H */
+#undef cmCTestResourceGroups_yyIN_HEADER
+#endif /* cmCTestResourceGroups_yyHEADER_H */

+ 19 - 19
Source/LexerParser/cmCTestProcessesLexer.in.l → Source/LexerParser/cmCTestResourceGroupsLexer.in.l

@@ -7,12 +7,12 @@ This file must be translated to C++ and modified to build everywhere.
 
 
 Run flex >= 2.6 like this:
 Run flex >= 2.6 like this:
 
 
-  flex --nounistd -DFLEXINT_H --noline --header-file=cmCTestProcessesLexer.h -ocmCTestProcessesLexer.cxx cmCTestProcessesLexer.in.l
+  flex --nounistd -DFLEXINT_H --noline --header-file=cmCTestResourceGroupsLexer.h -ocmCTestResourceGroupsLexer.cxx cmCTestResourceGroupsLexer.in.l
 
 
-Modify cmCTestProcessesLexer.cxx:
-  - remove trailing whitespace:              sed -i 's/\s*$//' cmCTestProcessesLexer.h cmCTestProcessesLexer.cxx
-  - remove blank lines at end of file:       sed -i '${/^$/d;}' cmCTestProcessesLexer.h cmCTestProcessesLexer.cxx
-  - #include "cmStandardLexer.h" at the top: sed -i '1i#include "cmStandardLexer.h"' cmCTestProcessesLexer.cxx
+Modify cmCTestResourceGroupsLexer.cxx:
+  - remove trailing whitespace:              sed -i 's/\s*$//' cmCTestResourceGroupsLexer.h cmCTestResourceGroupsLexer.cxx
+  - remove blank lines at end of file:       sed -i '${/^$/d;}' cmCTestResourceGroupsLexer.h cmCTestResourceGroupsLexer.cxx
+  - #include "cmStandardLexer.h" at the top: sed -i '1i#include "cmStandardLexer.h"' cmCTestResourceGroupsLexer.cxx
 
 
 */
 */
 
 
@@ -20,7 +20,7 @@ Modify cmCTestProcessesLexer.cxx:
 
 
 #ifndef __clang_analyzer__ /* Suppress clang scan-build warnings */
 #ifndef __clang_analyzer__ /* Suppress clang scan-build warnings */
 
 
-#include "cmCTestProcessesLexerHelper.h"
+#include "cmCTestResourceGroupsLexerHelper.h"
 
 
 #include <string>
 #include <string>
 
 
@@ -29,15 +29,15 @@ Modify cmCTestProcessesLexer.cxx:
 /*--------------------------------------------------------------------------*/
 /*--------------------------------------------------------------------------*/
 %}
 %}
 
 
-%option prefix="cmCTestProcesses_yy"
+%option prefix="cmCTestResourceGroups_yy"
 
 
 %option reentrant
 %option reentrant
 %option noyywrap
 %option noyywrap
 %option nodefault
 %option nodefault
 %pointer
 %pointer
 
 
-%s PROCESSES_START
-%s PROCESSES_END
+%s RESOURCE_GROUPS_START
+%s RESOURCE_GROUPS_END
 %s RESOURCE_START
 %s RESOURCE_START
 %s RESOURCE_COUNT
 %s RESOURCE_COUNT
 %s RESOURCE_END
 %s RESOURCE_END
@@ -47,13 +47,13 @@ IDENTIFIER [a-z_][a-z0-9_]*
 
 
 %%
 %%
 
 
-<INITIAL,PROCESSES_START,RESOURCE_START>{IDENTIFIER}: {
+<INITIAL,RESOURCE_GROUPS_START,RESOURCE_START>{IDENTIFIER}: {
   BEGIN(RESOURCE_COUNT);
   BEGIN(RESOURCE_COUNT);
   yyextra->SetResourceType(std::string(yytext, yyleng - 1));
   yyextra->SetResourceType(std::string(yytext, yyleng - 1));
 }
 }
 
 
-<INITIAL,PROCESSES_START>{NUMBER} {
-  BEGIN(PROCESSES_END);
+<INITIAL,RESOURCE_GROUPS_START>{NUMBER} {
+  BEGIN(RESOURCE_GROUPS_END);
   std::size_t len = yyleng;
   std::size_t len = yyleng;
   yyextra->SetProcessCount(std::stoll(yytext, &len, 10));
   yyextra->SetProcessCount(std::stoll(yytext, &len, 10));
 }
 }
@@ -65,25 +65,25 @@ IDENTIFIER [a-z_][a-z0-9_]*
   yyextra->WriteRequirement();
   yyextra->WriteRequirement();
 }
 }
 
 
-<PROCESSES_END,RESOURCE_END>,+ {
+<RESOURCE_GROUPS_END,RESOURCE_END>,+ {
   BEGIN(RESOURCE_START);
   BEGIN(RESOURCE_START);
 }
 }
 
 
-<INITIAL,PROCESSES_START,RESOURCE_START>;+ {
-  BEGIN(PROCESSES_START);
+<INITIAL,RESOURCE_GROUPS_START,RESOURCE_START>;+ {
+  BEGIN(RESOURCE_GROUPS_START);
 }
 }
 
 
-<PROCESSES_END,RESOURCE_END>;+ {
-  BEGIN(PROCESSES_START);
+<RESOURCE_GROUPS_END,RESOURCE_END>;+ {
+  BEGIN(RESOURCE_GROUPS_START);
   yyextra->WriteProcess();
   yyextra->WriteProcess();
 }
 }
 
 
-<RESOURCE_START,PROCESSES_END,RESOURCE_END><<EOF>> {
+<RESOURCE_START,RESOURCE_GROUPS_END,RESOURCE_END><<EOF>> {
   yyextra->WriteProcess();
   yyextra->WriteProcess();
   return 0;
   return 0;
 }
 }
 
 
-<INITIAL,PROCESSES_START><<EOF>> {
+<INITIAL,RESOURCE_GROUPS_START><<EOF>> {
   return 0;
   return 0;
 }
 }
 
 

+ 3 - 3
Source/cmCTest.cxx

@@ -2139,12 +2139,12 @@ bool cmCTest::HandleCommandLineArguments(size_t& i,
       "ExcludeFixtureCleanupRegularExpression", args[i].c_str());
       "ExcludeFixtureCleanupRegularExpression", args[i].c_str());
   }
   }
 
 
-  if (this->CheckArgument(arg, "--hardware-spec-file") &&
+  if (this->CheckArgument(arg, "--resource-spec-file") &&
       i < args.size() - 1) {
       i < args.size() - 1) {
     i++;
     i++;
-    this->GetTestHandler()->SetPersistentOption("HardwareSpecFile",
+    this->GetTestHandler()->SetPersistentOption("ResourceSpecFile",
                                                 args[i].c_str());
                                                 args[i].c_str());
-    this->GetMemCheckHandler()->SetPersistentOption("HardwareSpecFile",
+    this->GetMemCheckHandler()->SetPersistentOption("ResourceSpecFile",
                                                     args[i].c_str());
                                                     args[i].c_str());
   }
   }
 
 

+ 1 - 1
Source/ctest.cxx

@@ -106,7 +106,7 @@ static const char* cmDocumentationOptions[][2] = {
     "Allow each test to run up to <n> times if it times out" },
     "Allow each test to run up to <n> times if it times out" },
   { "--max-width <width>", "Set the max width for a test name to output" },
   { "--max-width <width>", "Set the max width for a test name to output" },
   { "--interactive-debug-mode [0|1]", "Set the interactive mode to 0 or 1." },
   { "--interactive-debug-mode [0|1]", "Set the interactive mode to 0 or 1." },
-  { "--hardware-spec-file <file>", "Set the hardware spec file to use." },
+  { "--resource-spec-file <file>", "Set the resource spec file to use." },
   { "--no-label-summary", "Disable timing summary information for labels." },
   { "--no-label-summary", "Disable timing summary information for labels." },
   { "--no-subproject-summary",
   { "--no-subproject-summary",
     "Disable timing summary information for "
     "Disable timing summary information for "

+ 4 - 4
Tests/CMakeLib/CMakeLists.txt

@@ -8,9 +8,9 @@ include_directories(
 set(CMakeLib_TESTS
 set(CMakeLib_TESTS
   testArgumentParser.cxx
   testArgumentParser.cxx
   testCTestBinPacker.cxx
   testCTestBinPacker.cxx
-  testCTestProcesses.cxx
-  testCTestHardwareAllocator.cxx
-  testCTestHardwareSpec.cxx
+  testCTestResourceAllocator.cxx
+  testCTestResourceSpec.cxx
+  testCTestResourceGroups.cxx
   testGeneratedFileStream.cxx
   testGeneratedFileStream.cxx
   testRST.cxx
   testRST.cxx
   testRange.cxx
   testRange.cxx
@@ -32,7 +32,7 @@ add_executable(testUVProcessChainHelper testUVProcessChainHelper.cxx)
 set(testRST_ARGS ${CMAKE_CURRENT_SOURCE_DIR})
 set(testRST_ARGS ${CMAKE_CURRENT_SOURCE_DIR})
 set(testUVProcessChain_ARGS $<TARGET_FILE:testUVProcessChainHelper>)
 set(testUVProcessChain_ARGS $<TARGET_FILE:testUVProcessChainHelper>)
 set(testUVStreambuf_ARGS $<TARGET_FILE:cmake>)
 set(testUVStreambuf_ARGS $<TARGET_FILE:cmake>)
-set(testCTestHardwareSpec_ARGS ${CMAKE_CURRENT_SOURCE_DIR})
+set(testCTestResourceSpec_ARGS ${CMAKE_CURRENT_SOURCE_DIR})
 
 
 if(WIN32)
 if(WIN32)
   list(APPEND CMakeLib_TESTS
   list(APPEND CMakeLib_TESTS

+ 9 - 9
Tests/CMakeLib/testCTestBinPacker.cxx

@@ -5,12 +5,12 @@
 #include <vector>
 #include <vector>
 
 
 #include "cmCTestBinPacker.h"
 #include "cmCTestBinPacker.h"
-#include "cmCTestHardwareAllocator.h"
+#include "cmCTestResourceAllocator.h"
 
 
 struct ExpectedPackResult
 struct ExpectedPackResult
 {
 {
   std::vector<int> SlotsNeeded;
   std::vector<int> SlotsNeeded;
-  std::map<std::string, cmCTestHardwareAllocator::Resource> Hardware;
+  std::map<std::string, cmCTestResourceAllocator::Resource> Resources;
   bool ExpectedReturnValue;
   bool ExpectedReturnValue;
   std::vector<cmCTestBinPackerAllocation> ExpectedRoundRobinAllocations;
   std::vector<cmCTestBinPackerAllocation> ExpectedRoundRobinAllocations;
   std::vector<cmCTestBinPackerAllocation> ExpectedBlockAllocations;
   std::vector<cmCTestBinPackerAllocation> ExpectedBlockAllocations;
@@ -233,18 +233,18 @@ bool TestExpectedPackResult(const ExpectedPackResult& expected)
     roundRobinAllocations.push_back({ index++, n, "" });
     roundRobinAllocations.push_back({ index++, n, "" });
   }
   }
 
 
-  bool roundRobinResult = cmAllocateCTestHardwareRoundRobin(
-    expected.Hardware, roundRobinAllocations);
+  bool roundRobinResult = cmAllocateCTestResourcesRoundRobin(
+    expected.Resources, roundRobinAllocations);
   if (roundRobinResult != expected.ExpectedReturnValue) {
   if (roundRobinResult != expected.ExpectedReturnValue) {
     std::cout
     std::cout
-      << "cmAllocateCTestHardwareRoundRobin did not return expected value"
+      << "cmAllocateCTestResourcesRoundRobin did not return expected value"
       << std::endl;
       << std::endl;
     return false;
     return false;
   }
   }
 
 
   if (roundRobinResult &&
   if (roundRobinResult &&
       roundRobinAllocations != expected.ExpectedRoundRobinAllocations) {
       roundRobinAllocations != expected.ExpectedRoundRobinAllocations) {
-    std::cout << "cmAllocateCTestHardwareRoundRobin did not return expected "
+    std::cout << "cmAllocateCTestResourcesRoundRobin did not return expected "
                  "allocations"
                  "allocations"
               << std::endl;
               << std::endl;
     return false;
     return false;
@@ -258,15 +258,15 @@ bool TestExpectedPackResult(const ExpectedPackResult& expected)
   }
   }
 
 
   bool blockResult =
   bool blockResult =
-    cmAllocateCTestHardwareBlock(expected.Hardware, blockAllocations);
+    cmAllocateCTestResourcesBlock(expected.Resources, blockAllocations);
   if (blockResult != expected.ExpectedReturnValue) {
   if (blockResult != expected.ExpectedReturnValue) {
-    std::cout << "cmAllocateCTestHardwareBlock did not return expected value"
+    std::cout << "cmAllocateCTestResourcesBlock did not return expected value"
               << std::endl;
               << std::endl;
     return false;
     return false;
   }
   }
 
 
   if (blockResult && blockAllocations != expected.ExpectedBlockAllocations) {
   if (blockResult && blockAllocations != expected.ExpectedBlockAllocations) {
-    std::cout << "cmAllocateCTestHardwareBlock did not return expected"
+    std::cout << "cmAllocateCTestResourcesBlock did not return expected"
                  " allocations"
                  " allocations"
               << std::endl;
               << std::endl;
     return false;
     return false;

+ 33 - 33
Tests/CMakeLib/testCTestHardwareAllocator.cxx → Tests/CMakeLib/testCTestResourceAllocator.cxx

@@ -3,24 +3,24 @@
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
-#include "cmCTestHardwareAllocator.h"
-#include "cmCTestHardwareSpec.h"
+#include "cmCTestResourceAllocator.h"
+#include "cmCTestResourceSpec.h"
 
 
-static const cmCTestHardwareSpec spec{ { {
+static const cmCTestResourceSpec spec{ { {
   /* clang-format off */
   /* clang-format off */
   { "gpus", { { "0", 4 }, { "1", 8 }, { "2", 0 }, { "3", 8 } } },
   { "gpus", { { "0", 4 }, { "1", 8 }, { "2", 0 }, { "3", 8 } } },
   /* clang-format on */
   /* clang-format on */
 } } };
 } } };
 
 
-bool testInitializeFromHardwareSpec()
+bool testInitializeFromResourceSpec()
 {
 {
   bool retval = true;
   bool retval = true;
 
 
-  cmCTestHardwareAllocator allocator;
-  allocator.InitializeFromHardwareSpec(spec);
+  cmCTestResourceAllocator allocator;
+  allocator.InitializeFromResourceSpec(spec);
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected{
     expected{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -43,11 +43,11 @@ bool testAllocateResource()
 {
 {
   bool retval = true;
   bool retval = true;
 
 
-  cmCTestHardwareAllocator allocator;
-  allocator.InitializeFromHardwareSpec(spec);
+  cmCTestResourceAllocator allocator;
+  allocator.InitializeFromResourceSpec(spec);
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected1{
     expected1{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -70,7 +70,7 @@ bool testAllocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected2{
     expected2{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -93,7 +93,7 @@ bool testAllocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected3{
     expected3{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -116,7 +116,7 @@ bool testAllocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected4{
     expected4{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -145,7 +145,7 @@ bool testAllocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected5{
     expected5{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -168,7 +168,7 @@ bool testAllocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected6{
     expected6{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -191,7 +191,7 @@ bool testAllocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected7{
     expected7{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -220,11 +220,11 @@ bool testDeallocateResource()
 {
 {
   bool retval = true;
   bool retval = true;
 
 
-  cmCTestHardwareAllocator allocator;
-  allocator.InitializeFromHardwareSpec(spec);
+  cmCTestResourceAllocator allocator;
+  allocator.InitializeFromResourceSpec(spec);
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected1{
     expected1{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -253,7 +253,7 @@ bool testDeallocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected2{
     expected2{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -276,7 +276,7 @@ bool testDeallocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected3{
     expected3{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -299,7 +299,7 @@ bool testDeallocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected4{
     expected4{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -322,7 +322,7 @@ bool testDeallocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected5{
     expected5{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -345,7 +345,7 @@ bool testDeallocateResource()
   }
   }
 
 
   static const std::map<
   static const std::map<
-    std::string, std::map<std::string, cmCTestHardwareAllocator::Resource>>
+    std::string, std::map<std::string, cmCTestResourceAllocator::Resource>>
     expected6{
     expected6{
       /* clang-format off */
       /* clang-format off */
       { "gpus", {
       { "gpus", {
@@ -374,23 +374,23 @@ bool testResourceFree()
 {
 {
   bool retval = true;
   bool retval = true;
 
 
-  const cmCTestHardwareAllocator::Resource r1{ 5, 0 };
+  const cmCTestResourceAllocator::Resource r1{ 5, 0 };
   if (r1.Free() != 5) {
   if (r1.Free() != 5) {
-    std::cout << "cmCTestHardwareAllocator::Resource::Free() did not return "
+    std::cout << "cmCTestResourceAllocator::Resource::Free() did not return "
                  "expected value for { 5, 0 }\n";
                  "expected value for { 5, 0 }\n";
     retval = false;
     retval = false;
   }
   }
 
 
-  const cmCTestHardwareAllocator::Resource r2{ 3, 2 };
+  const cmCTestResourceAllocator::Resource r2{ 3, 2 };
   if (r2.Free() != 1) {
   if (r2.Free() != 1) {
-    std::cout << "cmCTestHardwareAllocator::Resource::Free() did not return "
+    std::cout << "cmCTestResourceAllocator::Resource::Free() did not return "
                  "expected value for { 3, 2 }\n";
                  "expected value for { 3, 2 }\n";
     retval = false;
     retval = false;
   }
   }
 
 
-  const cmCTestHardwareAllocator::Resource r3{ 4, 4 };
+  const cmCTestResourceAllocator::Resource r3{ 4, 4 };
   if (r3.Free() != 0) {
   if (r3.Free() != 0) {
-    std::cout << "cmCTestHardwareAllocator::Resource::Free() did not return "
+    std::cout << "cmCTestResourceAllocator::Resource::Free() did not return "
                  "expected value for { 4, 4 }\n";
                  "expected value for { 4, 4 }\n";
     retval = false;
     retval = false;
   }
   }
@@ -398,12 +398,12 @@ bool testResourceFree()
   return retval;
   return retval;
 }
 }
 
 
-int testCTestHardwareAllocator(int, char** const)
+int testCTestResourceAllocator(int, char** const)
 {
 {
   int retval = 0;
   int retval = 0;
 
 
-  if (!testInitializeFromHardwareSpec()) {
-    std::cout << "in testInitializeFromHardwareSpec()\n";
+  if (!testInitializeFromResourceSpec()) {
+    std::cout << "in testInitializeFromResourceSpec()\n";
     retval = -1;
     retval = -1;
   }
   }
 
 

+ 6 - 5
Tests/CMakeLib/testCTestProcesses.cxx → Tests/CMakeLib/testCTestResourceGroups.cxx

@@ -106,24 +106,25 @@ bool TestExpectedParseResult(const ExpectedParseResult& expected)
   std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>
   std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>
     result;
     result;
   bool retval;
   bool retval;
-  if ((retval = cmCTestTestHandler::ParseProcessesProperty(
+  if ((retval = cmCTestTestHandler::ParseResourceGroupsProperty(
          expected.String, result)) != expected.ExpectedReturnValue) {
          expected.String, result)) != expected.ExpectedReturnValue) {
-    std::cout << "ParseProcessesProperty(\"" << expected.String
+    std::cout << "ParseResourceGroupsProperty(\"" << expected.String
               << "\") returned " << retval << ", should be "
               << "\") returned " << retval << ", should be "
               << expected.ExpectedReturnValue << std::endl;
               << expected.ExpectedReturnValue << std::endl;
     return false;
     return false;
   }
   }
 
 
   if (result != expected.ExpectedValue) {
   if (result != expected.ExpectedValue) {
-    std::cout << "ParseProcessesProperty(\"" << expected.String
-              << "\") did not yield expected set of processes" << std::endl;
+    std::cout << "ParseResourceGroupsProperty(\"" << expected.String
+              << "\") did not yield expected set of resource groups"
+              << std::endl;
     return false;
     return false;
   }
   }
 
 
   return true;
   return true;
 }
 }
 
 
-int testCTestProcesses(int /*unused*/, char* /*unused*/ [])
+int testCTestResourceGroups(int /*unused*/, char* /*unused*/ [])
 {
 {
   int retval = 0;
   int retval = 0;
 
 

+ 8 - 8
Tests/CMakeLib/testCTestHardwareSpec.cxx → Tests/CMakeLib/testCTestResourceSpec.cxx

@@ -2,16 +2,16 @@
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
-#include "cmCTestHardwareSpec.h"
+#include "cmCTestResourceSpec.h"
 
 
 struct ExpectedSpec
 struct ExpectedSpec
 {
 {
   std::string Path;
   std::string Path;
   bool ParseResult;
   bool ParseResult;
-  cmCTestHardwareSpec Expected;
+  cmCTestResourceSpec Expected;
 };
 };
 
 
-static const std::vector<ExpectedSpec> expectedHardwareSpecs = {
+static const std::vector<ExpectedSpec> expectedResourceSpecs = {
   /* clang-format off */
   /* clang-format off */
   {"spec1.json", true, {{{
   {"spec1.json", true, {{{
     {"gpus", {
     {"gpus", {
@@ -44,9 +44,9 @@ static const std::vector<ExpectedSpec> expectedHardwareSpecs = {
 };
 };
 
 
 static bool testSpec(const std::string& path, bool expectedResult,
 static bool testSpec(const std::string& path, bool expectedResult,
-                     const cmCTestHardwareSpec& expected)
+                     const cmCTestResourceSpec& expected)
 {
 {
-  cmCTestHardwareSpec actual;
+  cmCTestResourceSpec actual;
   bool result = actual.ReadFromJSONFile(path);
   bool result = actual.ReadFromJSONFile(path);
   if (result != expectedResult) {
   if (result != expectedResult) {
     std::cout << "ReadFromJSONFile(\"" << path << "\") returned " << result
     std::cout << "ReadFromJSONFile(\"" << path << "\") returned " << result
@@ -63,7 +63,7 @@ static bool testSpec(const std::string& path, bool expectedResult,
   return true;
   return true;
 }
 }
 
 
-int testCTestHardwareSpec(int argc, char** const argv)
+int testCTestResourceSpec(int argc, char** const argv)
 {
 {
   if (argc < 2) {
   if (argc < 2) {
     std::cout << "Invalid arguments.\n";
     std::cout << "Invalid arguments.\n";
@@ -71,9 +71,9 @@ int testCTestHardwareSpec(int argc, char** const argv)
   }
   }
 
 
   int retval = 0;
   int retval = 0;
-  for (auto const& spec : expectedHardwareSpecs) {
+  for (auto const& spec : expectedResourceSpecs) {
     std::string path = argv[1];
     std::string path = argv[1];
-    path += "/testCTestHardwareSpec_data/";
+    path += "/testCTestResourceSpec_data/";
     path += spec.Path;
     path += spec.Path;
     if (!testSpec(path, spec.ParseResult, spec.Expected)) {
     if (!testSpec(path, spec.ParseResult, spec.Expected)) {
       retval = -1;
       retval = -1;

+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec1.json → Tests/CMakeLib/testCTestResourceSpec_data/spec1.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec10.json → Tests/CMakeLib/testCTestResourceSpec_data/spec10.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec11.json → Tests/CMakeLib/testCTestResourceSpec_data/spec11.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec12.json → Tests/CMakeLib/testCTestResourceSpec_data/spec12.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec13.json → Tests/CMakeLib/testCTestResourceSpec_data/spec13.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec14.json → Tests/CMakeLib/testCTestResourceSpec_data/spec14.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec15.json → Tests/CMakeLib/testCTestResourceSpec_data/spec15.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec16.json → Tests/CMakeLib/testCTestResourceSpec_data/spec16.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec17.json → Tests/CMakeLib/testCTestResourceSpec_data/spec17.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec18.json → Tests/CMakeLib/testCTestResourceSpec_data/spec18.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec2.json → Tests/CMakeLib/testCTestResourceSpec_data/spec2.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec3.json → Tests/CMakeLib/testCTestResourceSpec_data/spec3.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec4.json → Tests/CMakeLib/testCTestResourceSpec_data/spec4.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec5.json → Tests/CMakeLib/testCTestResourceSpec_data/spec5.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec6.json → Tests/CMakeLib/testCTestResourceSpec_data/spec6.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec7.json → Tests/CMakeLib/testCTestResourceSpec_data/spec7.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec8.json → Tests/CMakeLib/testCTestResourceSpec_data/spec8.json


+ 0 - 0
Tests/CMakeLib/testCTestHardwareSpec_data/spec9.json → Tests/CMakeLib/testCTestResourceSpec_data/spec9.json


+ 12 - 12
Tests/RunCMake/CMakeLists.txt

@@ -336,7 +336,7 @@ add_RunCMake_test(no_install_prefix)
 add_RunCMake_test(configure_file)
 add_RunCMake_test(configure_file)
 add_RunCMake_test(CTestTimeoutAfterMatch)
 add_RunCMake_test(CTestTimeoutAfterMatch)
 
 
-# cthwalloc links against CMakeLib and CTestLib, which means it can't be built
+# ctresalloc links against CMakeLib and CTestLib, which means it can't be built
 # if CMake_TEST_EXTERNAL_CMAKE is activated (the compiler might be different.)
 # if CMake_TEST_EXTERNAL_CMAKE is activated (the compiler might be different.)
 # So, it has to be provided in the original build tree.
 # So, it has to be provided in the original build tree.
 if(CMake_TEST_EXTERNAL_CMAKE)
 if(CMake_TEST_EXTERNAL_CMAKE)
@@ -344,7 +344,7 @@ if(CMake_TEST_EXTERNAL_CMAKE)
   if(NOT CMAKE_VERSION VERSION_LESS 3.12)
   if(NOT CMAKE_VERSION VERSION_LESS 3.12)
     set(no_package_root_path NO_PACKAGE_ROOT_PATH)
     set(no_package_root_path NO_PACKAGE_ROOT_PATH)
   endif()
   endif()
-  find_program(cthwalloc cthwalloc PATHS ${CMake_TEST_EXTERNAL_CMAKE}
+  find_program(ctresalloc ctresalloc PATHS ${CMake_TEST_EXTERNAL_CMAKE}
     NO_DEFAULT_PATH
     NO_DEFAULT_PATH
     ${no_package_root_path}
     ${no_package_root_path}
     NO_CMAKE_PATH
     NO_CMAKE_PATH
@@ -353,25 +353,25 @@ if(CMake_TEST_EXTERNAL_CMAKE)
     NO_CMAKE_SYSTEM_PATH
     NO_CMAKE_SYSTEM_PATH
     NO_CMAKE_FIND_ROOT_PATH
     NO_CMAKE_FIND_ROOT_PATH
     )
     )
-  if(cthwalloc)
-    add_executable(cthwalloc IMPORTED)
-    set_property(TARGET cthwalloc PROPERTY IMPORTED_LOCATION ${cthwalloc})
+  if(ctresalloc)
+    add_executable(ctresalloc IMPORTED)
+    set_property(TARGET ctresalloc PROPERTY IMPORTED_LOCATION ${ctresalloc})
   endif()
   endif()
 else()
 else()
-  add_executable(cthwalloc CTestHardwareAllocation/cthwalloc.cxx)
-  target_link_libraries(cthwalloc CTestLib)
-  target_include_directories(cthwalloc PRIVATE
+  add_executable(ctresalloc CTestResourceAllocation/ctresalloc.cxx)
+  target_link_libraries(ctresalloc CTestLib)
+  target_include_directories(ctresalloc PRIVATE
     ${CMake_BINARY_DIR}/Source
     ${CMake_BINARY_DIR}/Source
     ${CMake_SOURCE_DIR}/Source
     ${CMake_SOURCE_DIR}/Source
     ${CMake_SOURCE_DIR}/Source/CTest
     ${CMake_SOURCE_DIR}/Source/CTest
     )
     )
-  set_property(TARGET cthwalloc PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMake_BIN_DIR})
+  set_property(TARGET ctresalloc PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMake_BIN_DIR})
 endif()
 endif()
 
 
-if(TARGET cthwalloc)
-  add_RunCMake_test(CTestHardwareAllocation -DCTHWALLOC_COMMAND=$<TARGET_FILE:cthwalloc>)
+if(TARGET ctresalloc)
+  add_RunCMake_test(CTestResourceAllocation -DCTRESALLOC_COMMAND=$<TARGET_FILE:ctresalloc>)
 else()
 else()
-  message(WARNING "Could not find or build cthwalloc")
+  message(WARNING "Could not find or build ctresalloc")
 endif()
 endif()
 
 
 find_package(Qt4 QUIET)
 find_package(Qt4 QUIET)

+ 1 - 1
Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake

@@ -307,7 +307,7 @@ function(run_ShowOnly)
     add_test(ShowOnly \"${CMAKE_COMMAND}\" -E echo)
     add_test(ShowOnly \"${CMAKE_COMMAND}\" -E echo)
     set_tests_properties(ShowOnly PROPERTIES
     set_tests_properties(ShowOnly PROPERTIES
       WILL_FAIL true
       WILL_FAIL true
-      PROCESSES \"2,threads:2,gpus:4;gpus:2,threads:4\"
+      RESOURCE_GROUPS \"2,threads:2,gpus:4;gpus:2,threads:4\"
       REQUIRED_FILES RequiredFileDoesNotExist
       REQUIRED_FILES RequiredFileDoesNotExist
       _BACKTRACE_TRIPLES \"file1;1;add_test;file0;;\"
       _BACKTRACE_TRIPLES \"file1;1;add_test;file0;;\"
       )
       )

+ 3 - 3
Tests/RunCMake/CTestCommandLine/show-only_json-v1_check.py

@@ -80,12 +80,12 @@ def check_willfail_property(p):
     assert p["name"] == "WILL_FAIL"
     assert p["name"] == "WILL_FAIL"
     assert p["value"] == True
     assert p["value"] == True
 
 
-def check_processes_property(p):
+def check_resource_groups_property(p):
     assert is_dict(p)
     assert is_dict(p)
     assert sorted(p.keys()) == ["name", "value"]
     assert sorted(p.keys()) == ["name", "value"]
     assert is_string(p["name"])
     assert is_string(p["name"])
     assert is_list(p["value"])
     assert is_list(p["value"])
-    assert p["name"] == "PROCESSES"
+    assert p["name"] == "RESOURCE_GROUPS"
     assert len(p["value"]) == 3
     assert len(p["value"]) == 3
 
 
     assert is_dict(p["value"][0])
     assert is_dict(p["value"][0])
@@ -147,7 +147,7 @@ def check_workingdir_property(p):
 def check_properties(p):
 def check_properties(p):
     assert is_list(p)
     assert is_list(p)
     assert len(p) == 4
     assert len(p) == 4
-    check_processes_property(p[0])
+    check_resource_groups_property(p[0])
     check_reqfiles_property(p[1])
     check_reqfiles_property(p[1])
     check_willfail_property(p[2])
     check_willfail_property(p[2])
     check_workingdir_property(p[3])
     check_workingdir_property(p[3])

+ 0 - 23
Tests/RunCMake/CTestHardwareAllocation/HardwareCommon.cmake

@@ -1,23 +0,0 @@
-function(setup_hardware_tests)
-  if(CTEST_HARDWARE_ALLOC_ENABLED)
-    add_test(NAME HardwareSetup COMMAND "${CMAKE_COMMAND}" -E remove -f "${CMAKE_BINARY_DIR}/cthwalloc.log")
-  endif()
-endfunction()
-
-function(add_hardware_test name sleep_time proc)
-  if(CTEST_HARDWARE_ALLOC_ENABLED)
-    add_test(NAME "${name}" COMMAND "${CTHWALLOC_COMMAND}" write "${CMAKE_BINARY_DIR}/cthwalloc.log" "${name}" "${sleep_time}" "${proc}")
-    set_property(TEST "${name}" PROPERTY DEPENDS HardwareSetup)
-  else()
-    add_test(NAME "${name}" COMMAND "${CTHWALLOC_COMMAND}" write "${CMAKE_BINARY_DIR}/cthwalloc.log" "${name}" "${sleep_time}")
-  endif()
-  set_property(TEST "${name}" PROPERTY PROCESSES "${proc}")
-  list(APPEND HARDWARE_TESTS "${name}")
-  set(HARDWARE_TESTS "${HARDWARE_TESTS}" PARENT_SCOPE)
-endfunction()
-
-function(cleanup_hardware_tests)
-  if(CTEST_HARDWARE_ALLOC_ENABLED)
-    file(WRITE "${CMAKE_BINARY_DIR}/hwtests.txt" "${HARDWARE_TESTS}")
-  endif()
-endfunction()

+ 0 - 167
Tests/RunCMake/CTestHardwareAllocation/RunCMakeTest.cmake

@@ -1,167 +0,0 @@
-include(RunCMake)
-include(RunCTest)
-
-###############################################################################
-# Test cthwalloc itself - we want to make sure it's not just rubber-stamping
-# the test results
-###############################################################################
-
-function(cthwalloc_verify_log expected_contents)
-  if(NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/cthwalloc.log")
-    string(APPEND RunCMake_TEST_FAILED "Log file was not written\n")
-    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-    return()
-  endif()
-  file(READ "${RunCMake_TEST_BINARY_DIR}/cthwalloc.log" actual_contents)
-  if(NOT actual_contents STREQUAL expected_contents)
-    string(APPEND RunCMake_TEST_FAILED "Actual log did not match expected log\n")
-    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(run_cthwalloc_write_proc name proc)
-  file(REMOVE "${RunCMake_BINARY_DIR}/${name}-build/cthwalloc.log")
-  run_cthwalloc_write_proc_nodel("${name}" "${proc}" "${ARGN}")
-endfunction()
-
-function(run_cthwalloc_write_proc_nodel name proc)
-  string(REPLACE ";" "\\;" proc "${proc}")
-  run_cmake_command(${name} "${CMAKE_COMMAND}" -E env "${ARGN}" "${CTHWALLOC_COMMAND}" write "${RunCMake_BINARY_DIR}/${name}-build/cthwalloc.log" "${name}" 0 "${proc}")
-endfunction()
-
-function(run_cthwalloc_write_noproc name)
-  run_cmake_command(${name} "${CMAKE_COMMAND}" -E env "${ARGN}" "${CTHWALLOC_COMMAND}" write "${RunCMake_BINARY_DIR}/${name}-build/cthwalloc.log" "${name}" 0)
-endfunction()
-
-function(run_cthwalloc_verify name tests)
-  string(REPLACE ";" "\\;" tests "${tests}")
-  run_cmake_command(${name} "${CTHWALLOC_COMMAND}" verify "${RunCMake_SOURCE_DIR}/${name}.log" "${CMAKE_CURRENT_LIST_DIR}/hwspec.json" "${tests}")
-endfunction()
-
-unset(ENV{CTEST_PROCESS_COUNT})
-set(RunCMake_TEST_NO_CLEAN 1)
-file(REMOVE_RECURSE "${RunCMake_BINARY_DIR}/cthwalloc-write-proc-good1-build")
-file(MAKE_DIRECTORY "${RunCMake_BINARY_DIR}/cthwalloc-write-proc-good1-build")
-file(WRITE "${RunCMake_BINARY_DIR}/cthwalloc-write-proc-good1-build/cthwalloc.log"
-[[begin test1
-alloc widgets 0 1
-dealloc widgets 0 1
-end test1
-]])
-run_cthwalloc_write_proc_nodel(cthwalloc-write-proc-good1 "1,widgets:2,transmogrifiers:1;2,widgets:1,widgets:2"
-  CTEST_PROCESS_COUNT=3
-  CTEST_PROCESS_0=widgets,transmogrifiers
-  CTEST_PROCESS_0_WIDGETS=id:0,slots:2
-  CTEST_PROCESS_0_TRANSMOGRIFIERS=id:calvin,slots:1
-  CTEST_PROCESS_1=widgets
-  "CTEST_PROCESS_1_WIDGETS=id:0,slots:1\\;id:2,slots:2"
-  CTEST_PROCESS_2=widgets
-  "CTEST_PROCESS_2_WIDGETS=id:0,slots:1\\;id:2,slots:2"
-  )
-set(RunCMake_TEST_NO_CLEAN 0)
-run_cthwalloc_write_proc(cthwalloc-write-proc-good2 "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  CTEST_PROCESS_0_WIDGETS=id:3,slots:8
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-nocount "widgets:8")
-run_cthwalloc_write_proc(cthwalloc-write-proc-badcount "widgets:8"
-  CTEST_PROCESS_COUNT=2
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-nores "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badres "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets,transmogrifiers
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-nowidgets "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets1 "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  CTEST_PROCESS_0_WIDGETS=
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets2 "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  "CTEST_PROCESS_0_WIDGETS=id:3,slots:8\\;id:0,slots:1"
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets3 "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  CTEST_PROCESS_0_WIDGETS=id:3,slots:7
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets4 "widgets:8"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  CTEST_PROCESS_0_WIDGETS=invalid
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets5 "widgets:2,widgets:2"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  "CTEST_PROCESS_0_WIDGETS=id:0,slots:2\\;id:0,slots:1"
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets6 "widgets:2"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  "CTEST_PROCESS_0_WIDGETS=id:0,slots:2\\;id:0,slots:1"
-  )
-run_cthwalloc_write_proc(cthwalloc-write-proc-badwidgets7 "widgets:2,widgets:2"
-  CTEST_PROCESS_COUNT=1
-  CTEST_PROCESS_0=widgets
-  CTEST_PROCESS_0_WIDGETS=id:0,slots:2
-  )
-
-run_cthwalloc_write_noproc(cthwalloc-write-noproc-good1)
-run_cthwalloc_write_noproc(cthwalloc-write-noproc-count
-  CTEST_PROCESS_COUNT=1
-  )
-
-run_cthwalloc_verify(cthwalloc-verify-good1 "test1;test2")
-run_cthwalloc_verify(cthwalloc-verify-good2 "")
-run_cthwalloc_verify(cthwalloc-verify-nolog "")
-run_cthwalloc_verify(cthwalloc-verify-nores "")
-run_cthwalloc_verify(cthwalloc-verify-noid "")
-run_cthwalloc_verify(cthwalloc-verify-notenough "")
-run_cthwalloc_verify(cthwalloc-verify-baddealloc "")
-run_cthwalloc_verify(cthwalloc-verify-leak "")
-run_cthwalloc_verify(cthwalloc-verify-badtest1 "")
-run_cthwalloc_verify(cthwalloc-verify-badtest2 "test1")
-run_cthwalloc_verify(cthwalloc-verify-badtest3 "test1")
-run_cthwalloc_verify(cthwalloc-verify-badtest4 "test1")
-run_cthwalloc_verify(cthwalloc-verify-badtest5 "test1")
-run_cthwalloc_verify(cthwalloc-verify-nobegin "test1")
-run_cthwalloc_verify(cthwalloc-verify-noend "test1")
-
-###############################################################################
-# Now test the hardware allocation feature of CTest
-###############################################################################
-
-function(run_ctest_hardware name parallel random)
-  run_ctest("${name}-ctest-s-hw" "-DCTEST_HARDWARE_ALLOC_ENABLED=1" "-DCTHWALLOC_COMMAND=${CTHWALLOC_COMMAND}" "-DCTEST_PARALLEL=${parallel}" "-DCTEST_RANDOM=${random}")
-  run_ctest("${name}-ctest-s-nohw" "-DCTEST_HARDWARE_ALLOC_ENABLED=0" "-DCTHWALLOC_COMMAND=${CTHWALLOC_COMMAND}" "-DCTEST_PARALLEL=${parallel}" "-DCTEST_RANDOM=${random}")
-endfunction()
-
-function(verify_ctest_hardware)
-  file(READ "${RunCMake_TEST_BINARY_DIR}/hwtests.txt" hwtests)
-  execute_process(COMMAND "${CTHWALLOC_COMMAND}" verify "${RunCMake_TEST_BINARY_DIR}/cthwalloc.log" "${CMAKE_CURRENT_LIST_DIR}/hwspec.json" "${hwtests}"
-    OUTPUT_VARIABLE output ERROR_QUIET RESULT_VARIABLE result)
-  if(result)
-    string(APPEND RunCMake_TEST_FAILED "${output}")
-    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-run_ctest_hardware(lotsoftests 10 1)
-run_ctest_hardware(checkfree1 2 0)
-run_ctest_hardware(checkfree2 1 0)
-run_ctest_hardware(notenough1 1 0)
-run_ctest_hardware(notenough2 1 0)
-run_ctest_hardware(ensure_parallel 2 0)
-
-set(ENV{CTEST_PROCESS_COUNT} 2)
-run_ctest_hardware(process_count 1 0)
-unset(ENV{CTEST_PROCESS_COUNT})

+ 0 - 1
Tests/RunCMake/CTestHardwareAllocation/checkfree1-ctest-s-hw-check.cmake

@@ -1 +0,0 @@
-verify_ctest_hardware()

+ 0 - 7
Tests/RunCMake/CTestHardwareAllocation/checkfree1.cmake

@@ -1,7 +0,0 @@
-setup_hardware_tests()
-
-add_hardware_test(Test1 1 "widgets:8")
-add_hardware_test(Test2 1 "fluxcapacitors:50;fluxcapacitors:50,widgets:8")
-add_hardware_test(Test3 1 "fluxcapacitors:121")
-
-cleanup_hardware_tests()

+ 0 - 1
Tests/RunCMake/CTestHardwareAllocation/checkfree2-ctest-s-hw-check.cmake

@@ -1 +0,0 @@
-verify_ctest_hardware()

+ 0 - 8
Tests/RunCMake/CTestHardwareAllocation/checkfree2.cmake

@@ -1,8 +0,0 @@
-setup_hardware_tests()
-
-# This test is an attack on the hardware scheduling algorithm. It has been
-# carefully crafted to fool the algorithm into thinking there isn't sufficient
-# hardware for it.
-add_hardware_test(Test1 1 "widgets:2;4,widgets:4")
-
-cleanup_hardware_tests()

+ 0 - 6
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-write-proc-good2-check.cmake

@@ -1,6 +0,0 @@
-cthwalloc_verify_log(
-[[begin cthwalloc-write-proc-good2
-alloc widgets 3 8
-dealloc widgets 3 8
-end cthwalloc-write-proc-good2
-]])

+ 0 - 1
Tests/RunCMake/CTestHardwareAllocation/lotsoftests-ctest-s-hw-check.cmake

@@ -1 +0,0 @@
-verify_ctest_hardware()

+ 0 - 16
Tests/RunCMake/CTestHardwareAllocation/lotsoftests.cmake

@@ -1,16 +0,0 @@
-setup_hardware_tests()
-
-add_hardware_test(Test1 2 "widgets:8;2,widgets:2")
-add_hardware_test(Test2 5 "fluxcapacitors:40")
-add_hardware_test(Test3 1 "10,widgets:1,fluxcapacitors:2")
-add_hardware_test(Test4 4 "fluxcapacitors:121")
-
-foreach(i RANGE 5 50)
-  add_hardware_test(Test${i} 1 "2,widgets:1")
-endforeach()
-
-foreach(i RANGE 51 100)
-  add_hardware_test(Test${i} 1 "2,transmogrifiers:2")
-endforeach()
-
-cleanup_hardware_tests()

+ 0 - 3
Tests/RunCMake/CTestHardwareAllocation/notenough1-ctest-s-hw-check.cmake

@@ -1,3 +0,0 @@
-if(EXISTS "${RunCMake_TEST_BINARY_DIR}/cthwalloc.log")
-  set(RunCMake_TEST_FAILED "cthwalloc.log should not exist")
-endif()

+ 0 - 4
Tests/RunCMake/CTestHardwareAllocation/notenough1-ctest-s-hw-stderr.txt

@@ -1,4 +0,0 @@
-^Insufficient hardware
-CMake Error at [^
-]*/Tests/RunCMake/CTestHardwareAllocation/notenough1-ctest-s-hw/test\.cmake:[0-9]+ \(message\):
-  Tests did not pass$

+ 0 - 5
Tests/RunCMake/CTestHardwareAllocation/notenough1.cmake

@@ -1,5 +0,0 @@
-setup_hardware_tests()
-
-add_hardware_test(Test1 1 "fluxcapacitors:200")
-
-cleanup_hardware_tests()

+ 0 - 3
Tests/RunCMake/CTestHardwareAllocation/notenough2-ctest-s-hw-check.cmake

@@ -1,3 +0,0 @@
-if(EXISTS "${RunCMake_TEST_BINARY_DIR}/cthwalloc.log")
-  set(RunCMake_TEST_FAILED "cthwalloc.log should not exist")
-endif()

+ 0 - 4
Tests/RunCMake/CTestHardwareAllocation/notenough2-ctest-s-hw-stderr.txt

@@ -1,4 +0,0 @@
-^Insufficient hardware
-CMake Error at [^
-]*/Tests/RunCMake/CTestHardwareAllocation/notenough2-ctest-s-hw/test\.cmake:[0-9]+ \(message\):
-  Tests did not pass$

+ 0 - 5
Tests/RunCMake/CTestHardwareAllocation/notenough2.cmake

@@ -1,5 +0,0 @@
-setup_hardware_tests()
-
-add_hardware_test(Test1 1 "terminators:2")
-
-cleanup_hardware_tests()

+ 0 - 1
Tests/RunCMake/CTestHardwareAllocation/process_count-ctest-s-hw-check.cmake

@@ -1 +0,0 @@
-verify_ctest_hardware()

+ 0 - 5
Tests/RunCMake/CTestHardwareAllocation/process_count.cmake

@@ -1,5 +0,0 @@
-setup_hardware_tests()
-
-add_hardware_test(Test1 1 "widgets:1")
-
-cleanup_hardware_tests()

+ 1 - 1
Tests/RunCMake/CTestHardwareAllocation/CMakeLists.txt.in → Tests/RunCMake/CTestResourceAllocation/CMakeLists.txt.in

@@ -4,6 +4,6 @@ if(CASE_NAME MATCHES "^(.*)-ctest-s")
   set(projname "${CMAKE_MATCH_1}")
   set(projname "${CMAKE_MATCH_1}")
   project(${projname} NONE)
   project(${projname} NONE)
   include(CTest)
   include(CTest)
-  include("@RunCMake_SOURCE_DIR@/HardwareCommon.cmake")
+  include("@RunCMake_SOURCE_DIR@/ResourceCommon.cmake")
   include("@RunCMake_SOURCE_DIR@/${projname}.cmake")
   include("@RunCMake_SOURCE_DIR@/${projname}.cmake")
 endif()
 endif()

+ 23 - 0
Tests/RunCMake/CTestResourceAllocation/ResourceCommon.cmake

@@ -0,0 +1,23 @@
+function(setup_resource_tests)
+  if(CTEST_RESOURCE_ALLOC_ENABLED)
+    add_test(NAME ResourceSetup COMMAND "${CMAKE_COMMAND}" -E remove -f "${CMAKE_BINARY_DIR}/ctresalloc.log")
+  endif()
+endfunction()
+
+function(add_resource_test name sleep_time proc)
+  if(CTEST_RESOURCE_ALLOC_ENABLED)
+    add_test(NAME "${name}" COMMAND "${CTRESALLOC_COMMAND}" write "${CMAKE_BINARY_DIR}/ctresalloc.log" "${name}" "${sleep_time}" "${proc}")
+    set_property(TEST "${name}" PROPERTY DEPENDS ResourceSetup)
+  else()
+    add_test(NAME "${name}" COMMAND "${CTRESALLOC_COMMAND}" write "${CMAKE_BINARY_DIR}/ctresalloc.log" "${name}" "${sleep_time}")
+  endif()
+  set_property(TEST "${name}" PROPERTY RESOURCE_GROUPS "${proc}")
+  list(APPEND RESOURCE_TESTS "${name}")
+  set(RESOURCE_TESTS "${RESOURCE_TESTS}" PARENT_SCOPE)
+endfunction()
+
+function(cleanup_resource_tests)
+  if(CTEST_RESOURCE_ALLOC_ENABLED)
+    file(WRITE "${CMAKE_BINARY_DIR}/restests.txt" "${RESOURCE_TESTS}")
+  endif()
+endfunction()

+ 167 - 0
Tests/RunCMake/CTestResourceAllocation/RunCMakeTest.cmake

@@ -0,0 +1,167 @@
+include(RunCMake)
+include(RunCTest)
+
+###############################################################################
+# Test ctresalloc itself - we want to make sure it's not just rubber-stamping
+# the test results
+###############################################################################
+
+function(ctresalloc_verify_log expected_contents)
+  if(NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/ctresalloc.log")
+    string(APPEND RunCMake_TEST_FAILED "Log file was not written\n")
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+    return()
+  endif()
+  file(READ "${RunCMake_TEST_BINARY_DIR}/ctresalloc.log" actual_contents)
+  if(NOT actual_contents STREQUAL expected_contents)
+    string(APPEND RunCMake_TEST_FAILED "Actual log did not match expected log\n")
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(run_ctresalloc_write_proc name proc)
+  file(REMOVE "${RunCMake_BINARY_DIR}/${name}-build/ctresalloc.log")
+  run_ctresalloc_write_proc_nodel("${name}" "${proc}" "${ARGN}")
+endfunction()
+
+function(run_ctresalloc_write_proc_nodel name proc)
+  string(REPLACE ";" "\\;" proc "${proc}")
+  run_cmake_command(${name} "${CMAKE_COMMAND}" -E env "${ARGN}" "${CTRESALLOC_COMMAND}" write "${RunCMake_BINARY_DIR}/${name}-build/ctresalloc.log" "${name}" 0 "${proc}")
+endfunction()
+
+function(run_ctresalloc_write_noproc name)
+  run_cmake_command(${name} "${CMAKE_COMMAND}" -E env "${ARGN}" "${CTRESALLOC_COMMAND}" write "${RunCMake_BINARY_DIR}/${name}-build/ctresalloc.log" "${name}" 0)
+endfunction()
+
+function(run_ctresalloc_verify name tests)
+  string(REPLACE ";" "\\;" tests "${tests}")
+  run_cmake_command(${name} "${CTRESALLOC_COMMAND}" verify "${RunCMake_SOURCE_DIR}/${name}.log" "${CMAKE_CURRENT_LIST_DIR}/resspec.json" "${tests}")
+endfunction()
+
+unset(ENV{CTEST_RESOURCE_GROUP_COUNT})
+set(RunCMake_TEST_NO_CLEAN 1)
+file(REMOVE_RECURSE "${RunCMake_BINARY_DIR}/ctresalloc-write-proc-good1-build")
+file(MAKE_DIRECTORY "${RunCMake_BINARY_DIR}/ctresalloc-write-proc-good1-build")
+file(WRITE "${RunCMake_BINARY_DIR}/ctresalloc-write-proc-good1-build/ctresalloc.log"
+[[begin test1
+alloc widgets 0 1
+dealloc widgets 0 1
+end test1
+]])
+run_ctresalloc_write_proc_nodel(ctresalloc-write-proc-good1 "1,widgets:2,transmogrifiers:1;2,widgets:1,widgets:2"
+  CTEST_RESOURCE_GROUP_COUNT=3
+  CTEST_RESOURCE_GROUP_0=widgets,transmogrifiers
+  CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2
+  CTEST_RESOURCE_GROUP_0_TRANSMOGRIFIERS=id:calvin,slots:1
+  CTEST_RESOURCE_GROUP_1=widgets
+  "CTEST_RESOURCE_GROUP_1_WIDGETS=id:0,slots:1\\;id:2,slots:2"
+  CTEST_RESOURCE_GROUP_2=widgets
+  "CTEST_RESOURCE_GROUP_2_WIDGETS=id:0,slots:1\\;id:2,slots:2"
+  )
+set(RunCMake_TEST_NO_CLEAN 0)
+run_ctresalloc_write_proc(ctresalloc-write-proc-good2 "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  CTEST_RESOURCE_GROUP_0_WIDGETS=id:3,slots:8
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-nocount "widgets:8")
+run_ctresalloc_write_proc(ctresalloc-write-proc-badcount "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=2
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-nores "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badres "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets,transmogrifiers
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-nowidgets "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets1 "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  CTEST_RESOURCE_GROUP_0_WIDGETS=
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets2 "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  "CTEST_RESOURCE_GROUP_0_WIDGETS=id:3,slots:8\\;id:0,slots:1"
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets3 "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  CTEST_RESOURCE_GROUP_0_WIDGETS=id:3,slots:7
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets4 "widgets:8"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  CTEST_RESOURCE_GROUP_0_WIDGETS=invalid
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets5 "widgets:2,widgets:2"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  "CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2\\;id:0,slots:1"
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets6 "widgets:2"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  "CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2\\;id:0,slots:1"
+  )
+run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets7 "widgets:2,widgets:2"
+  CTEST_RESOURCE_GROUP_COUNT=1
+  CTEST_RESOURCE_GROUP_0=widgets
+  CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2
+  )
+
+run_ctresalloc_write_noproc(ctresalloc-write-noproc-good1)
+run_ctresalloc_write_noproc(ctresalloc-write-noproc-count
+  CTEST_RESOURCE_GROUP_COUNT=1
+  )
+
+run_ctresalloc_verify(ctresalloc-verify-good1 "test1;test2")
+run_ctresalloc_verify(ctresalloc-verify-good2 "")
+run_ctresalloc_verify(ctresalloc-verify-nolog "")
+run_ctresalloc_verify(ctresalloc-verify-nores "")
+run_ctresalloc_verify(ctresalloc-verify-noid "")
+run_ctresalloc_verify(ctresalloc-verify-notenough "")
+run_ctresalloc_verify(ctresalloc-verify-baddealloc "")
+run_ctresalloc_verify(ctresalloc-verify-leak "")
+run_ctresalloc_verify(ctresalloc-verify-badtest1 "")
+run_ctresalloc_verify(ctresalloc-verify-badtest2 "test1")
+run_ctresalloc_verify(ctresalloc-verify-badtest3 "test1")
+run_ctresalloc_verify(ctresalloc-verify-badtest4 "test1")
+run_ctresalloc_verify(ctresalloc-verify-badtest5 "test1")
+run_ctresalloc_verify(ctresalloc-verify-nobegin "test1")
+run_ctresalloc_verify(ctresalloc-verify-noend "test1")
+
+###############################################################################
+# Now test the resource allocation feature of CTest
+###############################################################################
+
+function(run_ctest_resource name parallel random)
+  run_ctest("${name}-ctest-s-res" "-DCTEST_RESOURCE_ALLOC_ENABLED=1" "-DCTRESALLOC_COMMAND=${CTRESALLOC_COMMAND}" "-DCTEST_PARALLEL=${parallel}" "-DCTEST_RANDOM=${random}")
+  run_ctest("${name}-ctest-s-nores" "-DCTEST_RESOURCE_ALLOC_ENABLED=0" "-DCTRESALLOC_COMMAND=${CTRESALLOC_COMMAND}" "-DCTEST_PARALLEL=${parallel}" "-DCTEST_RANDOM=${random}")
+endfunction()
+
+function(verify_ctest_resources)
+  file(READ "${RunCMake_TEST_BINARY_DIR}/restests.txt" restests)
+  execute_process(COMMAND "${CTRESALLOC_COMMAND}" verify "${RunCMake_TEST_BINARY_DIR}/ctresalloc.log" "${CMAKE_CURRENT_LIST_DIR}/resspec.json" "${restests}"
+    OUTPUT_VARIABLE output ERROR_QUIET RESULT_VARIABLE result)
+  if(result)
+    string(APPEND RunCMake_TEST_FAILED "${output}")
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+run_ctest_resource(lotsoftests 10 1)
+run_ctest_resource(checkfree1 2 0)
+run_ctest_resource(checkfree2 1 0)
+run_ctest_resource(notenough1 1 0)
+run_ctest_resource(notenough2 1 0)
+run_ctest_resource(ensure_parallel 2 0)
+
+set(ENV{CTEST_RESOURCE_GROUP_COUNT} 2)
+run_ctest_resource(process_count 1 0)
+unset(ENV{CTEST_RESOURCE_GROUP_COUNT})

+ 1 - 0
Tests/RunCMake/CTestResourceAllocation/checkfree1-ctest-s-res-check.cmake

@@ -0,0 +1 @@
+verify_ctest_resources()

+ 7 - 0
Tests/RunCMake/CTestResourceAllocation/checkfree1.cmake

@@ -0,0 +1,7 @@
+setup_resource_tests()
+
+add_resource_test(Test1 1 "widgets:8")
+add_resource_test(Test2 1 "fluxcapacitors:50;fluxcapacitors:50,widgets:8")
+add_resource_test(Test3 1 "fluxcapacitors:121")
+
+cleanup_resource_tests()

+ 1 - 0
Tests/RunCMake/CTestResourceAllocation/checkfree2-ctest-s-res-check.cmake

@@ -0,0 +1 @@
+verify_ctest_resources()

+ 8 - 0
Tests/RunCMake/CTestResourceAllocation/checkfree2.cmake

@@ -0,0 +1,8 @@
+setup_resource_tests()
+
+# This test is an attack on the resource scheduling algorithm. It has been
+# carefully crafted to fool the algorithm into thinking there aren't sufficient
+# resources for it.
+add_resource_test(Test1 1 "widgets:2;4,widgets:4")
+
+cleanup_resource_tests()

+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-baddealloc-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-baddealloc-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-baddealloc.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-baddealloc.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest1-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest1-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest1.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest1.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest2-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest2-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest2.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest2.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest3-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest3-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest3.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest3.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest4-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest4-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest4.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest4.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest5-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest5-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-badtest5.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-badtest5.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-good1.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-good1.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-good2.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-good2.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-leak-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-leak-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-leak.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-leak.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-nobegin-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-nobegin-result.txt


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-nobegin.log → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-nobegin.log


+ 0 - 0
Tests/RunCMake/CTestHardwareAllocation/cthwalloc-verify-noend-result.txt → Tests/RunCMake/CTestResourceAllocation/ctresalloc-verify-noend-result.txt


部分文件因为文件数量过多而无法显示