import pytest

from crapssim.bet import Come, PassLine
from crapssim.strategy.examples import Pass2Come
from crapssim.table import Table, TableUpdate


@pytest.mark.parametrize(
    "point, last_roll, strat_info, bets_before, dice_result, bets_after",
    [
        (None, None, None, [], None, [PassLine(amount=5.0)]),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (2, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=8)],
            (3, 5),
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
        ),
        (
            None,
            11,
            None,
            [Come(amount=5.0, number=8)],
            (5, 6),
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (4, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            11,
            None,
            [PassLine(amount=5.0)],
            (5, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=6)],
            (4, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=6), Come(amount=5.0)],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (5, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            10,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (5, 5),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            6,
            3,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (1, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            None,
            6,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=6)],
            (4, 2),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            5,
            5,
            None,
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (4, 1),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            None,
            5,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=6)],
            (4, 1),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            9,
            None,
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (5, 4),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            5,
            None,
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (1, 4),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            6,
            None,
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
            (4, 2),
            [Come(amount=5.0, number=10), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
            (3, 2),
            [
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (3, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            11,
            None,
            [PassLine(amount=5.0)],
            (5, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            2,
            None,
            [PassLine(amount=5.0)],
            (1, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (5, 2), [PassLine(amount=5.0)]),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (4, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (1, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            6,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
            (3, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (2, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (None, 7, None, [], (5, 2), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (6, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (
            10,
            10,
            None,
            [PassLine(amount=5.0)],
            (6, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            10,
            None,
            [Come(amount=5.0, number=10)],
            (5, 5),
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
        ),
        (
            6,
            6,
            None,
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
            (2, 4),
            [Come(amount=5.0, number=10), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            6,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=6)],
            (2, 4),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            5,
            5,
            None,
            [PassLine(amount=5.0)],
            (2, 3),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            5,
            12,
            None,
            [PassLine(amount=5.0)],
            (6, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            4,
            4,
            None,
            [PassLine(amount=5.0)],
            (2, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (4, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
            (5, 3),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
        ),
        (
            9,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (4, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            11,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (6, 5),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
            (2, 6),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
        ),
        (
            9,
            6,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
            (3, 3),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            5,
            5,
            None,
            [PassLine(amount=5.0)],
            (1, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            5,
            3,
            None,
            [PassLine(amount=5.0)],
            (1, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            5,
            9,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (6, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (
            5,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
            ],
            (3, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            5,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (3, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (4, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=8)],
            (4, 4),
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
        ),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (6, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=6)],
            (5, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=6), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=6)],
            (2, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=6), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=6)],
            (2, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=6), Come(amount=5.0)],
        ),
        (
            8,
            10,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=10),
            ],
            (4, 6),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=10),
            ],
        ),
        (
            8,
            9,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=10),
            ],
            (6, 3),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=10),
            ],
        ),
        (None, 7, None, [], (5, 2), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (1, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (1, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            None,
            6,
            None,
            [Come(amount=5.0, number=4), Come(amount=5.0, number=6)],
            (5, 1),
            [
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            10,
            None,
            [
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (6, 4),
            [
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            6,
            None,
            [Come(amount=5.0, number=4), PassLine(amount=5.0)],
            (3, 3),
            [Come(amount=5.0, number=4), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            4,
            4,
            None,
            [PassLine(amount=5.0)],
            (3, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (5, 2), [PassLine(amount=5.0)]),
        (None, 3, None, [], (2, 1), [PassLine(amount=5.0)]),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (2, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            11,
            None,
            [PassLine(amount=5.0)],
            (6, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (3, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            9,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (
            8,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
            ],
            (3, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=9), Come(amount=5.0, number=4)],
            (4, 4),
            [
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
            ],
        ),
        (
            5,
            5,
            None,
            [
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
            ],
            (4, 1),
            [
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
            ],
        ),
        (
            5,
            11,
            None,
            [
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
            ],
            (6, 5),
            [
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
            ],
        ),
        (
            5,
            4,
            None,
            [Come(amount=5.0, number=9), PassLine(amount=5.0)],
            (2, 2),
            [Come(amount=5.0, number=9), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (None, 12, None, [], (6, 6), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (2, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            3,
            None,
            [PassLine(amount=5.0)],
            (2, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (2, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            8,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 12, None, [], (6, 6), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (4, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (4, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=5),
            ],
            (1, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=5),
            ],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (
            5,
            5,
            None,
            [PassLine(amount=5.0)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            5,
            11,
            None,
            [PassLine(amount=5.0)],
            (5, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (None, 12, None, [], (6, 6), [PassLine(amount=5.0)]),
        (None, 2, None, [], (1, 1), [PassLine(amount=5.0)]),
        (
            10,
            10,
            None,
            [PassLine(amount=5.0)],
            (4, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            10,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (3, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            10,
            5,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=5),
            ],
            (2, 3),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=5),
            ],
        ),
        (
            None,
            10,
            None,
            [Come(amount=5.0, number=4), Come(amount=5.0, number=5)],
            (6, 4),
            [
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=5),
                PassLine(amount=5.0),
            ],
        ),
        (
            None,
            2,
            None,
            [Come(amount=5.0, number=4), Come(amount=5.0, number=5)],
            (1, 1),
            [
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=5),
                PassLine(amount=5.0),
            ],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (None, 3, None, [], (2, 1), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (6, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=8)],
            (4, 4),
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
        ),
        (
            None,
            12,
            None,
            [Come(amount=5.0, number=8)],
            (6, 6),
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
        ),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (3, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (3, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            8,
            9,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
            (5, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
        ),
        (
            8,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (3, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (
            8,
            9,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=6),
            ],
            (5, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            8,
            3,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=6),
            ],
            (1, 2),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=6),
            ],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=6)],
            (2, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=6), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
            ],
            (3, 5),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
            ],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=6), Come(amount=5.0, number=8)],
            (3, 6),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            None,
            2,
            None,
            [Come(amount=5.0, number=6), Come(amount=5.0, number=8)],
            (1, 1),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (3, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (1, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            3,
            None,
            [PassLine(amount=5.0)],
            (1, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            12,
            None,
            [PassLine(amount=5.0)],
            (6, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            11,
            None,
            [PassLine(amount=5.0)],
            (6, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (2, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (2, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            6,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
            (3, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            6,
            10,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
            (4, 6),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            6,
            9,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
            (4, 5),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            6,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            None,
            6,
            None,
            [Come(amount=5.0, number=4), Come(amount=5.0, number=6)],
            (1, 5),
            [
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            4,
            4,
            None,
            [Come(amount=5.0, number=6), PassLine(amount=5.0)],
            (1, 3),
            [Come(amount=5.0, number=6), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            4,
            11,
            None,
            [Come(amount=5.0, number=6), PassLine(amount=5.0)],
            (6, 5),
            [Come(amount=5.0, number=6), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=9)],
            (3, 6),
            [Come(amount=5.0, number=9), PassLine(amount=5.0)],
        ),
        (
            5,
            5,
            None,
            [Come(amount=5.0, number=9), PassLine(amount=5.0)],
            (1, 4),
            [Come(amount=5.0, number=9), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 3, None, [], (1, 2), [PassLine(amount=5.0)]),
        (
            4,
            4,
            None,
            [PassLine(amount=5.0)],
            (1, 3),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            4,
            4,
            None,
            [PassLine(amount=5.0)],
            (2, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            4,
            None,
            [Come(amount=5.0, number=4)],
            (3, 1),
            [Come(amount=5.0, number=4), PassLine(amount=5.0)],
        ),
        (
            8,
            8,
            None,
            [Come(amount=5.0, number=4), PassLine(amount=5.0)],
            (5, 3),
            [Come(amount=5.0, number=4), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            5,
            None,
            [
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
            (1, 4),
            [
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (5, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            6,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
            ],
            (4, 2),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            9,
            8,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
            ],
            (4, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            9,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
            ],
            (2, 2),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=5), Come(amount=5.0, number=6)],
            (3, 6),
            [
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            8,
            8,
            None,
            [
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (6, 2),
            [
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            8,
            10,
            None,
            [
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (6, 4),
            [
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (None, 3, None, [], (1, 2), [PassLine(amount=5.0)]),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 11, None, [], (5, 6), [PassLine(amount=5.0)]),
        (
            10,
            10,
            None,
            [PassLine(amount=5.0)],
            (6, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            10,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (5, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (
            5,
            5,
            None,
            [PassLine(amount=5.0)],
            (2, 3),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            5,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (4, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (None, 7, None, [], (5, 2), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (1, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
            (2, 6),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
        ),
        (
            9,
            10,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
            (6, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=8),
            ],
        ),
        (
            9,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (2, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (
            9,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=4),
            ],
            (2, 2),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            9,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (2, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (6, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (
            9,
            6,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=6),
            ],
            (2, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=8), Come(amount=5.0, number=6)],
            (6, 3),
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            None,
            3,
            None,
            [Come(amount=5.0, number=8), Come(amount=5.0, number=6)],
            (2, 1),
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            8,
            8,
            None,
            [Come(amount=5.0, number=6), PassLine(amount=5.0)],
            (2, 6),
            [Come(amount=5.0, number=6), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=6)],
            (1, 5),
            [PassLine(amount=5.0), Come(amount=5.0, number=6), Come(amount=5.0)],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=6), Come(amount=5.0, number=8)],
            (3, 5),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            10,
            None,
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
            (4, 6),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            9,
            None,
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
            (3, 6),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            9,
            None,
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
            (4, 5),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            9,
            None,
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
            (6, 3),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            5,
            None,
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
            (3, 2),
            [
                Come(amount=5.0, number=6),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (
            10,
            8,
            None,
            [Come(amount=5.0, number=6), PassLine(amount=5.0)],
            (3, 5),
            [Come(amount=5.0, number=6), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            10,
            12,
            None,
            [Come(amount=5.0, number=6), PassLine(amount=5.0)],
            (6, 6),
            [Come(amount=5.0, number=6), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            10,
            5,
            None,
            [
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
            (4, 1),
            [
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
        ),
        (
            10,
            4,
            None,
            [
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
            (3, 1),
            [
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (
            10,
            10,
            None,
            [PassLine(amount=5.0)],
            (6, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            10,
            2,
            None,
            [PassLine(amount=5.0)],
            (1, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (
            9,
            9,
            None,
            [PassLine(amount=5.0)],
            (4, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            11,
            None,
            [PassLine(amount=5.0)],
            (5, 6),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (6, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=8)],
            (5, 3),
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
        ),
        (
            9,
            9,
            None,
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
            (6, 3),
            [Come(amount=5.0, number=8), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=8), Come(amount=5.0, number=9)],
            (4, 5),
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            9,
            None,
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
            (3, 6),
            [Come(amount=5.0, number=8), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            6,
            None,
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
            ],
            (5, 1),
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            9,
            5,
            None,
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
            ],
            (4, 1),
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            9,
            4,
            None,
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
            ],
            (2, 2),
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            9,
            6,
            None,
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
            (2, 4),
            [Come(amount=5.0, number=8), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            10,
            None,
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
            ],
            (6, 4),
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
            ],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=8), Come(amount=5.0, number=10)],
            (6, 3),
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            9,
            None,
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
            ],
            (4, 5),
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            11,
            None,
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
            ],
            (5, 6),
            [
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            10,
            None,
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
            (4, 6),
            [Come(amount=5.0, number=8), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            3,
            None,
            [Come(amount=5.0, number=8), PassLine(amount=5.0)],
            (2, 1),
            [Come(amount=5.0, number=8), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            5,
            None,
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
            (2, 3),
            [
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
            ],
        ),
        (
            9,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (5, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            9,
            10,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=10),
            ],
            (4, 6),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=5),
                Come(amount=5.0, number=10),
            ],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (
            5,
            5,
            None,
            [PassLine(amount=5.0)],
            (1, 4),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            5,
            None,
            [Come(amount=5.0, number=5)],
            (1, 4),
            [Come(amount=5.0, number=5), PassLine(amount=5.0)],
        ),
        (
            None,
            3,
            None,
            [Come(amount=5.0, number=5)],
            (2, 1),
            [Come(amount=5.0, number=5), PassLine(amount=5.0)],
        ),
        (
            8,
            8,
            None,
            [Come(amount=5.0, number=5), PassLine(amount=5.0)],
            (6, 2),
            [Come(amount=5.0, number=5), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            12,
            None,
            [Come(amount=5.0, number=5), PassLine(amount=5.0)],
            (6, 6),
            [Come(amount=5.0, number=5), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (2, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (
            8,
            3,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=5)],
            (2, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=5), Come(amount=5.0)],
        ),
        (None, 7, None, [], (1, 6), [PassLine(amount=5.0)]),
        (None, 3, None, [], (2, 1), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (5, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            6,
            9,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (3, 6),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (
            6,
            10,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=10),
            ],
            (4, 6),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=10),
            ],
        ),
        (
            6,
            9,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (6, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            6,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=4),
            ],
            (3, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            6,
            9,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=4),
            ],
            (5, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            6,
            5,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=4),
            ],
            (1, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            6,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (2, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            6,
            11,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (5, 6),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            6,
            12,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (6, 6),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            None,
            6,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=6)],
            (3, 3),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            4,
            4,
            None,
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
            (1, 3),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
                PassLine(amount=5.0),
            ],
        ),
        (
            4,
            6,
            None,
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
            (4, 2),
            [Come(amount=5.0, number=10), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (
            8,
            8,
            None,
            [PassLine(amount=5.0)],
            (6, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            8,
            10,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (6, 4),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            8,
            5,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=5),
            ],
            (4, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=5),
            ],
        ),
        (
            8,
            5,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (3, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            8,
            3,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (2, 1),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (
            8,
            6,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
            ],
            (5, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            8,
            5,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
            ],
            (1, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=6),
            ],
        ),
        (
            8,
            6,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=10)],
            (4, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=10), Come(amount=5.0)],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (None, 2, None, [], (1, 1), [PassLine(amount=5.0)]),
        (
            10,
            10,
            None,
            [PassLine(amount=5.0)],
            (5, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            10,
            None,
            [Come(amount=5.0, number=10)],
            (4, 6),
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
        ),
        (
            9,
            9,
            None,
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
            (4, 5),
            [Come(amount=5.0, number=10), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=9)],
            (6, 3),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
        ),
        (
            8,
            8,
            None,
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
            (3, 5),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
        ),
        (
            8,
            6,
            None,
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
            (5, 1),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
        ),
        (
            None,
            8,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=9)],
            (5, 3),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=9),
                PassLine(amount=5.0),
            ],
        ),
        (
            9,
            9,
            None,
            [Come(amount=5.0, number=10), PassLine(amount=5.0)],
            (3, 6),
            [Come(amount=5.0, number=10), PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            9,
            8,
            None,
            [
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
            ],
            (5, 3),
            [
                Come(amount=5.0, number=10),
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
            ],
        ),
        (
            None,
            9,
            None,
            [Come(amount=5.0, number=10), Come(amount=5.0, number=8)],
            (6, 3),
            [
                Come(amount=5.0, number=10),
                Come(amount=5.0, number=8),
                PassLine(amount=5.0),
            ],
        ),
        (None, 7, None, [], (6, 1), [PassLine(amount=5.0)]),
        (
            4,
            4,
            None,
            [PassLine(amount=5.0)],
            (3, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            4,
            9,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=9)],
            (3, 6),
            [PassLine(amount=5.0), Come(amount=5.0, number=9), Come(amount=5.0)],
        ),
        (
            None,
            4,
            None,
            [Come(amount=5.0, number=9), Come(amount=5.0, number=4)],
            (2, 2),
            [
                Come(amount=5.0, number=9),
                Come(amount=5.0, number=4),
                PassLine(amount=5.0),
            ],
        ),
        (None, 7, None, [], (2, 5), [PassLine(amount=5.0)]),
        (
            10,
            10,
            None,
            [PassLine(amount=5.0)],
            (5, 5),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            10,
            8,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=8)],
            (5, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=8), Come(amount=5.0)],
        ),
        (
            10,
            4,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=4),
            ],
            (3, 1),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=4),
            ],
        ),
        (
            10,
            9,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=4),
            ],
            (4, 5),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=8),
                Come(amount=5.0, number=4),
            ],
        ),
        (None, 7, None, [], (3, 4), [PassLine(amount=5.0)]),
        (
            6,
            6,
            None,
            [PassLine(amount=5.0)],
            (4, 2),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (None, 7, None, [], (4, 3), [PassLine(amount=5.0)]),
        (
            5,
            5,
            None,
            [PassLine(amount=5.0)],
            (4, 1),
            [PassLine(amount=5.0), Come(amount=5.0)],
        ),
        (
            5,
            4,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (1, 3),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            5,
            3,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (1, 2),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            5,
            11,
            None,
            [PassLine(amount=5.0), Come(amount=5.0, number=4)],
            (6, 5),
            [PassLine(amount=5.0), Come(amount=5.0, number=4), Come(amount=5.0)],
        ),
        (
            5,
            9,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
            (5, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
        ),
        (
            5,
            10,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
            (6, 4),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
        ),
        (
            5,
            6,
            None,
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
            (1, 5),
            [
                PassLine(amount=5.0),
                Come(amount=5.0, number=4),
                Come(amount=5.0, number=9),
            ],
        ),
    ],
)
def test_pass2come_integration(
    point, last_roll, strat_info, bets_before, dice_result, bets_after
):
    table = Table()
    table.add_player(bankroll=float("inf"), strategy=Pass2Come(5))  # ADD STRATEGY HERE
    table.point.number = point
    table.last_roll = last_roll
    table.players[0].bets = bets_before
    table.dice.result = dice_result
    TableUpdate().run_strategies(table)
    assert table.players[0].bets == bets_after
