github.com/joshprzybyszewski/masyu@v0.0.0-20230508015604-f31a025f6e7e/solve/crossings_test.go (about) 1 package solve 2 3 import ( 4 "testing" 5 6 "github.com/joshprzybyszewski/masyu/model" 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestCrossings(t *testing.T) { 11 // This is puzz 3,368,748 12 s := newState( 13 model.Size(8), 14 puzz8x8_3368748_Nodes, 15 ) 16 17 expString := `0 X 1 X 2 X 3 X 4 X 5 X 6 X 7 X 8 X 9 X 18 X X X X X X X X X X 19 1 X * - * * * B * * - * X 20 X | | X 21 2 X W X * * * * W * X W X 22 X | | X 23 3 X * * * * * * * * X 24 X X 25 4 X * W W * W * * * X 26 X | | X 27 5 X * * * * W * X * X * X 28 X X | | X 29 6 X * * W * * - * - B X * X 30 X X X | X 31 7 X * * W * * * X * X * X 32 X | X X | X 33 8 X * - W - * * * * - * - B X 34 X X X X X X X X X X 35 9 X X X X X X X X X X 36 X X 37 ` 38 39 assert.Equal(t, expString, s.String()) 40 41 assert.Equal(t, model.Dimension(2), s.crossings.cols[1]) 42 assert.Equal(t, model.Dimension(1), s.crossings.colsAvoid[1]) 43 44 assert.Equal(t, model.Dimension(1), s.crossings.cols[2]) 45 assert.Equal(t, model.Dimension(0), s.crossings.colsAvoid[2]) 46 47 assert.Equal(t, model.Dimension(1), s.crossings.cols[5]) 48 assert.Equal(t, model.Dimension(0), s.crossings.colsAvoid[5]) 49 50 assert.Equal(t, model.Dimension(2), s.crossings.cols[6]) 51 assert.Equal(t, model.Dimension(2), s.crossings.colsAvoid[6]) 52 53 assert.Equal(t, model.Dimension(2), s.crossings.cols[7]) 54 assert.Equal(t, model.Dimension(4), s.crossings.colsAvoid[7]) 55 56 _ = checkEntireRuleset(&s) 57 ss := settle(&s) 58 assert.Equal(t, validUnsolved, ss) 59 60 assert.Equal(t, model.Dimension(2), s.crossings.cols[1]) 61 assert.Equal(t, model.Dimension(1), s.crossings.colsAvoid[1]) 62 63 assert.Equal(t, model.Dimension(1), s.crossings.cols[2]) 64 assert.Equal(t, model.Dimension(0), s.crossings.colsAvoid[2]) 65 66 assert.Equal(t, model.Dimension(1), s.crossings.cols[5]) 67 assert.Equal(t, model.Dimension(0), s.crossings.colsAvoid[5]) 68 69 assert.Equal(t, model.Dimension(2), s.crossings.cols[6]) 70 assert.Equal(t, model.Dimension(2), s.crossings.colsAvoid[6]) 71 72 assert.Equal(t, model.Dimension(2), s.crossings.cols[7]) 73 assert.Equal(t, model.Dimension(4), s.crossings.colsAvoid[7]) 74 75 pf := newPermutationsFactory() 76 pf.populate(&s) 77 78 assert.Equal(t, uint16(2), pf.numVals) 79 80 beforeAll := s 81 for i := uint16(0); i < pf.numVals; i++ { 82 pf.vals[i](&s) 83 t.Logf("Permutation %d:\n%s\n\n", i, &s) 84 if i < pf.numVals-1 { 85 assert.Equal(t, model.Dimension(4), s.crossings.cols[7], "for permutation %d", i) 86 assert.Equal(t, model.Dimension(4), s.crossings.colsAvoid[7], "for permutation %d", i) 87 } else { 88 assert.Equal(t, model.Dimension(2), s.crossings.cols[7], "for permutation %d", i) 89 assert.Equal(t, model.Dimension(6), s.crossings.colsAvoid[7], "for permutation %d", i) 90 } 91 _ = checkEntireRuleset(&s) 92 ss := settle(&s) 93 if i < pf.numVals-1 { 94 assert.Equal(t, model.Dimension(4), s.crossings.cols[7], "for permutation %d", i) 95 assert.Equal(t, model.Dimension(4), s.crossings.colsAvoid[7], "for permutation %d", i) 96 } else { 97 assert.Equal(t, model.Dimension(2), s.crossings.cols[7], "for permutation %d", i) 98 assert.Equal(t, model.Dimension(6), s.crossings.colsAvoid[7], "for permutation %d", i) 99 } 100 t.Logf("Permutation %d Settled:\n%s\n\n", i, &s) 101 assert.Equal(t, validUnsolved, ss, "for permutation %d", i) 102 s = beforeAll 103 } 104 105 t.Logf("Original:\n%s\n\n", &s) 106 assert.Equal(t, expString, s.String()) 107 } 108 109 var ( 110 puzz8x8_3368748_Nodes = []model.Node{{ 111 Coord: model.Coord{ 112 Row: 0, 113 Col: 4, 114 }, 115 IsBlack: true, 116 }, { 117 Coord: model.Coord{ 118 Row: 1, 119 Col: 0, 120 }, 121 IsBlack: false, 122 }, { 123 Coord: model.Coord{ 124 Row: 1, 125 Col: 5, 126 }, 127 IsBlack: false, 128 }, { 129 Coord: model.Coord{ 130 Row: 1, 131 Col: 7, 132 }, 133 IsBlack: false, 134 }, { 135 Coord: model.Coord{ 136 Row: 3, 137 Col: 1, 138 }, 139 IsBlack: false, 140 }, { 141 Coord: model.Coord{ 142 Row: 3, 143 Col: 2, 144 }, 145 IsBlack: false, 146 }, { 147 Coord: model.Coord{ 148 Row: 3, 149 Col: 4, 150 }, 151 IsBlack: false, 152 }, { 153 Coord: model.Coord{ 154 Row: 4, 155 Col: 4, 156 }, 157 IsBlack: false, 158 }, { 159 Coord: model.Coord{ 160 Row: 5, 161 Col: 2, 162 }, 163 IsBlack: false, 164 }, { 165 Coord: model.Coord{ 166 Row: 5, 167 Col: 6, 168 }, 169 IsBlack: true, 170 }, { 171 Coord: model.Coord{ 172 Row: 6, 173 Col: 2, 174 }, 175 IsBlack: false, 176 }, { 177 Coord: model.Coord{ 178 Row: 7, 179 Col: 1, 180 }, 181 IsBlack: false, 182 }, { 183 Coord: model.Coord{ 184 Row: 7, 185 Col: 7, 186 }, 187 IsBlack: true, 188 }} 189 )