summaryrefslogtreecommitdiff
path: root/gerbonara/gerber/tests/test_excellon.py
blob: 545bec9fc8911d37e93449f0f3262140e5e09c43 (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Jan Götte <code@jaseg.de>
import os
import re
import math
import functools
import tempfile
import shutil
from argparse import Namespace
from itertools import chain
from pathlib import Path
from contextlib import contextmanager
from PIL import Image

import pytest

from ..excellon import ExcellonFile
from ..cam import FileSettings

from .image_support import *
from .utils import *

REFERENCE_FILES = [
        'easyeda/Gerber_Drill_NPTH.DRL',
        'easyeda/Gerber_Drill_PTH.DRL',
        'allegro-2/MinnowMax_RevA1_IPC356A.ipc',
        'altium-composite-drill/NC Drill/LimeSDR-QPCIe_1v2-SlotHoles.TXT',
        'altium-composite-drill/NC Drill/LimeSDR-QPCIe_1v2-RoundHoles.TXT',
        'pcb-rnd/power-art.xln',
        'siemens/80101_0125_F200_ThruHoleNonPlated.ncd',
        'siemens/80101_0125_F200_ThruHolePlated.ncd',
        'siemens/80101_0125_F200_ContourPlated.ncd',
        'Target3001/IRNASIoTbank1.2.Drill',
        'altium-old-composite-drill.txt',
        'fritzing/combined.txt',
        'ncdrill.DRD',
        'upverter/design_export.drl',
        'diptrace/mainboard.drl',
        'diptrace/panel.drl',
        'diptrace/keyboard.drl',
        ]

@filter_syntax_warnings
@pytest.mark.parametrize('reference', REFERENCE_FILES, indirect=True)
def test_round_trip(reference, tmpfile):
    tmp = tmpfile('Output excellon', '.drl')

    ExcellonFile.open(reference).save(tmp)

    mean, _max, hist = excellon_difference(reference, tmp, diff_out=tmpfile('Difference', '.png'))
    assert mean < 5e-5
    assert hist[9] == 0
    assert hist[3:].sum() < 5e-5*hist.size