function list_points(mapping, grid, mesh, shift, ir_only)
    shift = shift ./ 2  # true / 2 = 0.5, false / 2 = 0
    if ir_only
        return map(unique(mapping)) do i
            (grid[:, i] .+ shift) ./ mesh
        end
    else
        return map(eachslice(grid; dims = 2)) do point
            (point .+ shift) ./ mesh  # Add 1 because `mapping` index starts from 0
        end
    end
end

# From https://github.com/unkcpz/LibSymspg.jl/blob/53d2f6d/test/test_api.jl#L89-L99
@testset "Test reciprocal mesh" begin
    lattice = [
        -2.0 2.0 2.0
        2.0 -2.0 2.0
        2.0 2.0 -2.0
    ]
    positions = [0.0 0.0 0.0]'
    types = [1]
    mesh = [4, 4, 4]
    is_shift = [0, 0, 0]
    cell = Cell(lattice, positions, types)
    nir, mapping, grid_address = get_ir_reciprocal_mesh(
        cell,
        mesh,
        is_shift;
        is_time_reversal = true,
        symprec = 1e-5,
    )
    @test nir == length(unique(mapping)) == 8
end

# See https://spglib.github.io/spglib/python-spglib.html
@testset "Python example" begin
    lattice = [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]] * 5.4
    positions = [[0.875, 0.875, 0.875], [0.125, 0.125, 0.125]]
    types = [1, 1]
    cell = Cell(lattice, positions, types)
    mesh = [8, 8, 8]
    @test get_spacegroup_type(cell).international_short == "Fd-3m"
    @test get_spacegroup_type(cell).number == 227
    @testset "No shifts" begin
        shift = [0, 0, 0]
        nir, mapping, grid_address = get_ir_reciprocal_mesh(
            cell,
            mesh,
            shift;
            is_time_reversal = true,
            symprec = 1e-5,
        )
        python_mapping = [
            0,
            1,
            2,
            3,
            4,
            3,
            2,
            1,
            1,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            2,
            10,
            18,
            19,
            20,
            21,
            22,
            14,
            3,
            11,
            19,
            27,
            28,
            29,
            21,
            13,
            4,
            12,
            20,
            28,
            36,
            28,
            20,
            12,
            3,
            13,
            21,
            29,
            28,
            27,
            19,
            11,
            2,
            14,
            22,
            21,
            20,
            19,
            18,
            10,
            1,
            15,
            14,
            13,
            12,
            11,
            10,
            9,
            1,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            9,
            1,
            15,
            14,
            13,
            12,
            11,
            10,
            10,
            15,
            10,
            83,
            84,
            85,
            84,
            83,
            11,
            14,
            83,
            19,
            92,
            93,
            94,
            84,
            12,
            13,
            84,
            92,
            28,
            101,
            93,
            85,
            13,
            12,
            85,
            93,
            101,
            28,
            92,
            84,
            14,
            11,
            84,
            94,
            93,
            92,
            19,
            83,
            15,
            10,
            83,
            84,
            85,
            84,
            83,
            10,
            2,
            10,
            18,
            19,
            20,
            21,
            22,
            14,
            10,
            15,
            10,
            83,
            84,
            85,
            84,
            83,
            18,
            10,
            2,
            14,
            22,
            21,
            20,
            19,
            19,
            83,
            14,
            11,
            84,
            94,
            93,
            92,
            20,
            84,
            22,
            84,
            20,
            93,
            166,
            93,
            21,
            85,
            21,
            94,
            93,
            29,
            93,
            94,
            22,
            84,
            20,
            93,
            166,
            93,
            20,
            84,
            14,
            83,
            19,
            92,
            93,
            94,
            84,
            11,
            3,
            11,
            19,
            27,
            28,
            29,
            21,
            13,
            11,
            14,
            83,
            19,
            92,
            93,
            94,
            84,
            19,
            83,
            14,
            11,
            84,
            94,
            93,
            92,
            27,
            19,
            11,
            3,
            13,
            21,
            29,
            28,
            28,
            92,
            84,
            13,
            12,
            85,
            93,
            101,
            29,
            93,
            94,
            21,
            85,
            21,
            94,
            93,
            21,
            94,
            93,
            29,
            93,
            94,
            21,
            85,
            13,
            84,
            92,
            28,
            101,
            93,
            85,
            12,
            4,
            12,
            20,
            28,
            36,
            28,
            20,
            12,
            12,
            13,
            84,
            92,
            28,
            101,
            93,
            85,
            20,
            84,
            22,
            84,
            20,
            93,
            166,
            93,
            28,
            92,
            84,
            13,
            12,
            85,
            93,
            101,
            36,
            28,
            20,
            12,
            4,
            12,
            20,
            28,
            28,
            101,
            93,
            85,
            12,
            13,
            84,
            92,
            20,
            93,
            166,
            93,
            20,
            84,
            22,
            84,
            12,
            85,
            93,
            101,
            28,
            92,
            84,
            13,
            3,
            13,
            21,
            29,
            28,
            27,
            19,
            11,
            13,
            12,
            85,
            93,
            101,
            28,
            92,
            84,
            21,
            85,
            21,
            94,
            93,
            29,
            93,
            94,
            29,
            93,
            94,
            21,
            85,
            21,
            94,
            93,
            28,
            101,
            93,
            85,
            12,
            13,
            84,
            92,
            27,
            28,
            29,
            21,
            13,
            3,
            11,
            19,
            19,
            92,
            93,
            94,
            84,
            11,
            14,
            83,
            11,
            84,
            94,
            93,
            92,
            19,
            83,
            14,
            2,
            14,
            22,
            21,
            20,
            19,
            18,
            10,
            14,
            11,
            84,
            94,
            93,
            92,
            19,
            83,
            22,
            84,
            20,
            93,
            166,
            93,
            20,
            84,
            21,
            94,
            93,
            29,
            93,
            94,
            21,
            85,
            20,
            93,
            166,
            93,
            20,
            84,
            22,
            84,
            19,
            92,
            93,
            94,
            84,
            11,
            14,
            83,
            18,
            19,
            20,
            21,
            22,
            14,
            2,
            10,
            10,
            83,
            84,
            85,
            84,
            83,
            10,
            15,
            1,
            15,
            14,
            13,
            12,
            11,
            10,
            9,
            15,
            10,
            83,
            84,
            85,
            84,
            83,
            10,
            14,
            83,
            19,
            92,
            93,
            94,
            84,
            11,
            13,
            84,
            92,
            28,
            101,
            93,
            85,
            12,
            12,
            85,
            93,
            101,
            28,
            92,
            84,
            13,
            11,
            84,
            94,
            93,
            92,
            19,
            83,
            14,
            10,
            83,
            84,
            85,
            84,
            83,
            10,
            15,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            1,
        ]
        @test mapping == python_mapping .+ 1
        @test nir == length(unique(mapping)) == 29
        # Irreducible k-points
        python_results = [
            [0.0, 0.0, 0.0],
            [0.125, 0.0, 0.0],
            [0.25, 0.0, 0.0],
            [0.375, 0.0, 0.0],
            [0.5, 0.0, 0.0],
            [0.125, 0.125, 0.0],
            [0.25, 0.125, 0.0],
            [0.375, 0.125, 0.0],
            [0.5, 0.125, 0.0],
            [-0.375, 0.125, 0.0],
            [-0.25, 0.125, 0.0],
            [-0.125, 0.125, 0.0],
            [0.25, 0.25, 0.0],
            [0.375, 0.25, 0.0],
            [0.5, 0.25, 0.0],
            [-0.375, 0.25, 0.0],
            [-0.25, 0.25, 0.0],
            [0.375, 0.375, 0.0],
            [0.5, 0.375, 0.0],
            [-0.375, 0.375, 0.0],
            [0.5, 0.5, 0.0],
            [0.375, 0.25, 0.125],
            [0.5, 0.25, 0.125],
            [-0.375, 0.25, 0.125],
            [0.5, 0.375, 0.125],
            [-0.375, 0.375, 0.125],
            [-0.25, 0.375, 0.125],
            [-0.375, 0.5, 0.125],
            [-0.25, 0.5, 0.25],
        ]
        @test list_points(mapping, grid_address, mesh, shift, true) == python_results
        @test length(list_points(mapping, grid_address, mesh, shift, false)) == 512
    end
    @testset "With shifts" begin
        shift = [1, 1, 1]
        nir, mapping, grid_address = get_ir_reciprocal_mesh(
            cell,
            mesh,
            shift;
            is_time_reversal = true,
            symprec = 1e-5,
        )
        python_mapping = [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            1,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            2,
            10,
            18,
            19,
            20,
            21,
            22,
            23,
            3,
            11,
            19,
            27,
            28,
            29,
            30,
            31,
            4,
            12,
            20,
            28,
            36,
            37,
            38,
            31,
            5,
            13,
            21,
            29,
            37,
            45,
            46,
            23,
            6,
            14,
            22,
            30,
            38,
            46,
            54,
            15,
            7,
            15,
            23,
            31,
            31,
            23,
            15,
            7,
            1,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            9,
            73,
            74,
            75,
            76,
            77,
            78,
            54,
            10,
            74,
            82,
            83,
            84,
            85,
            86,
            46,
            11,
            75,
            83,
            91,
            92,
            93,
            94,
            38,
            12,
            76,
            84,
            92,
            100,
            101,
            94,
            30,
            13,
            77,
            85,
            93,
            101,
            109,
            86,
            22,
            14,
            78,
            86,
            94,
            94,
            86,
            78,
            14,
            15,
            54,
            46,
            38,
            30,
            22,
            14,
            6,
            2,
            10,
            18,
            19,
            20,
            21,
            22,
            23,
            10,
            74,
            82,
            83,
            84,
            85,
            86,
            46,
            18,
            82,
            146,
            147,
            148,
            149,
            109,
            45,
            19,
            83,
            147,
            155,
            156,
            157,
            101,
            37,
            20,
            84,
            148,
            156,
            164,
            157,
            93,
            29,
            21,
            85,
            149,
            157,
            157,
            149,
            85,
            21,
            22,
            86,
            109,
            101,
            93,
            85,
            77,
            13,
            23,
            46,
            45,
            37,
            29,
            21,
            13,
            5,
            3,
            11,
            19,
            27,
            28,
            29,
            30,
            31,
            11,
            75,
            83,
            91,
            92,
            93,
            94,
            38,
            19,
            83,
            147,
            155,
            156,
            157,
            101,
            37,
            27,
            91,
            155,
            219,
            220,
            164,
            100,
            36,
            28,
            92,
            156,
            220,
            220,
            156,
            92,
            28,
            29,
            93,
            157,
            164,
            156,
            148,
            84,
            20,
            30,
            94,
            101,
            100,
            92,
            84,
            76,
            12,
            31,
            38,
            37,
            36,
            28,
            20,
            12,
            4,
            4,
            12,
            20,
            28,
            36,
            37,
            38,
            31,
            12,
            76,
            84,
            92,
            100,
            101,
            94,
            30,
            20,
            84,
            148,
            156,
            164,
            157,
            93,
            29,
            28,
            92,
            156,
            220,
            220,
            156,
            92,
            28,
            36,
            100,
            164,
            220,
            219,
            155,
            91,
            27,
            37,
            101,
            157,
            156,
            155,
            147,
            83,
            19,
            38,
            94,
            93,
            92,
            91,
            83,
            75,
            11,
            31,
            30,
            29,
            28,
            27,
            19,
            11,
            3,
            5,
            13,
            21,
            29,
            37,
            45,
            46,
            23,
            13,
            77,
            85,
            93,
            101,
            109,
            86,
            22,
            21,
            85,
            149,
            157,
            157,
            149,
            85,
            21,
            29,
            93,
            157,
            164,
            156,
            148,
            84,
            20,
            37,
            101,
            157,
            156,
            155,
            147,
            83,
            19,
            45,
            109,
            149,
            148,
            147,
            146,
            82,
            18,
            46,
            86,
            85,
            84,
            83,
            82,
            74,
            10,
            23,
            22,
            21,
            20,
            19,
            18,
            10,
            2,
            6,
            14,
            22,
            30,
            38,
            46,
            54,
            15,
            14,
            78,
            86,
            94,
            94,
            86,
            78,
            14,
            22,
            86,
            109,
            101,
            93,
            85,
            77,
            13,
            30,
            94,
            101,
            100,
            92,
            84,
            76,
            12,
            38,
            94,
            93,
            92,
            91,
            83,
            75,
            11,
            46,
            86,
            85,
            84,
            83,
            82,
            74,
            10,
            54,
            78,
            77,
            76,
            75,
            74,
            73,
            9,
            15,
            14,
            13,
            12,
            11,
            10,
            9,
            1,
            7,
            15,
            23,
            31,
            31,
            23,
            15,
            7,
            15,
            54,
            46,
            38,
            30,
            22,
            14,
            6,
            23,
            46,
            45,
            37,
            29,
            21,
            13,
            5,
            31,
            38,
            37,
            36,
            28,
            20,
            12,
            4,
            31,
            30,
            29,
            28,
            27,
            19,
            11,
            3,
            23,
            22,
            21,
            20,
            19,
            18,
            10,
            2,
            15,
            14,
            13,
            12,
            11,
            10,
            9,
            1,
            7,
            6,
            5,
            4,
            3,
            2,
            1,
            0,
        ]
        @test mapping == python_mapping .+ 1
        @test nir == length(unique(mapping)) == 60
        # Irreducible k-points
        python_results = [
            [0.0625, 0.0625, 0.0625],
            [0.1875, 0.0625, 0.0625],
            [0.3125, 0.0625, 0.0625],
            [0.4375, 0.0625, 0.0625],
            [0.5625, 0.0625, 0.0625],
            [-0.3125, 0.0625, 0.0625],
            [-0.1875, 0.0625, 0.0625],
            [-0.0625, 0.0625, 0.0625],
            [0.1875, 0.1875, 0.0625],
            [0.3125, 0.1875, 0.0625],
            [0.4375, 0.1875, 0.0625],
            [0.5625, 0.1875, 0.0625],
            [-0.3125, 0.1875, 0.0625],
            [-0.1875, 0.1875, 0.0625],
            [-0.0625, 0.1875, 0.0625],
            [0.3125, 0.3125, 0.0625],
            [0.4375, 0.3125, 0.0625],
            [0.5625, 0.3125, 0.0625],
            [-0.3125, 0.3125, 0.0625],
            [-0.1875, 0.3125, 0.0625],
            [-0.0625, 0.3125, 0.0625],
            [0.4375, 0.4375, 0.0625],
            [0.5625, 0.4375, 0.0625],
            [-0.3125, 0.4375, 0.0625],
            [-0.1875, 0.4375, 0.0625],
            [-0.0625, 0.4375, 0.0625],
            [0.5625, 0.5625, 0.0625],
            [-0.3125, 0.5625, 0.0625],
            [-0.1875, 0.5625, 0.0625],
            [-0.3125, -0.3125, 0.0625],
            [-0.1875, -0.3125, 0.0625],
            [-0.1875, -0.1875, 0.0625],
            [0.1875, 0.1875, 0.1875],
            [0.3125, 0.1875, 0.1875],
            [0.4375, 0.1875, 0.1875],
            [0.5625, 0.1875, 0.1875],
            [-0.3125, 0.1875, 0.1875],
            [-0.1875, 0.1875, 0.1875],
            [0.3125, 0.3125, 0.1875],
            [0.4375, 0.3125, 0.1875],
            [0.5625, 0.3125, 0.1875],
            [-0.3125, 0.3125, 0.1875],
            [-0.1875, 0.3125, 0.1875],
            [0.4375, 0.4375, 0.1875],
            [0.5625, 0.4375, 0.1875],
            [-0.3125, 0.4375, 0.1875],
            [-0.1875, 0.4375, 0.1875],
            [0.5625, 0.5625, 0.1875],
            [-0.3125, 0.5625, 0.1875],
            [-0.3125, -0.3125, 0.1875],
            [0.3125, 0.3125, 0.3125],
            [0.4375, 0.3125, 0.3125],
            [0.5625, 0.3125, 0.3125],
            [-0.3125, 0.3125, 0.3125],
            [0.4375, 0.4375, 0.3125],
            [0.5625, 0.4375, 0.3125],
            [-0.3125, 0.4375, 0.3125],
            [0.5625, 0.5625, 0.3125],
            [0.4375, 0.4375, 0.4375],
            [0.5625, 0.4375, 0.4375],
        ]
        @test list_points(mapping, grid_address, mesh, shift, true) == python_results
        @test length(list_points(mapping, grid_address, mesh, shift, false)) == 512
    end
end

@testset "Test rutile structure" begin
    lattice = [
        4 0 0
        0 4 0
        0 0 3
    ]
    positions = [
        0.0 0.5 0.3 0.7 0.2 0.8
        0.0 0.5 0.3 0.7 0.8 0.2
        0.0 0.5 0.0 0.0 0.5 0.5
    ]
    types = [14, 14, 8, 8, 8, 8]
    rutile = Cell(lattice, positions, types)
    @testset "No shift" begin
        shift = [0, 0, 0]
        mesh = [6, 6, 6]
        nir, mapping, grid_address =
            get_ir_reciprocal_mesh(rutile, mesh; is_time_reversal = true, symprec = 1e-5)
        @test nir == length(unique(mapping)) == 40
        @test list_points(mapping, grid_address, mesh, shift, true) ≈ [
            [0.0, 0.0, 0.0],
            [0.16666667, 0.0, 0.0],
            [0.33333333, 0.0, 0.0],
            [0.5, 0.0, 0.0],
            [0.16666667, 0.16666667, 0.0],
            [0.33333333, 0.16666667, 0.0],
            [0.5, 0.16666667, 0.0],
            [0.33333333, 0.33333333, 0.0],
            [0.5, 0.33333333, 0.0],
            [0.5, 0.5, 0.0],
            [0.0, 0.0, 0.16666667],
            [0.16666667, 0.0, 0.16666667],
            [0.33333333, 0.0, 0.16666667],
            [0.5, 0.0, 0.16666667],
            [0.16666667, 0.16666667, 0.16666667],
            [0.33333333, 0.16666667, 0.16666667],
            [0.5, 0.16666667, 0.16666667],
            [0.33333333, 0.33333333, 0.16666667],
            [0.5, 0.33333333, 0.16666667],
            [0.5, 0.5, 0.16666667],
            [0.0, 0.0, 0.33333333],
            [0.16666667, 0.0, 0.33333333],
            [0.33333333, 0.0, 0.33333333],
            [0.5, 0.0, 0.33333333],
            [0.16666667, 0.16666667, 0.33333333],
            [0.33333333, 0.16666667, 0.33333333],
            [0.5, 0.16666667, 0.33333333],
            [0.33333333, 0.33333333, 0.33333333],
            [0.5, 0.33333333, 0.33333333],
            [0.5, 0.5, 0.33333333],
            [0.0, 0.0, 0.5],
            [0.16666667, 0.0, 0.5],
            [0.33333333, 0.0, 0.5],
            [0.5, 0.0, 0.5],
            [0.16666667, 0.16666667, 0.5],
            [0.33333333, 0.16666667, 0.5],
            [0.5, 0.16666667, 0.5],
            [0.33333333, 0.33333333, 0.5],
            [0.5, 0.33333333, 0.5],
            [0.5, 0.5, 0.5],
        ]
        @test list_points(mapping, grid_address, mesh, shift, false) ≈ [
            [0.0, 0.0, 0.0],
            [0.16666667, 0.0, 0.0],
            [0.33333333, 0.0, 0.0],
            [0.5, 0.0, 0.0],
            [-0.33333333, 0.0, 0.0],
            [-0.16666667, 0.0, 0.0],
            [0.0, 0.16666667, 0.0],
            [0.16666667, 0.16666667, 0.0],
            [0.33333333, 0.16666667, 0.0],
            [0.5, 0.16666667, 0.0],
            [-0.33333333, 0.16666667, 0.0],
            [-0.16666667, 0.16666667, 0.0],
            [0.0, 0.33333333, 0.0],
            [0.16666667, 0.33333333, 0.0],
            [0.33333333, 0.33333333, 0.0],
            [0.5, 0.33333333, 0.0],
            [-0.33333333, 0.33333333, 0.0],
            [-0.16666667, 0.33333333, 0.0],
            [0.0, 0.5, 0.0],
            [0.16666667, 0.5, 0.0],
            [0.33333333, 0.5, 0.0],
            [0.5, 0.5, 0.0],
            [-0.33333333, 0.5, 0.0],
            [-0.16666667, 0.5, 0.0],
            [0.0, -0.33333333, 0.0],
            [0.16666667, -0.33333333, 0.0],
            [0.33333333, -0.33333333, 0.0],
            [0.5, -0.33333333, 0.0],
            [-0.33333333, -0.33333333, 0.0],
            [-0.16666667, -0.33333333, 0.0],
            [0.0, -0.16666667, 0.0],
            [0.16666667, -0.16666667, 0.0],
            [0.33333333, -0.16666667, 0.0],
            [0.5, -0.16666667, 0.0],
            [-0.33333333, -0.16666667, 0.0],
            [-0.16666667, -0.16666667, 0.0],
            [0.0, 0.0, 0.16666667],
            [0.16666667, 0.0, 0.16666667],
            [0.33333333, 0.0, 0.16666667],
            [0.5, 0.0, 0.16666667],
            [-0.33333333, 0.0, 0.16666667],
            [-0.16666667, 0.0, 0.16666667],
            [0.0, 0.16666667, 0.16666667],
            [0.16666667, 0.16666667, 0.16666667],
            [0.33333333, 0.16666667, 0.16666667],
            [0.5, 0.16666667, 0.16666667],
            [-0.33333333, 0.16666667, 0.16666667],
            [-0.16666667, 0.16666667, 0.16666667],
            [0.0, 0.33333333, 0.16666667],
            [0.16666667, 0.33333333, 0.16666667],
            [0.33333333, 0.33333333, 0.16666667],
            [0.5, 0.33333333, 0.16666667],
            [-0.33333333, 0.33333333, 0.16666667],
            [-0.16666667, 0.33333333, 0.16666667],
            [0.0, 0.5, 0.16666667],
            [0.16666667, 0.5, 0.16666667],
            [0.33333333, 0.5, 0.16666667],
            [0.5, 0.5, 0.16666667],
            [-0.33333333, 0.5, 0.16666667],
            [-0.16666667, 0.5, 0.16666667],
            [0.0, -0.33333333, 0.16666667],
            [0.16666667, -0.33333333, 0.16666667],
            [0.33333333, -0.33333333, 0.16666667],
            [0.5, -0.33333333, 0.16666667],
            [-0.33333333, -0.33333333, 0.16666667],
            [-0.16666667, -0.33333333, 0.16666667],
            [0.0, -0.16666667, 0.16666667],
            [0.16666667, -0.16666667, 0.16666667],
            [0.33333333, -0.16666667, 0.16666667],
            [0.5, -0.16666667, 0.16666667],
            [-0.33333333, -0.16666667, 0.16666667],
            [-0.16666667, -0.16666667, 0.16666667],
            [0.0, 0.0, 0.33333333],
            [0.16666667, 0.0, 0.33333333],
            [0.33333333, 0.0, 0.33333333],
            [0.5, 0.0, 0.33333333],
            [-0.33333333, 0.0, 0.33333333],
            [-0.16666667, 0.0, 0.33333333],
            [0.0, 0.16666667, 0.33333333],
            [0.16666667, 0.16666667, 0.33333333],
            [0.33333333, 0.16666667, 0.33333333],
            [0.5, 0.16666667, 0.33333333],
            [-0.33333333, 0.16666667, 0.33333333],
            [-0.16666667, 0.16666667, 0.33333333],
            [0.0, 0.33333333, 0.33333333],
            [0.16666667, 0.33333333, 0.33333333],
            [0.33333333, 0.33333333, 0.33333333],
            [0.5, 0.33333333, 0.33333333],
            [-0.33333333, 0.33333333, 0.33333333],
            [-0.16666667, 0.33333333, 0.33333333],
            [0.0, 0.5, 0.33333333],
            [0.16666667, 0.5, 0.33333333],
            [0.33333333, 0.5, 0.33333333],
            [0.5, 0.5, 0.33333333],
            [-0.33333333, 0.5, 0.33333333],
            [-0.16666667, 0.5, 0.33333333],
            [0.0, -0.33333333, 0.33333333],
            [0.16666667, -0.33333333, 0.33333333],
            [0.33333333, -0.33333333, 0.33333333],
            [0.5, -0.33333333, 0.33333333],
            [-0.33333333, -0.33333333, 0.33333333],
            [-0.16666667, -0.33333333, 0.33333333],
            [0.0, -0.16666667, 0.33333333],
            [0.16666667, -0.16666667, 0.33333333],
            [0.33333333, -0.16666667, 0.33333333],
            [0.5, -0.16666667, 0.33333333],
            [-0.33333333, -0.16666667, 0.33333333],
            [-0.16666667, -0.16666667, 0.33333333],
            [0.0, 0.0, 0.5],
            [0.16666667, 0.0, 0.5],
            [0.33333333, 0.0, 0.5],
            [0.5, 0.0, 0.5],
            [-0.33333333, 0.0, 0.5],
            [-0.16666667, 0.0, 0.5],
            [0.0, 0.16666667, 0.5],
            [0.16666667, 0.16666667, 0.5],
            [0.33333333, 0.16666667, 0.5],
            [0.5, 0.16666667, 0.5],
            [-0.33333333, 0.16666667, 0.5],
            [-0.16666667, 0.16666667, 0.5],
            [0.0, 0.33333333, 0.5],
            [0.16666667, 0.33333333, 0.5],
            [0.33333333, 0.33333333, 0.5],
            [0.5, 0.33333333, 0.5],
            [-0.33333333, 0.33333333, 0.5],
            [-0.16666667, 0.33333333, 0.5],
            [0.0, 0.5, 0.5],
            [0.16666667, 0.5, 0.5],
            [0.33333333, 0.5, 0.5],
            [0.5, 0.5, 0.5],
            [-0.33333333, 0.5, 0.5],
            [-0.16666667, 0.5, 0.5],
            [0.0, -0.33333333, 0.5],
            [0.16666667, -0.33333333, 0.5],
            [0.33333333, -0.33333333, 0.5],
            [0.5, -0.33333333, 0.5],
            [-0.33333333, -0.33333333, 0.5],
            [-0.16666667, -0.33333333, 0.5],
            [0.0, -0.16666667, 0.5],
            [0.16666667, -0.16666667, 0.5],
            [0.33333333, -0.16666667, 0.5],
            [0.5, -0.16666667, 0.5],
            [-0.33333333, -0.16666667, 0.5],
            [-0.16666667, -0.16666667, 0.5],
            [0.0, 0.0, -0.33333333],
            [0.16666667, 0.0, -0.33333333],
            [0.33333333, 0.0, -0.33333333],
            [0.5, 0.0, -0.33333333],
            [-0.33333333, 0.0, -0.33333333],
            [-0.16666667, 0.0, -0.33333333],
            [0.0, 0.16666667, -0.33333333],
            [0.16666667, 0.16666667, -0.33333333],
            [0.33333333, 0.16666667, -0.33333333],
            [0.5, 0.16666667, -0.33333333],
            [-0.33333333, 0.16666667, -0.33333333],
            [-0.16666667, 0.16666667, -0.33333333],
            [0.0, 0.33333333, -0.33333333],
            [0.16666667, 0.33333333, -0.33333333],
            [0.33333333, 0.33333333, -0.33333333],
            [0.5, 0.33333333, -0.33333333],
            [-0.33333333, 0.33333333, -0.33333333],
            [-0.16666667, 0.33333333, -0.33333333],
            [0.0, 0.5, -0.33333333],
            [0.16666667, 0.5, -0.33333333],
            [0.33333333, 0.5, -0.33333333],
            [0.5, 0.5, -0.33333333],
            [-0.33333333, 0.5, -0.33333333],
            [-0.16666667, 0.5, -0.33333333],
            [0.0, -0.33333333, -0.33333333],
            [0.16666667, -0.33333333, -0.33333333],
            [0.33333333, -0.33333333, -0.33333333],
            [0.5, -0.33333333, -0.33333333],
            [-0.33333333, -0.33333333, -0.33333333],
            [-0.16666667, -0.33333333, -0.33333333],
            [0.0, -0.16666667, -0.33333333],
            [0.16666667, -0.16666667, -0.33333333],
            [0.33333333, -0.16666667, -0.33333333],
            [0.5, -0.16666667, -0.33333333],
            [-0.33333333, -0.16666667, -0.33333333],
            [-0.16666667, -0.16666667, -0.33333333],
            [0.0, 0.0, -0.16666667],
            [0.16666667, 0.0, -0.16666667],
            [0.33333333, 0.0, -0.16666667],
            [0.5, 0.0, -0.16666667],
            [-0.33333333, 0.0, -0.16666667],
            [-0.16666667, 0.0, -0.16666667],
            [0.0, 0.16666667, -0.16666667],
            [0.16666667, 0.16666667, -0.16666667],
            [0.33333333, 0.16666667, -0.16666667],
            [0.5, 0.16666667, -0.16666667],
            [-0.33333333, 0.16666667, -0.16666667],
            [-0.16666667, 0.16666667, -0.16666667],
            [0.0, 0.33333333, -0.16666667],
            [0.16666667, 0.33333333, -0.16666667],
            [0.33333333, 0.33333333, -0.16666667],
            [0.5, 0.33333333, -0.16666667],
            [-0.33333333, 0.33333333, -0.16666667],
            [-0.16666667, 0.33333333, -0.16666667],
            [0.0, 0.5, -0.16666667],
            [0.16666667, 0.5, -0.16666667],
            [0.33333333, 0.5, -0.16666667],
            [0.5, 0.5, -0.16666667],
            [-0.33333333, 0.5, -0.16666667],
            [-0.16666667, 0.5, -0.16666667],
            [0.0, -0.33333333, -0.16666667],
            [0.16666667, -0.33333333, -0.16666667],
            [0.33333333, -0.33333333, -0.16666667],
            [0.5, -0.33333333, -0.16666667],
            [-0.33333333, -0.33333333, -0.16666667],
            [-0.16666667, -0.33333333, -0.16666667],
            [0.0, -0.16666667, -0.16666667],
            [0.16666667, -0.16666667, -0.16666667],
            [0.33333333, -0.16666667, -0.16666667],
            [0.5, -0.16666667, -0.16666667],
            [-0.33333333, -0.16666667, -0.16666667],
            [-0.16666667, -0.16666667, -0.16666667],
        ]
    end
    @testset "With shift" begin
        shift = trues(3)
        @testset "6×6×6" begin
            mesh = [6, 6, 6]
            nir, mapping, grid_address = get_ir_reciprocal_mesh(
                rutile,
                mesh,
                shift;
                is_time_reversal = true,
                symprec = 1e-5,
            )
            @test nir == length(unique(mapping)) == 18
            @test list_points(mapping, grid_address, mesh, shift, true) ≈ [
                [0.08333333, 0.08333333, 0.08333333],
                [0.25, 0.08333333, 0.08333333],
                [0.41666667, 0.08333333, 0.08333333],
                [0.25, 0.25, 0.08333333],
                [0.41666667, 0.25, 0.08333333],
                [0.41666667, 0.41666667, 0.08333333],
                [0.08333333, 0.08333333, 0.25],
                [0.25, 0.08333333, 0.25],
                [0.41666667, 0.08333333, 0.25],
                [0.25, 0.25, 0.25],
                [0.41666667, 0.25, 0.25],
                [0.41666667, 0.41666667, 0.25],
                [0.08333333, 0.08333333, 0.41666667],
                [0.25, 0.08333333, 0.41666667],
                [0.41666667, 0.08333333, 0.41666667],
                [0.25, 0.25, 0.41666667],
                [0.41666667, 0.25, 0.41666667],
                [0.41666667, 0.41666667, 0.41666667],
            ]
        end
        @testset "4×4×4" begin
            mesh = [4, 4, 4]
            nir, mapping, grid_address = get_ir_reciprocal_mesh(
                rutile,
                mesh,
                shift;
                is_time_reversal = true,
                symprec = 1e-5,
            )
            @test nir == length(unique(mapping)) == 6
            @test list_points(mapping, grid_address, mesh, shift, true) == [
                [0.125, 0.125, 0.125],
                [0.375, 0.125, 0.125],
                [0.375, 0.375, 0.125],
                [0.125, 0.125, 0.375],
                [0.375, 0.125, 0.375],
                [0.375, 0.375, 0.375],
            ]
            @test list_points(mapping, grid_address, mesh, shift, false) == [
                [0.125, 0.125, 0.125],
                [0.375, 0.125, 0.125],
                [0.625, 0.125, 0.125],
                [-0.125, 0.125, 0.125],
                [0.125, 0.375, 0.125],
                [0.375, 0.375, 0.125],
                [0.625, 0.375, 0.125],
                [-0.125, 0.375, 0.125],
                [0.125, 0.625, 0.125],
                [0.375, 0.625, 0.125],
                [0.625, 0.625, 0.125],
                [-0.125, 0.625, 0.125],
                [0.125, -0.125, 0.125],
                [0.375, -0.125, 0.125],
                [0.625, -0.125, 0.125],
                [-0.125, -0.125, 0.125],
                [0.125, 0.125, 0.375],
                [0.375, 0.125, 0.375],
                [0.625, 0.125, 0.375],
                [-0.125, 0.125, 0.375],
                [0.125, 0.375, 0.375],
                [0.375, 0.375, 0.375],
                [0.625, 0.375, 0.375],
                [-0.125, 0.375, 0.375],
                [0.125, 0.625, 0.375],
                [0.375, 0.625, 0.375],
                [0.625, 0.625, 0.375],
                [-0.125, 0.625, 0.375],
                [0.125, -0.125, 0.375],
                [0.375, -0.125, 0.375],
                [0.625, -0.125, 0.375],
                [-0.125, -0.125, 0.375],
                [0.125, 0.125, 0.625],
                [0.375, 0.125, 0.625],
                [0.625, 0.125, 0.625],
                [-0.125, 0.125, 0.625],
                [0.125, 0.375, 0.625],
                [0.375, 0.375, 0.625],
                [0.625, 0.375, 0.625],
                [-0.125, 0.375, 0.625],
                [0.125, 0.625, 0.625],
                [0.375, 0.625, 0.625],
                [0.625, 0.625, 0.625],
                [-0.125, 0.625, 0.625],
                [0.125, -0.125, 0.625],
                [0.375, -0.125, 0.625],
                [0.625, -0.125, 0.625],
                [-0.125, -0.125, 0.625],
                [0.125, 0.125, -0.125],
                [0.375, 0.125, -0.125],
                [0.625, 0.125, -0.125],
                [-0.125, 0.125, -0.125],
                [0.125, 0.375, -0.125],
                [0.375, 0.375, -0.125],
                [0.625, 0.375, -0.125],
                [-0.125, 0.375, -0.125],
                [0.125, 0.625, -0.125],
                [0.375, 0.625, -0.125],
                [0.625, 0.625, -0.125],
                [-0.125, 0.625, -0.125],
                [0.125, -0.125, -0.125],
                [0.375, -0.125, -0.125],
                [0.625, -0.125, -0.125],
                [-0.125, -0.125, -0.125],
            ]
        end
        @testset "5×5×5" begin
            mesh = [5, 5, 5]
            nir, mapping, grid_address = get_ir_reciprocal_mesh(
                rutile,
                mesh,
                shift;
                is_time_reversal = true,
                symprec = 1e-5,
            )
            @test nir == length(unique(mapping)) == 18
            @test list_points(mapping, grid_address, mesh, shift, true) == [
                [0.1, 0.1, 0.1],
                [0.3, 0.1, 0.1],
                [0.5, 0.1, 0.1],
                [0.3, 0.3, 0.1],
                [0.5, 0.3, 0.1],
                [0.5, 0.5, 0.1],
                [0.1, 0.1, 0.3],
                [0.3, 0.1, 0.3],
                [0.5, 0.1, 0.3],
                [0.3, 0.3, 0.3],
                [0.5, 0.3, 0.3],
                [0.5, 0.5, 0.3],
                [0.1, 0.1, 0.5],
                [0.3, 0.1, 0.5],
                [0.5, 0.1, 0.5],
                [0.3, 0.3, 0.5],
                [0.5, 0.3, 0.5],
                [0.5, 0.5, 0.5],
            ]
            @test list_points(mapping, grid_address, mesh, shift, false) == [
                [0.1, 0.1, 0.1],
                [0.3, 0.1, 0.1],
                [0.5, 0.1, 0.1],
                [-0.3, 0.1, 0.1],
                [-0.1, 0.1, 0.1],
                [0.1, 0.3, 0.1],
                [0.3, 0.3, 0.1],
                [0.5, 0.3, 0.1],
                [-0.3, 0.3, 0.1],
                [-0.1, 0.3, 0.1],
                [0.1, 0.5, 0.1],
                [0.3, 0.5, 0.1],
                [0.5, 0.5, 0.1],
                [-0.3, 0.5, 0.1],
                [-0.1, 0.5, 0.1],
                [0.1, -0.3, 0.1],
                [0.3, -0.3, 0.1],
                [0.5, -0.3, 0.1],
                [-0.3, -0.3, 0.1],
                [-0.1, -0.3, 0.1],
                [0.1, -0.1, 0.1],
                [0.3, -0.1, 0.1],
                [0.5, -0.1, 0.1],
                [-0.3, -0.1, 0.1],
                [-0.1, -0.1, 0.1],
                [0.1, 0.1, 0.3],
                [0.3, 0.1, 0.3],
                [0.5, 0.1, 0.3],
                [-0.3, 0.1, 0.3],
                [-0.1, 0.1, 0.3],
                [0.1, 0.3, 0.3],
                [0.3, 0.3, 0.3],
                [0.5, 0.3, 0.3],
                [-0.3, 0.3, 0.3],
                [-0.1, 0.3, 0.3],
                [0.1, 0.5, 0.3],
                [0.3, 0.5, 0.3],
                [0.5, 0.5, 0.3],
                [-0.3, 0.5, 0.3],
                [-0.1, 0.5, 0.3],
                [0.1, -0.3, 0.3],
                [0.3, -0.3, 0.3],
                [0.5, -0.3, 0.3],
                [-0.3, -0.3, 0.3],
                [-0.1, -0.3, 0.3],
                [0.1, -0.1, 0.3],
                [0.3, -0.1, 0.3],
                [0.5, -0.1, 0.3],
                [-0.3, -0.1, 0.3],
                [-0.1, -0.1, 0.3],
                [0.1, 0.1, 0.5],
                [0.3, 0.1, 0.5],
                [0.5, 0.1, 0.5],
                [-0.3, 0.1, 0.5],
                [-0.1, 0.1, 0.5],
                [0.1, 0.3, 0.5],
                [0.3, 0.3, 0.5],
                [0.5, 0.3, 0.5],
                [-0.3, 0.3, 0.5],
                [-0.1, 0.3, 0.5],
                [0.1, 0.5, 0.5],
                [0.3, 0.5, 0.5],
                [0.5, 0.5, 0.5],
                [-0.3, 0.5, 0.5],
                [-0.1, 0.5, 0.5],
                [0.1, -0.3, 0.5],
                [0.3, -0.3, 0.5],
                [0.5, -0.3, 0.5],
                [-0.3, -0.3, 0.5],
                [-0.1, -0.3, 0.5],
                [0.1, -0.1, 0.5],
                [0.3, -0.1, 0.5],
                [0.5, -0.1, 0.5],
                [-0.3, -0.1, 0.5],
                [-0.1, -0.1, 0.5],
                [0.1, 0.1, -0.3],
                [0.3, 0.1, -0.3],
                [0.5, 0.1, -0.3],
                [-0.3, 0.1, -0.3],
                [-0.1, 0.1, -0.3],
                [0.1, 0.3, -0.3],
                [0.3, 0.3, -0.3],
                [0.5, 0.3, -0.3],
                [-0.3, 0.3, -0.3],
                [-0.1, 0.3, -0.3],
                [0.1, 0.5, -0.3],
                [0.3, 0.5, -0.3],
                [0.5, 0.5, -0.3],
                [-0.3, 0.5, -0.3],
                [-0.1, 0.5, -0.3],
                [0.1, -0.3, -0.3],
                [0.3, -0.3, -0.3],
                [0.5, -0.3, -0.3],
                [-0.3, -0.3, -0.3],
                [-0.1, -0.3, -0.3],
                [0.1, -0.1, -0.3],
                [0.3, -0.1, -0.3],
                [0.5, -0.1, -0.3],
                [-0.3, -0.1, -0.3],
                [-0.1, -0.1, -0.3],
                [0.1, 0.1, -0.1],
                [0.3, 0.1, -0.1],
                [0.5, 0.1, -0.1],
                [-0.3, 0.1, -0.1],
                [-0.1, 0.1, -0.1],
                [0.1, 0.3, -0.1],
                [0.3, 0.3, -0.1],
                [0.5, 0.3, -0.1],
                [-0.3, 0.3, -0.1],
                [-0.1, 0.3, -0.1],
                [0.1, 0.5, -0.1],
                [0.3, 0.5, -0.1],
                [0.5, 0.5, -0.1],
                [-0.3, 0.5, -0.1],
                [-0.1, 0.5, -0.1],
                [0.1, -0.3, -0.1],
                [0.3, -0.3, -0.1],
                [0.5, -0.3, -0.1],
                [-0.3, -0.3, -0.1],
                [-0.1, -0.3, -0.1],
                [0.1, -0.1, -0.1],
                [0.3, -0.1, -0.1],
                [0.5, -0.1, -0.1],
                [-0.3, -0.1, -0.1],
                [-0.1, -0.1, -0.1],
            ]
        end
    end
end

@testset "Test distorted silicon structure" begin
    lattice = [
        4.01 0 0
        0 4 0
        0 0 3.99
    ]
    positions = [
        0.001 0 0
        0 0.5 0.5
        0.5 0 0.5
        0.5 0.5 0
        0.25 0.25 0.251
        0.25 0.75 0.75
        0.75 0.25 0.75
        0.75 0.75 0.25
    ]
    types = [14, 14, 14, 14, 14, 14, 14, 14]
    silicon_dist = Cell(lattice, positions, types)
    mesh = [6, 6, 6]
    nir, mapping, grid_address =
        get_ir_reciprocal_mesh(silicon_dist, mesh; is_time_reversal = true, symprec = 1e-5)
    @test nir == length(unique(mapping)) == 112
    @test list_points(mapping, grid_address, mesh, [0, 0, 0], true) ≈ [
        [0.0, 0.0, 0.0],
        [0.16666667, 0.0, 0.0],
        [0.33333333, 0.0, 0.0],
        [0.5, 0.0, 0.0],
        [0.0, 0.16666667, 0.0],
        [0.16666667, 0.16666667, 0.0],
        [0.33333333, 0.16666667, 0.0],
        [0.5, 0.16666667, 0.0],
        [-0.33333333, 0.16666667, 0.0],
        [-0.16666667, 0.16666667, 0.0],
        [0.0, 0.33333333, 0.0],
        [0.16666667, 0.33333333, 0.0],
        [0.33333333, 0.33333333, 0.0],
        [0.5, 0.33333333, 0.0],
        [-0.33333333, 0.33333333, 0.0],
        [-0.16666667, 0.33333333, 0.0],
        [0.0, 0.5, 0.0],
        [0.16666667, 0.5, 0.0],
        [0.33333333, 0.5, 0.0],
        [0.5, 0.5, 0.0],
        [0.0, 0.0, 0.16666667],
        [0.16666667, 0.0, 0.16666667],
        [0.33333333, 0.0, 0.16666667],
        [0.5, 0.0, 0.16666667],
        [-0.33333333, 0.0, 0.16666667],
        [-0.16666667, 0.0, 0.16666667],
        [0.0, 0.16666667, 0.16666667],
        [0.16666667, 0.16666667, 0.16666667],
        [0.33333333, 0.16666667, 0.16666667],
        [0.5, 0.16666667, 0.16666667],
        [-0.33333333, 0.16666667, 0.16666667],
        [-0.16666667, 0.16666667, 0.16666667],
        [0.0, 0.33333333, 0.16666667],
        [0.16666667, 0.33333333, 0.16666667],
        [0.33333333, 0.33333333, 0.16666667],
        [0.5, 0.33333333, 0.16666667],
        [-0.33333333, 0.33333333, 0.16666667],
        [-0.16666667, 0.33333333, 0.16666667],
        [0.0, 0.5, 0.16666667],
        [0.16666667, 0.5, 0.16666667],
        [0.33333333, 0.5, 0.16666667],
        [0.5, 0.5, 0.16666667],
        [-0.33333333, 0.5, 0.16666667],
        [-0.16666667, 0.5, 0.16666667],
        [0.0, -0.33333333, 0.16666667],
        [0.16666667, -0.33333333, 0.16666667],
        [0.33333333, -0.33333333, 0.16666667],
        [0.5, -0.33333333, 0.16666667],
        [-0.33333333, -0.33333333, 0.16666667],
        [-0.16666667, -0.33333333, 0.16666667],
        [0.0, -0.16666667, 0.16666667],
        [0.16666667, -0.16666667, 0.16666667],
        [0.33333333, -0.16666667, 0.16666667],
        [0.5, -0.16666667, 0.16666667],
        [-0.33333333, -0.16666667, 0.16666667],
        [-0.16666667, -0.16666667, 0.16666667],
        [0.0, 0.0, 0.33333333],
        [0.16666667, 0.0, 0.33333333],
        [0.33333333, 0.0, 0.33333333],
        [0.5, 0.0, 0.33333333],
        [-0.33333333, 0.0, 0.33333333],
        [-0.16666667, 0.0, 0.33333333],
        [0.0, 0.16666667, 0.33333333],
        [0.16666667, 0.16666667, 0.33333333],
        [0.33333333, 0.16666667, 0.33333333],
        [0.5, 0.16666667, 0.33333333],
        [-0.33333333, 0.16666667, 0.33333333],
        [-0.16666667, 0.16666667, 0.33333333],
        [0.0, 0.33333333, 0.33333333],
        [0.16666667, 0.33333333, 0.33333333],
        [0.33333333, 0.33333333, 0.33333333],
        [0.5, 0.33333333, 0.33333333],
        [-0.33333333, 0.33333333, 0.33333333],
        [-0.16666667, 0.33333333, 0.33333333],
        [0.0, 0.5, 0.33333333],
        [0.16666667, 0.5, 0.33333333],
        [0.33333333, 0.5, 0.33333333],
        [0.5, 0.5, 0.33333333],
        [-0.33333333, 0.5, 0.33333333],
        [-0.16666667, 0.5, 0.33333333],
        [0.0, -0.33333333, 0.33333333],
        [0.16666667, -0.33333333, 0.33333333],
        [0.33333333, -0.33333333, 0.33333333],
        [0.5, -0.33333333, 0.33333333],
        [-0.33333333, -0.33333333, 0.33333333],
        [-0.16666667, -0.33333333, 0.33333333],
        [0.0, -0.16666667, 0.33333333],
        [0.16666667, -0.16666667, 0.33333333],
        [0.33333333, -0.16666667, 0.33333333],
        [0.5, -0.16666667, 0.33333333],
        [-0.33333333, -0.16666667, 0.33333333],
        [-0.16666667, -0.16666667, 0.33333333],
        [0.0, 0.0, 0.5],
        [0.16666667, 0.0, 0.5],
        [0.33333333, 0.0, 0.5],
        [0.5, 0.0, 0.5],
        [0.0, 0.16666667, 0.5],
        [0.16666667, 0.16666667, 0.5],
        [0.33333333, 0.16666667, 0.5],
        [0.5, 0.16666667, 0.5],
        [-0.33333333, 0.16666667, 0.5],
        [-0.16666667, 0.16666667, 0.5],
        [0.0, 0.33333333, 0.5],
        [0.16666667, 0.33333333, 0.5],
        [0.33333333, 0.33333333, 0.5],
        [0.5, 0.33333333, 0.5],
        [-0.33333333, 0.33333333, 0.5],
        [-0.16666667, 0.33333333, 0.5],
        [0.0, 0.5, 0.5],
        [0.16666667, 0.5, 0.5],
        [0.33333333, 0.5, 0.5],
        [0.5, 0.5, 0.5],
    ]
end

@testset "Test MgB₂ structure" begin
    lattice = [[3.07, 0.0, 0.0], [-1.535, 2.65869799, 0.0], [0.0, 0.0, 3.52]]
    positions = [[0, 0, 0], [0.33333333, 0.66666667, 0.5], [0.66666667, 0.33333333, 0.5]]
    types = [12, 5, 5]
    MgB₂ = Cell(lattice, positions, types)
    mesh = [7, 7, 7]
    nir, mapping, grid_address =
        get_ir_reciprocal_mesh(MgB₂, mesh; is_time_reversal = true, symprec = 1e-5)
    @test nir == length(unique(mapping)) == 32
    @test list_points(mapping, grid_address, mesh, [0, 0, 0], true) ≈ [
        [0.0, 0.0, 0.0],
        [0.14285714, 0.0, 0.0],
        [0.28571429, 0.0, 0.0],
        [0.42857143, 0.0, 0.0],
        [0.14285714, 0.14285714, 0.0],
        [0.28571429, 0.14285714, 0.0],
        [0.42857143, 0.14285714, 0.0],
        [0.28571429, 0.28571429, 0.0],
        [0.0, 0.0, 0.14285714],
        [0.14285714, 0.0, 0.14285714],
        [0.28571429, 0.0, 0.14285714],
        [0.42857143, 0.0, 0.14285714],
        [0.14285714, 0.14285714, 0.14285714],
        [0.28571429, 0.14285714, 0.14285714],
        [0.42857143, 0.14285714, 0.14285714],
        [0.28571429, 0.28571429, 0.14285714],
        [0.0, 0.0, 0.28571429],
        [0.14285714, 0.0, 0.28571429],
        [0.28571429, 0.0, 0.28571429],
        [0.42857143, 0.0, 0.28571429],
        [0.14285714, 0.14285714, 0.28571429],
        [0.28571429, 0.14285714, 0.28571429],
        [0.42857143, 0.14285714, 0.28571429],
        [0.28571429, 0.28571429, 0.28571429],
        [0.0, 0.0, 0.42857143],
        [0.14285714, 0.0, 0.42857143],
        [0.28571429, 0.0, 0.42857143],
        [0.42857143, 0.0, 0.42857143],
        [0.14285714, 0.14285714, 0.42857143],
        [0.28571429, 0.14285714, 0.42857143],
        [0.42857143, 0.14285714, 0.42857143],
        [0.28571429, 0.28571429, 0.42857143],
    ]
    @test length(list_points(mapping, grid_address, mesh, [0, 0, 0], false)) == 343
end
