# -*- coding: utf-8 -*-
#
import copy
import pytest

import meshio

import helpers


def gmsh_periodic():
    mesh = copy.deepcopy(helpers.quad_mesh)
    trns = "Affine{}".format(" 0" * 16)  # just for io testing
    mesh.gmsh_periodic = [
        [0, (3, 1), None, [[2, 0]]],
        [0, (4, 6), None, [[3, 5]]],
        [1, (2, 1), trns, [[5, 0], [4, 1], [4, 2]]],
    ]
    return mesh


@pytest.mark.parametrize(
    "mesh",
    [
        helpers.tri_mesh,
        helpers.triangle6_mesh,
        helpers.quad_mesh,
        helpers.quad8_mesh,
        helpers.tri_quad_mesh,
        helpers.tet_mesh,
        helpers.tet10_mesh,
        helpers.hex_mesh,
        helpers.hex20_mesh,
        helpers.add_point_data(helpers.tri_mesh, 1),
        helpers.add_point_data(helpers.tri_mesh, 3),
        helpers.add_point_data(helpers.tri_mesh, 9),
        helpers.add_cell_data(helpers.tri_mesh, 1),
        helpers.add_cell_data(helpers.tri_mesh, 3),
        helpers.add_cell_data(helpers.tri_mesh, 9),
        helpers.add_field_data(helpers.tri_mesh, [1, 2], int),
        helpers.add_field_data(helpers.tet_mesh, [1, 3], int),
        helpers.add_field_data(helpers.hex_mesh, [1, 3], int),
        gmsh_periodic(),
    ],
)
@pytest.mark.parametrize("write_binary", [False, True])
@pytest.mark.parametrize("fmt_version", ["2", "4"])
def test_gmsh(mesh, write_binary, fmt_version):
    def writer(*args, **kwargs):
        return meshio.msh_io.write(
            *args, fmt_version, write_binary=write_binary, **kwargs
        )

    helpers.write_read(writer, meshio.msh_io.read, mesh, 1.0e-15)
    return


def test_generic_io():
    helpers.generic_io("test.msh")
    # With additional, insignificant suffix:
    helpers.generic_io("test.0.msh")
    return

@@ -1278,80 +1278,1141 @@
 e%5D)%0A
-@pytest.mark.parametrize(%22fmt_version%22, %5B%222%22, %224%22%5D)%0Adef test_gmsh(mesh, 
+def test_gmsh2(mesh, write_binary):%0A    def writer(*args, **kwargs):%0A        return meshio.msh_io.write(%0A            *args, %222%22, write_binary=write_binary, **kwargs%0A        )%0A%0A    helpers.write_read(writer, meshio.msh_io.read, mesh, 1.0e-15)%0A    return%0A%0A%0A@pytest.mark.parametrize(%0A    %22mesh%22,%0A    %5B%0A        helpers.tri_mesh,%0A        helpers.triangle6_mesh,%0A        helpers.quad_mesh,%0A        helpers.quad8_mesh,%0A        helpers.tri_quad_mesh,%0A        helpers.tet_mesh,%0A        helpers.tet10_mesh,%0A        helpers.hex_mesh,%0A        helpers.hex20_mesh,%0A        # helpers.add_point_data(helpers.tri_mesh, 1),%0A        # helpers.add_point_data(helpers.tri_mesh, 3),%0A        # helpers.add_point_data(helpers.tri_mesh, 9),%0A        # helpers.add_cell_data(helpers.tri_mesh, 1),%0A        # helpers.add_cell_data(helpers.tri_mesh, 3),%0A        # helpers.add_cell_data(helpers.tri_mesh, 9),%0A        # helpers.add_field_data(helpers.tri_mesh, %5B1, 2%5D, int),%0A        # helpers.add_field_data(helpers.tet_mesh, %5B1, 3%5D, int),%0A        # helpers.add_field_data(helpers.hex_mesh, %5B1, 3%5D, int),%0A        gmsh_periodic(),%0A    %5D,%0A)%0A@pytest.mark.parametrize(%22
 writ
@@ -2419,29 +2419,67 @@
 e_binary
+%22
 , 
-fmt_version
+%5BFalse, True%5D)%0Adef test_gmsh4(mesh, write_binary
 ):%0A    d
@@ -2565,19 +2565,11 @@
 gs, 
-fmt_version
+%224%22
 , wr

fix tests for gmsh4