|
16 | 16 | from testgen.formatters.params import generate_random_params |
17 | 17 |
|
18 | 18 |
|
19 | | -@add_coverpoint_generator("cp_fs1_edges") |
20 | | -def make_fs1_edges(instr_name: str, instr_type: str, coverpoint: str, test_data: TestData) -> list[TestChunk]: |
21 | | - """Generate tests for fs1 edge values.""" |
| 19 | +def _select_edges(coverpoint: str) -> tuple: |
22 | 20 | if coverpoint.endswith("_D"): |
23 | | - edges = FLOAT_EDGES.double |
| 21 | + return FLOAT_EDGES.double |
24 | 22 | elif coverpoint.endswith("_H"): |
25 | | - edges = FLOAT_EDGES.half |
| 23 | + return FLOAT_EDGES.half |
26 | 24 | elif coverpoint.endswith("_BF16"): |
27 | | - edges = FLOAT_EDGES.bf16 |
28 | | - else: |
29 | | - edges = FLOAT_EDGES.single |
| 25 | + return FLOAT_EDGES.bf16 |
| 26 | + return FLOAT_EDGES.single |
| 27 | + |
30 | 28 |
|
31 | | - cross_frm = "_frm" in coverpoint |
| 29 | +def _frm_modes(coverpoint: str) -> tuple: |
| 30 | + return ("dyn", "rdn", "rmm", "rne", "rtz", "rup") if "_frm" in coverpoint else (None,) |
32 | 31 |
|
33 | | - frm_modes = ("dyn", "rdn", "rmm", "rne", "rtz", "rup") if cross_frm else [None] |
34 | 32 |
|
| 33 | +@add_coverpoint_generator("cp_fs1_edges") |
| 34 | +def make_fs1_edges(instr_name: str, instr_type: str, coverpoint: str, test_data: TestData) -> list[TestChunk]: |
| 35 | + """Generate tests for fs1 edge values.""" |
35 | 36 | test_chunks: list[TestChunk] = [] |
36 | | - for edge_val in edges: |
37 | | - for frm_mode in frm_modes: |
| 37 | + for edge_val in _select_edges(coverpoint): |
| 38 | + for frm_mode in _frm_modes(coverpoint): |
38 | 39 | params = generate_random_params(test_data, instr_type, exclude_regs=[0], fs1val=edge_val, frm=frm_mode) |
39 | 40 | bin_name = f"b{edge_val:#x}{f'_{frm_mode}' if frm_mode is not None else ''}" |
40 | 41 | desc = f"{coverpoint} (Test source fs1 value = {test_data.flen_format_str.format(edge_val)}{f', frm = {frm_mode}' if frm_mode is not None else ''})" |
41 | 42 | tc = format_single_testcase(instr_name, instr_type, test_data, params, desc, bin_name, coverpoint) |
42 | 43 | test_chunks.append(tc) |
43 | 44 | return_test_regs(test_data, params) |
44 | | - |
45 | 45 | return test_chunks |
46 | 46 |
|
47 | 47 |
|
48 | 48 | @add_coverpoint_generator("cp_fs2_edges") |
49 | 49 | def make_fs2_edges(instr_name: str, instr_type: str, coverpoint: str, test_data: TestData) -> list[TestChunk]: |
50 | 50 | """Generate tests for fs2 edge values.""" |
51 | | - if coverpoint.endswith("_D"): |
52 | | - edges = FLOAT_EDGES.double |
53 | | - elif coverpoint.endswith("_H"): |
54 | | - edges = FLOAT_EDGES.half |
55 | | - elif coverpoint.endswith("_BF16"): |
56 | | - edges = FLOAT_EDGES.bf16 |
57 | | - else: |
58 | | - edges = FLOAT_EDGES.single |
59 | | - |
60 | 51 | test_chunks: list[TestChunk] = [] |
61 | | - for edge_val in edges: |
62 | | - params = generate_random_params(test_data, instr_type, exclude_regs=[0], fs2val=edge_val) |
63 | | - desc = f"{coverpoint} (Test source fs2 value = {test_data.flen_format_str.format(edge_val)})" |
64 | | - tc = format_single_testcase(instr_name, instr_type, test_data, params, desc, f"b{edge_val:#x}", coverpoint) |
65 | | - test_chunks.append(tc) |
66 | | - return_test_regs(test_data, params) |
67 | | - |
| 52 | + for edge_val in _select_edges(coverpoint): |
| 53 | + for frm_mode in _frm_modes(coverpoint): |
| 54 | + params = generate_random_params(test_data, instr_type, exclude_regs=[0], fs2val=edge_val, frm=frm_mode) |
| 55 | + bin_name = f"b{edge_val:#x}{f'_{frm_mode}' if frm_mode is not None else ''}" |
| 56 | + desc = f"{coverpoint} (Test source fs2 value = {test_data.flen_format_str.format(edge_val)}{f', frm = {frm_mode}' if frm_mode is not None else ''})" |
| 57 | + tc = format_single_testcase(instr_name, instr_type, test_data, params, desc, bin_name, coverpoint) |
| 58 | + test_chunks.append(tc) |
| 59 | + return_test_regs(test_data, params) |
68 | 60 | return test_chunks |
69 | 61 |
|
70 | 62 |
|
71 | 63 | @add_coverpoint_generator("cp_fs3_edges") |
72 | 64 | def make_fs3_edges(instr_name: str, instr_type: str, coverpoint: str, test_data: TestData) -> list[TestChunk]: |
73 | 65 | """Generate tests for fs3 edge values.""" |
74 | | - if coverpoint.endswith("_D"): |
75 | | - edges = FLOAT_EDGES.double |
76 | | - elif coverpoint.endswith("_H"): |
77 | | - edges = FLOAT_EDGES.half |
78 | | - elif coverpoint.endswith("_BF16"): |
79 | | - edges = FLOAT_EDGES.bf16 |
80 | | - else: |
81 | | - edges = FLOAT_EDGES.single |
82 | | - |
83 | 66 | test_chunks: list[TestChunk] = [] |
84 | | - for edge_val in edges: |
85 | | - params = generate_random_params(test_data, instr_type, exclude_regs=[0], fs3val=edge_val) |
86 | | - desc = f"{coverpoint} (Test source fs3 value = {test_data.flen_format_str.format(edge_val)})" |
87 | | - tc = format_single_testcase(instr_name, instr_type, test_data, params, desc, f"b{edge_val:#x}", coverpoint) |
88 | | - test_chunks.append(tc) |
89 | | - return_test_regs(test_data, params) |
90 | | - |
| 67 | + for edge_val in _select_edges(coverpoint): |
| 68 | + for frm_mode in _frm_modes(coverpoint): |
| 69 | + params = generate_random_params(test_data, instr_type, exclude_regs=[0], fs3val=edge_val, frm=frm_mode) |
| 70 | + bin_name = f"b{edge_val:#x}{f'_{frm_mode}' if frm_mode is not None else ''}" |
| 71 | + desc = f"{coverpoint} (Test source fs3 value = {test_data.flen_format_str.format(edge_val)}{f', frm = {frm_mode}' if frm_mode is not None else ''})" |
| 72 | + tc = format_single_testcase(instr_name, instr_type, test_data, params, desc, bin_name, coverpoint) |
| 73 | + test_chunks.append(tc) |
| 74 | + return_test_regs(test_data, params) |
91 | 75 | return test_chunks |
0 commit comments