reframe-hpc / reframe
Showing 1 of 3 files from the diff.
Other files ignored by Codecov

@@ -7,6 +7,7 @@
Loading
7 7
import itertools
8 8
import json
9 9
import os
10 +
import random
10 11
import shlex
11 12
import socket
12 13
import sys
@@ -25,6 +26,7 @@
Loading
25 26
import reframe.frontend.dependencies as dependencies
26 27
import reframe.frontend.filters as filters
27 28
import reframe.frontend.runreport as runreport
29 +
import reframe.utility as util
28 30
import reframe.utility.jsonext as jsonext
29 31
import reframe.utility.osext as osext
30 32
import reframe.utility.typecheck as typ
@@ -386,6 +388,11 @@
Loading
386 388
        help=('Distribute the selected single-node jobs on every node that'
387 389
              'is in STATE (default: "idle"')
388 390
    )
391 +
    run_options.add_argument(
392 +
        '--exec-order', metavar='ORDER', action='store',
393 +
        choices=['name', 'random', 'rname', 'ruid', 'uid'],
394 +
        help='Impose an execution order for independent tests'
395 +
    )
389 396
    run_options.add_argument(
390 397
        '--exec-policy', metavar='POLICY', action='store',
391 398
        choices=['async', 'serial'], default='async',
@@ -1054,8 +1061,8 @@
Loading
1054 1061
                    "a non-negative integer"
1055 1062
                ) from None
1056 1063
1057 -
            testcases = repeat_tests(testcases, num_repeats)
1058 -
            testcases_all = testcases
1064 +
            testcases_all = repeat_tests(testcases, num_repeats)
1065 +
            testcases = testcases_all
1059 1066
1060 1067
        if options.distribute:
1061 1068
            node_map = getallnodes(options.distribute, parsed_job_options)
@@ -1070,15 +1077,31 @@
Loading
1070 1077
                x for x in parsed_job_options
1071 1078
                if (not x.startswith('-w') and not x.startswith('--nodelist'))
1072 1079
            ]
1073 -
            testcases = distribute_tests(testcases, node_map)
1074 -
            testcases_all = testcases
1080 +
            testcases_all = distribute_tests(testcases, node_map)
1081 +
            testcases = testcases_all
1082 +
1083 +
        @logging.time_function
1084 +
        def _sort_testcases(testcases):
1085 +
            if options.exec_order in ('name', 'rname'):
1086 +
                testcases.sort(key=lambda c: c.check.display_name,
1087 +
                               reverse=(options.exec_order == 'rname'))
1088 +
            elif options.exec_order in ('uid', 'ruid'):
1089 +
                testcases.sort(key=lambda c: c.check.unique_name,
1090 +
                               reverse=(options.exec_order == 'ruid'))
1091 +
            elif options.exec_order == 'random':
1092 +
                random.shuffle(testcases)
1093 +
1094 +
        _sort_testcases(testcases)
1095 +
        if testcases_all is not testcases:
1096 +
            _sort_testcases(testcases_all)
1075 1097
1076 1098
        # Prepare for running
1077 1099
        printer.debug('Building and validating the full test DAG')
1078 1100
        testgraph, skipped_cases = dependencies.build_deps(testcases_all)
1079 1101
        if skipped_cases:
1080 1102
            # Some cases were skipped, so adjust testcases
1081 -
            testcases = list(set(testcases) - set(skipped_cases))
1103 +
            testcases = list(util.OrderedSet(testcases) -
1104 +
                             util.OrderedSet(skipped_cases))
1082 1105
            printer.verbose(
1083 1106
                f'Filtering test case(s) due to unresolved dependencies: '
1084 1107
                f'{len(testcases)} remaining'
Files Coverage
reframe 86.70%
Project Totals (59 files) 86.70%

No yaml found.

Create your codecov.yml to customize your Codecov experience

Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file. The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files. The size and color of each slice is representing the number of statements and the coverage, respectively.
Grid
Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively.
Loading