diff --git a/src/variety/kurarin.js b/src/variety/kurarin.js index 3c890ab36..548d0bced 100644 --- a/src/variety/kurarin.js +++ b/src/variety/kurarin.js @@ -354,7 +354,7 @@ decodeKurarin: function() { var bd = this.board; - this.genericDecodeNumber16((bd.dots.length >> 1) | 1, function(idx, val) { + this.genericDecodeNumber16((bd.dots.length + 1) >> 1, function(idx, val) { var dot = bd.dots[idx * 2]; var dot2 = bd.dots[idx * 2 + 1]; dot.setDot((val >> 2) & 3); @@ -366,7 +366,7 @@ encodeKurarin: function() { var bd = this.board; - this.genericEncodeNumber16((bd.dots.length >> 1) | 1, function(idx) { + this.genericEncodeNumber16((bd.dots.length + 1) >> 1, function(idx) { var dot = bd.dots[idx * 2]; var dot2 = bd.dots[idx * 2 + 1]; var value = (dot.getDot() << 2) | (dot2 ? dot2.getDot() : 0); diff --git a/test/variety/kurarin_test.js b/test/variety/kurarin_test.js new file mode 100644 index 000000000..c114d0764 --- /dev/null +++ b/test/variety/kurarin_test.js @@ -0,0 +1,30 @@ +var assert = require("assert"); +var pzpr = require("../../"); + +describe("Variety:kurarin", function() { + it("Check URL encoding of last two dots on the board", function() { + var puzzle = new pzpr.Puzzle(); + puzzle.open("kurarin/5/6"); + + var dots = puzzle.board.dots; + var prevDot = dots[dots.length - 2]; + var lastDot = dots[dots.length - 1]; + + // Set distinct values to the last two dots + // 1, 2, and 3 are valid states for a dot + prevDot.setDot(2); + lastDot.setDot(3); + + var url = puzzle.getURL(); + + var puzzle2 = new pzpr.Puzzle(); + puzzle2.open(url); + + var dots2 = puzzle2.board.dots; + var prevDot2 = dots2[dots2.length - 2]; + var lastDot2 = dots2[dots2.length - 1]; + + assert.equal(prevDot2.getDot(), 2); + assert.equal(lastDot2.getDot(), 3); + }); +});