コード例 #1
0
def test_randSquare():
    """randSquare()"""
    n = 5
    k = 7
    sq = latinSquare.LatinSquare()
    sq.randSquare(n, k, seed=1337, randomise=False)

    assert (sq.isValid())
    assert (len(sq.holes) == k)
    assert (sq.n == n)
    good = list(range(n))
    for i, x in enumerate(sq.grid[0]):
        if not isinstance(x, latinSquare.Hole):
            assert (x == good[i])

    sq = latinSquare.LatinSquare()
    sq.randSquare(n, k, seed=1337)

    assert (sq.isValid())
    assert (len(sq.holes) == k)
    assert (sq.n == n)
    good = list(range(n))
    allMatch = True
    for i, x in enumerate(sq.grid[0]):
        if x != good[i]:
            allMatch = False
    assert (not allMatch)
コード例 #2
0
def test_isSolved():
    """isSolved()"""
    sq = latinSquare.LatinSquare()
    sq.randSquare(5, 1, randomise=False, seed=1337)
    assert (not sq.isSolved())
    sq.holes[0].value = 3
    sq.holes[0].valueSet = True
    assert (sq.isSolved())

    # Hole with correct value is correct
    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]
    h = latinSquare.Hole(n)
    h.value = 0
    sq.grid[0][0] = h
    assert (sq.isSolved())

    # Hole with wrong value is not correct
    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]
    h = latinSquare.Hole(n)
    h.value = 4
    sq.grid[0][0] = h
    assert (not sq.isSolved())
コード例 #3
0
def test_validCols():
    """validCols()"""
    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]

    h1 = latinSquare.Hole(n)
    sq.holes.append(h1)
    h1.x = 0
    h1.y = 0
    h1.value = 3
    h1.valueSet = True
    sq.grid[0][0] = h1

    h2 = latinSquare.Hole(n)
    sq.holes.append(h2)
    h2.x = 1
    h2.y = 0
    sq.grid[1][0] = h2

    sq.checkHoleOptions()
    sq.updateHoleOptions(h1)
    assert (not sq.validCols())
    h1.value = 0
    assert (sq.validCols())
    h1.value = 1
    assert (sq.validCols())
コード例 #4
0
def test_validHoles():
    """validHoles()"""
    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]

    h1 = latinSquare.Hole(n)
    sq.holes.append(h1)
    h1.x = 0
    h1.y = 0
    h1.value = 1
    h1.valueSet = True
    sq.grid[0][0] = h1

    h2 = latinSquare.Hole(n)
    sq.holes.append(h2)
    h2.x = 0
    h2.y = 1
    sq.grid[0][1] = h2

    sq.checkHoleOptions()
    sq.updateHoleOptions(h1)
    assert (len(sq.holes[1].options) == 0)
    assert (not sq.validHoles())

    h1.value = 0
    h2.options = list(range(n))
    sq.checkHoleOptions()
    sq.updateHoleOptions(h1)
    assert (len(sq.holes[1].options) == 1)
    assert (sq.validHoles())
コード例 #5
0
def test_failLoadSquareInvalidSquare():
    """loadSquare() - fail2"""
    square = ("1 1 2 3 4\n"
              "1 2 3 4 _\n"
              "* 3 4 0 1\n"
              "3 4 0 1 2\n"
              "4 0 % 2 3")

    sq = latinSquare.LatinSquare()
    sq.loadSquare(square)
コード例 #6
0
def test_failLoadSquareUnevenRows():
    """loadSquare() - fail1"""
    square = ("0 1 2 3 4\n"
              "1 2 3 4 _\n"
              "* 3 4 0 1\n"
              "3 4 0 1\n"
              "4 0 % 2 3")

    sq = latinSquare.LatinSquare()
    sq.loadSquare(square)
コード例 #7
0
def test_strHoles():
    """strHoles()"""
    good = ("4 * * 3 *\n"
            "1 * * 0 2\n"
            "2 0 4 * *\n"
            "0 3 2 * 1\n"
            "3 1 * * 4")
    sq = latinSquare.LatinSquare()
    sq.randSquare(5, 10, seed=1337)
    assert (good == sq.strHoles())
コード例 #8
0
def test_checkHoleOptions():
    """chechHoleOptions)"""
    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]

    h = latinSquare.Hole(n)
    sq.holes.append(h)
    h.x = 0
    h.y = 0
    sq.grid[0][0] = h
    sq.checkHoleOptions()
    assert (len(h.options) == 1)
    assert (h.options[0] == 0)

    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]

    h1 = latinSquare.Hole(n)
    sq.holes.append(h1)
    h1.x = 0
    h1.y = 0
    sq.grid[0][0] = h1

    h2 = latinSquare.Hole(n)
    sq.holes.append(h2)
    h2.x = 1
    h2.y = 0
    sq.grid[1][0] = h2

    sq.checkHoleOptions()
    assert (len(h1.options) == 1)
    assert (h1.options[0] == 0)
    assert (len(h2.options) == 1)
    assert (h2.options[0] == 1)
コード例 #9
0
def test_addHoles():
    """addHoles()"""
    for i in range(1, 5**2):
        random.seed(i)
        sq = latinSquare.LatinSquare()
        n = 5
        k = i
        sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]
        sq.n = n
        sq.k = k
        sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]
        sq.holes = [latinSquare.Hole(n) for x in range(k)]
        sq.addHoles()
        assert (len(sq.holes) == i)
コード例 #10
0
def test_loadSqaure():
    """loadSquare()"""
    square = ("0 1 2 3 4\n"
              "1 2 3 4 _\n"
              "* 3 4 0 1\n"
              "3 4 0 1 2\n"
              "4 0 % 2 3")

    goodStr = ("0 1 2 3 4\n"
               "1 2 3 4 *\n"
               "* 3 4 0 1\n"
               "3 4 0 1 2\n"
               "4 0 * 2 3")

    sq = latinSquare.LatinSquare()
    sq.loadSquare(square)
    assert (sq.strHoles() == goodStr)
コード例 #11
0
def test_updateHoleOptions():
    """updateHoleOptions()"""
    sq = latinSquare.LatinSquare()
    n = 5
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]

    h1 = latinSquare.Hole(n)
    sq.holes.append(h1)
    h1.x = 0
    h1.y = 0
    sq.grid[0][0] = h1

    h2 = latinSquare.Hole(n)
    sq.holes.append(h2)
    h2.x = 3
    h2.y = 0
    sq.grid[3][0] = h2

    h3 = latinSquare.Hole(n)
    sq.holes.append(h3)
    h3.x = 0
    h3.y = 3
    sq.grid[0][3] = h3

    h4 = latinSquare.Hole(n)
    sq.holes.append(h4)
    h4.x = 3
    h4.y = 3
    sq.grid[3][3] = h4

    sq.checkHoleOptions()

    print(len(h1.options))
    print(h1.options)
    assert (len(h1.options) == 2)
    assert (h1.options[0] == 0)
    assert (h1.options[1] == 3)

    h1.value = 0
    h1.setValue = True
    sq.updateHoleOptions(h1)

    assert (len(h2.options) == 1)
    assert (h2.options[0] == 3)
コード例 #12
0
def test_nextStates():
    """nextStates()"""
    sq = latinSquare.LatinSquare()
    sq.randSquare(5, 10, seed=1337)
    newSqList = []
    for x in sq.nextStates():
        newSqList.append(x)
    assert (len(newSqList) == 1)

    newSq = newSqList[0]
    count = 0
    for h in newSq.holes:
        if h.valueSet is False:
            count += 1
    assert (count == 9)

    count = 0
    for h in sq.holes:
        if h.valueSet is False:
            count += 1
    assert (count == 10)
コード例 #13
0
def test_isValid():
    """isValid()"""
    sq = latinSquare.LatinSquare()
    n = 5
    sq.n = n
    sq.grid = [[(x + y) % n for x in range(n)] for y in range(n)]

    h1 = latinSquare.Hole(n)
    sq.holes.append(h1)
    h1.x = 0
    h1.y = 0
    h1.valueSet = True
    h1.value = 1
    sq.grid[0][0] = h1

    h2 = latinSquare.Hole(n)
    sq.holes.append(h2)
    h2.x = 1
    h2.y = 0
    sq.grid[1][0] = h2

    assert (not sq.isValid())
    h1.value = 0
    assert (sq.isValid())
コード例 #14
0
def test_randomise():
    """randomise()"""
    sq = latinSquare.LatinSquare()
    sq.randSquare(5, 1, randomise=False, seed=1337)
    sq.randomise()
    assert (sq.isValid())