def analyze_results(results: List[ExecutionResult]) -> ExecutionTrace: """Merge the trace of the given results. Args: results: The list of execution results to analyze Returns: the merged traces. """ merged = ExecutionTrace() for result in results: trace = result.execution_trace assert trace is not None merged.merge(trace) return merged
def __init__(self) -> None: self._known_data = KnownData() # Contains the trace information that is generated when a module is imported self._import_trace = ExecutionTrace() self._init_trace() self._enabled = True self._current_thread_ident: Optional[int] = None
def reset(self) -> None: """Resets everything. Should be called before instrumentation. Clears all data, so we can handle a reload of the SUT. """ self._known_data = KnownData() self._import_trace = ExecutionTrace() self._init_trace()
def analyze_traces( results: List[ExecutionResult]) -> Tuple[bool, ExecutionTrace]: """Analyze the given traces. Args: results: The list of execution results to analyse Returns: A tuple that tells whether or not a trace contained an exception and the merged traces. """ has_exception = False merged = ExecutionTrace() for result in results: trace = result.execution_trace assert trace merged.merge(trace) if result.has_test_exceptions(): has_exception = True return has_exception, merged
def _init_trace(self) -> None: """Create a new trace that only contains the trace data from the import.""" new_trace = ExecutionTrace() new_trace.merge(self._import_trace) self._trace = new_trace
def __init__(self) -> None: self._known_data = KnownData() # Contains the trace information that is generated when a module is imported self._import_trace = ExecutionTrace() self._init_trace() self._enabled = True
def trace_mock(): return ExecutionTrace()
def test_analyze_traces_empty(): results = [] trace = analyze_results(results) assert trace == ExecutionTrace()
def test_merge(): trace0 = ExecutionTrace() trace1 = ExecutionTrace() trace0.merge(trace1) assert trace0 == ExecutionTrace()
def test_merge_min(): dict0 = {0: 0.5, 1: 0.2} dict1 = {0: 0.3, 1: 0.6} ExecutionTrace._merge_min(dict0, dict1) assert dict0 == {0: 0.3, 1: 0.2}
def test_merge_full(): trace0 = ExecutionTrace() trace0.executed_code_objects.add(0) trace0.executed_code_objects.add(1) trace0.executed_predicates[0] = 9 trace0.executed_predicates[1] = 7 trace0.true_distances[0] = 6 trace0.true_distances[1] = 3 trace0.false_distances[0] = 0 trace0.false_distances[1] = 1 trace1 = ExecutionTrace() trace1.executed_code_objects.add(1) trace1.executed_code_objects.add(2) trace1.executed_predicates[1] = 5 trace1.executed_predicates[2] = 8 trace1.true_distances[1] = 19 trace1.true_distances[2] = 3 trace1.false_distances[1] = 234 trace1.false_distances[2] = 0 result = ExecutionTrace() result.executed_code_objects.add(0) result.executed_code_objects.add(1) result.executed_code_objects.add(2) result.executed_predicates[0] = 9 result.executed_predicates[1] = 12 result.executed_predicates[2] = 8 result.true_distances[0] = 6 result.true_distances[1] = 3 result.true_distances[2] = 3 result.false_distances[0] = 0 result.false_distances[1] = 1 result.false_distances[2] = 0 trace0.merge(trace1) assert trace0 == result
def test_analyze_traces_empty(): results = [] has_exception, trace = BranchDistanceSuiteFitnessFunction.analyze_traces( results) assert not has_exception assert trace == ExecutionTrace()