Exemple #1
0
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()
Exemple #4
0
    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
Exemple #7
0
def trace_mock():
    return ExecutionTrace()
Exemple #8
0
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
Exemple #12
0
def test_analyze_traces_empty():
    results = []
    has_exception, trace = BranchDistanceSuiteFitnessFunction.analyze_traces(
        results)
    assert not has_exception
    assert trace == ExecutionTrace()