Download this file
import pytest
from nerdle import *

@pytest.fixture
def solver():
    s = Solver()
    s.record("8+7*6=50", "aaaaiiii")
    return s


def test1(solver):
    assert solver.next_set([]) == solver.digits - ZERO

def test2(solver):
    assert solver.next_set(['5']) == solver.digits | solver.operators

def test3(solver):
    assert solver.next_set(['5', '-']) == solver.digits - ZERO

def test4(solver):
    assert solver.next_set(['5', '5']) == solver.digits | solver.operators

def test5(solver):
    assert solver.next_set(['5', '-', '5']) == solver.digits | solver.operators | EQUAL

def test6(solver):
    assert solver.next_set(['5', '-', '5', '5']) == solver.digits | solver.operators | EQUAL

def test7(solver):
    assert solver.next_set(['5', '5', '-', '5', '5' ]) == solver.digits | solver.operators | EQUAL

def test8(solver):
    assert solver.next_set(['5', '5', '-', '5', '-', '5']) == EQUAL

def test9(solver):
    assert solver.next_set(['5', '5', '-', '5', '-', '5', '=']) == solver.digits

def test10(solver):
    assert solver.next_set(['5', '5', '-', '5', '-', '5', '=', '5']) == solver.digits

def test11(solver):
    assert solver.next_set(['5', '-']) == solver.digits - ZERO

def test50():
    s = Solver()
    s.record("8+7*6=50", "aaaaiiii")
    assert s.operators == OPERATORS - {'+', '*'}
    assert s.digits == DIGITS - {'8', '7'}
    assert s.corrects == [None] * 8
    assert s.incorrects == [{'8'}, {'+'}, {'7'}, {'*'}, {'6'}, {'='}, {'5'}, {'0'}]

def test101():
    s = Solver()
    s.record("8+7*6=50", "caiiiiaa")
    s.record("8-12/3=4", "caaiaiia")
    assert (-12, "88*9=792") in s._solutions()
    s.record("88*9=792", "caciciai")
    assert s._solutions() == {(-16, '89*7=623'), (-16, '89*3=267') }
    s.record("89*7=623", "ccciciii")
    assert s._solutions() == {(-16, "89*3=267")}

def test102():
    s = Solver()
    s.record("8+7*6=50", "iaaaaiai")
    assert (-16, "9-24/3=1") in s._solutions()
    s.record("9-24/3=1", "iiiaaaci")
    assert s._solutions() == {(-14, "100-98=2"), (-14, "100-92=8")}
    s.record("100-98=2", "cccccccc")
    assert s._solutions() == {(-14, "100-98=2")}

def test103():
    s = Solver()
    s.record("8+7*6=50", "iaaaacia")
    s.record("129/3=43", "aaiaacca")
    assert s.digits == {'4', '5', '8', '9'}
    assert s.operators == {'-'}
    assert (-10, "94-45=49") in s._solutions()
    s.record("94-45=49", "ciciicca")
    assert s._solutions() == {(-12, "98-54=44")}

def test104():
    s = Solver()
    s.record("8+7*6=50", "icaaaiia")
    s.record("1+24/3=9", "iciaaaci")
    s.record("2+11-5=8", "iccacicc")
    assert s._solutions() == {(-16, "5+12-9=8")}

def test105():
    s = Solver()
    s.record("8+7*6=50", "iaaaicaa")
    s.record("129/3=43", "iaacacia")
    assert (1, "44//4=11") not in s._solutions()

def test106():
    s = Solver()
    s.record("8+7*6=50", "iiaaacia")
    s.record("129/3=43", "aaaaicia")
    assert s.score('54+34=88') < s.score('44+44=88')