aboutsummaryrefslogtreecommitdiff
path: root/test/sca/conftest.py
blob: 4d312a3d9d495ea392fd2cd1e714c0a395c98fe6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from typing import Dict

import matplotlib.pyplot as plt
import pytest
from importlib_resources import files, as_file

from pyecsca.sca import Trace

cases: Dict[str, int] = {}


@pytest.fixture()
def plot_name(request):
    def namer():
        test_name = f"{request.module.__name__}.{request.node.name}"
        case_id = cases.setdefault(test_name, 0) + 1
        cases[test_name] = case_id
        return test_name + str(case_id)
    return namer


@pytest.fixture()
def plot_path(plot_name):
    def namer():
        with as_file(files("test").joinpath("plots", plot_name())) as fname:
            return fname
    return namer


@pytest.fixture()
def plot(plot_path):
    def plotter(*traces: Trace, **kwtraces: Trace):
        fig = plt.figure()
        ax = fig.add_subplot(111)
        for i, trace in enumerate(traces):
            ax.plot(trace.samples, label=str(i))
        for name, trace in kwtraces.items():
            ax.plot(trace.samples, label=name)
        ax.legend(loc="best")
        fname = plot_path()
        plt.savefig(fname.parent / (fname.name + ".png"))
    return plotter