# -*- coding: utf-8 -*-
# Author: github.com/madhavajay
"""This is a test for naked twins functionality"""

from sudoku.board import Board as SB

# Unit Test Solutions copied directly from solution_test.py and reformatted

# pylint: disable=invalid-name
before_naked_twins_1 = {
    'I6': '4', 'H9': '3', 'I2': '6', 'E8': '1', 'H3': '5', 'H7': '8',
    'I7': '1', 'I4': '8', 'H5': '6', 'F9': '7', 'G7': '6', 'G6': '3',
    'G5': '2', 'E1': '8', 'G3': '1', 'G2': '8', 'G1': '7', 'I1': '23',
    'C8': '5', 'I3': '23', 'E5': '347', 'I5': '5', 'C9': '1', 'G9': '5',
    'G8': '4', 'A1': '1', 'A3': '4', 'A2': '237', 'A5': '9', 'A4': '2357',
    'A7': '27', 'A6': '257', 'C3': '8', 'C2': '237', 'C1': '23', 'E6': '579',
    'C7': '9', 'C6': '6', 'C5': '37', 'C4': '4', 'I9': '9', 'D8': '8',
    'I8': '7', 'E4': '6', 'D9': '6', 'H8': '2', 'F6': '125', 'A9': '8',
    'G4': '9', 'A8': '6', 'E7': '345', 'E3': '379', 'F1': '6', 'F2': '4',
    'F3': '23', 'F4': '1235', 'F5': '8', 'E2': '37', 'F7': '35', 'F8': '9',
    'D2': '1', 'H1': '4', 'H6': '17', 'H2': '9', 'H4': '17', 'D3': '2379',
    'B4': '27', 'B5': '1', 'B6': '8', 'B7': '27', 'E9': '2', 'B1': '9',
    'B2': '5', 'B3': '6', 'D6': '279', 'D7': '34', 'D4': '237', 'D5': '347',
    'B8': '3', 'B9': '4', 'D1': '5'
}

# pylint: disable=invalid-name
possible_solutions_1 = [{
    'G7': '6', 'G6': '3', 'G5': '2', 'G4': '9', 'G3': '1', 'G2': '8',
    'G1': '7', 'G9': '5', 'G8': '4', 'C9': '1', 'C8': '5', 'C3': '8',
    'C2': '237', 'C1': '23', 'C7': '9', 'C6': '6', 'C5': '37', 'A4': '2357',
    'A9': '8', 'A8': '6', 'F1': '6', 'F2': '4', 'F3': '23', 'F4': '1235',
    'F5': '8', 'F6': '125', 'F7': '35', 'F8': '9', 'F9': '7', 'B4': '27',
    'B5': '1', 'B6': '8', 'B7': '27', 'E9': '2', 'B1': '9', 'B2': '5',
    'B3': '6', 'C4': '4', 'B8': '3', 'B9': '4', 'I9': '9', 'I8': '7',
    'I1': '23', 'I3': '23', 'I2': '6', 'I5': '5', 'I4': '8', 'I7': '1',
    'I6': '4', 'A1': '1', 'A3': '4', 'A2': '237', 'A5': '9', 'E8': '1',
    'A7': '27', 'A6': '257', 'E5': '347', 'E4': '6', 'E7': '345', 'E6': '579',
    'E1': '8', 'E3': '79', 'E2': '37', 'H8': '2', 'H9': '3', 'H2': '9',
    'H3': '5', 'H1': '4', 'H6': '17', 'H7': '8', 'H4': '17', 'H5': '6',
    'D8': '8', 'D9': '6', 'D6': '279', 'D7': '34', 'D4': '237', 'D5': '347',
    'D2': '1', 'D3': '79', 'D1': '5'
}, {
    'I6': '4', 'H9': '3', 'I2': '6', 'E8': '1', 'H3': '5', 'H7': '8',
    'I7': '1', 'I4': '8', 'H5': '6', 'F9': '7', 'G7': '6', 'G6': '3',
    'G5': '2', 'E1': '8', 'G3': '1', 'G2': '8', 'G1': '7', 'I1': '23',
    'C8': '5', 'I3': '23', 'E5': '347', 'I5': '5', 'C9': '1', 'G9': '5',
    'G8': '4', 'A1': '1', 'A3': '4', 'A2': '237', 'A5': '9', 'A4': '2357',
    'A7': '27', 'A6': '257', 'C3': '8', 'C2': '237', 'C1': '23',
    'E6': '579', 'C7': '9', 'C6': '6', 'C5': '37', 'C4': '4', 'I9': '9',
    'D8': '8', 'I8': '7', 'E4': '6', 'D9': '6', 'H8': '2', 'F6': '125',
    'A9': '8', 'G4': '9', 'A8': '6', 'E7': '345', 'E3': '79', 'F1': '6',
    'F2': '4', 'F3': '23', 'F4': '1235', 'F5': '8', 'E2': '3', 'F7': '35',
    'F8': '9', 'D2': '1', 'H1': '4', 'H6': '17', 'H2': '9', 'H4': '17',
    'D3': '79', 'B4': '27', 'B5': '1', 'B6': '8', 'B7': '27', 'E9': '2',
    'B1': '9', 'B2': '5', 'B3': '6', 'D6': '279', 'D7': '34', 'D4': '237',
    'D5': '347', 'B8': '3', 'B9': '4', 'D1': '5'
}]

# pylint: disable=invalid-name
before_naked_twins_2 = {
    'A1': '23', 'A2': '4', 'A3': '7', 'A4': '6', 'A5': '8', 'A6': '5',
    'A7': '23', 'A8': '9', 'A9': '1', 'B1': '6', 'B2': '9', 'B3': '8',
    'B4': '4', 'B5': '37', 'B6': '1', 'B7': '237', 'B8': '5', 'B9': '237',
    'C1': '23', 'C2': '5', 'C3': '1', 'C4': '23', 'C5': '379', 'C6': '2379',
    'C7': '8', 'C8': '6', 'C9': '4', 'D1': '8', 'D2': '17', 'D3': '9',
    'D4': '1235', 'D5': '6', 'D6': '237', 'D7': '4', 'D8': '27', 'D9': '2357',
    'E1': '5', 'E2': '6', 'E3': '2', 'E4': '8', 'E5': '347', 'E6': '347',
    'E7': '37', 'E8': '1', 'E9': '9', 'F1': '4', 'F2': '17', 'F3': '3',
    'F4': '125', 'F5': '579', 'F6': '279', 'F7': '6', 'F8': '8', 'F9': '257',
    'G1': '1', 'G2': '8', 'G3': '6', 'G4': '35', 'G5': '345', 'G6': '34',
    'G7': '9', 'G8': '27', 'G9': '27', 'H1': '7', 'H2': '2', 'H3': '4',
    'H4': '9', 'H5': '1', 'H6': '8', 'H7': '5', 'H8': '3', 'H9': '6',
    'I1': '9', 'I2': '3', 'I3': '5', 'I4': '7', 'I5': '2', 'I6': '6',
    'I7': '1', 'I8': '4', 'I9': '8'
}

# pylint: disable=invalid-name
possible_solutions_2 = [{
    'A1': '23', 'A2': '4', 'A3': '7', 'A4': '6', 'A5': '8', 'A6': '5',
    'A7': '23', 'A8': '9', 'A9': '1', 'B1': '6', 'B2': '9', 'B3': '8',
    'B4': '4', 'B5': '37', 'B6': '1', 'B7': '237', 'B8': '5', 'B9': '237',
    'C1': '23', 'C2': '5', 'C3': '1', 'C4': '23', 'C5': '79', 'C6': '79',
    'C7': '8', 'C8': '6', 'C9': '4', 'D1': '8', 'D2': '17', 'D3': '9',
    'D4': '1235', 'D5': '6', 'D6': '237', 'D7': '4', 'D8': '27', 'D9': '2357',
    'E1': '5', 'E2': '6', 'E3': '2', 'E4': '8', 'E5': '347', 'E6': '347',
    'E7': '37', 'E8': '1', 'E9': '9', 'F1': '4', 'F2': '17', 'F3': '3',
    'F4': '125', 'F5': '579', 'F6': '279', 'F7': '6', 'F8': '8', 'F9': '257',
    'G1': '1', 'G2': '8', 'G3': '6', 'G4': '35', 'G5': '345', 'G6': '34',
    'G7': '9', 'G8': '27', 'G9': '27', 'H1': '7', 'H2': '2', 'H3': '4',
    'H4': '9', 'H5': '1', 'H6': '8', 'H7': '5', 'H8': '3', 'H9': '6',
    'I1': '9', 'I2': '3', 'I3': '5', 'I4': '7', 'I5': '2', 'I6': '6',
    'I7': '1', 'I8': '4', 'I9': '8'
}, {
    'A1': '23', 'A2': '4', 'A3': '7', 'A4': '6', 'A5': '8', 'A6': '5',
    'A7': '23', 'A8': '9', 'A9': '1', 'B1': '6', 'B2': '9', 'B3': '8',
    'B4': '4', 'B5': '3', 'B6': '1', 'B7': '237', 'B8': '5', 'B9': '237',
    'C1': '23', 'C2': '5', 'C3': '1', 'C4': '23', 'C5': '79', 'C6': '79',
    'C7': '8', 'C8': '6', 'C9': '4', 'D1': '8', 'D2': '17', 'D3': '9',
    'D4': '1235', 'D5': '6', 'D6': '237', 'D7': '4', 'D8': '27', 'D9': '2357',
    'E1': '5', 'E2': '6', 'E3': '2', 'E4': '8', 'E5': '347', 'E6': '347',
    'E7': '37', 'E8': '1', 'E9': '9', 'F1': '4', 'F2': '17', 'F3': '3',
    'F4': '125', 'F5': '579', 'F6': '279', 'F7': '6', 'F8': '8', 'F9': '257',
    'G1': '1', 'G2': '8', 'G3': '6', 'G4': '35', 'G5': '345', 'G6': '34',
    'G7': '9', 'G8': '27', 'G9': '27', 'H1': '7', 'H2': '2', 'H3': '4',
    'H4': '9', 'H5': '1', 'H6': '8', 'H7': '5', 'H8': '3', 'H9': '6',
    'I1': '9', 'I2': '3', 'I3': '5', 'I4': '7', 'I5': '2', 'I6': '6',
    'I7': '1', 'I8': '4', 'I9': '8'
}]


def test_naked_twins_1() -> None:
    """Solve first naked twin problem"""
    sbrd = SB()
    board = sbrd.naked_twins(before_naked_twins_1)

    assert board in possible_solutions_1


def test_naked_twins_2() -> None:
    """Solve second naked twin problem"""
    sbrd = SB()
    board = sbrd.naked_twins(before_naked_twins_2)

    assert board in possible_solutions_2
