Untitled
unknown
plain_text
2 years ago
1.3 kB
11
Indexable
from docplex.mp.model import Model
def solve_test_case_selection(lines_covered_by_tests):
num_lines = max(max(test) for test in lines_covered_by_tests) # assuming lines are 1-indexed
num_tests = len(lines_covered_by_tests)
# Create an ILP model instance
mdl = Model('test_case_selection')
# Decision variables: x[j] == 1 if test j is selected
x = mdl.binary_var_list(num_tests, name='x')
# Objective: Minimize the number of test cases used
mdl.minimize(mdl.sum(x))
# Constraints: Each line must be covered by at least one test case
for i in range(1, num_lines + 1):
mdl.add_constraint(mdl.sum(x[j] for j, test in enumerate(lines_covered_by_tests) if i in test) >= 1, f'cover_line_{i}')
# Solve the model
solution = mdl.solve()
# Output selected test cases
if solution:
selected_tests = [j+1 for j, var in enumerate(x) if var.solution_value > 0.5]
print("Selected Test Cases:", selected_tests)
else:
print("No solution found.")
# Example usage
lines_covered_by_tests = [
[3, 4, 6, 8],
[1, 2, 4, 9, 10],
[5, 6, 8, 10],
[2, 5, 8, 9],
[1, 4, 6, 7, 9, 10],
[1, 2, 3, 5, 8]
]
solve_test_case_selection(lines_covered_by_tests)
Editor is loading...
Leave a Comment