rule.js
changeset 12 a9a44cfc3e08
parent 10 70ece7f758a0
child 46 4dadaff6eba4
--- a/rule.js	Sun Sep 07 00:33:47 2014 +0300
+++ b/rule.js	Sun Sep 07 03:33:33 2014 +0300
@@ -101,7 +101,7 @@
         state.stack.push(state.curr);
 }
 board.move = {};
-board.move.up = function(brd) {
+board.move.up = board.move.upOrig = function(brd) {
     var updated = false;
     for (var j = 0; j < 4; j++) {
         var state = board.row.init();
@@ -122,7 +122,7 @@
     }
     return updated;
 };
-board.move.down = function(brd) {
+board.move.down = board.move.downOrig = function(brd) {
     var updated = false;
     for (var j = 0; j < 4; j++) {
         var state = board.row.init();
@@ -143,7 +143,7 @@
     }
     return updated;
 };
-board.move.left = function(brd) {
+board.move.left = board.move.leftOrig = function(brd) {
     var updated = false;
     for (var i = 0; i < 4; i++) {
         var state = board.row.init();
@@ -164,7 +164,7 @@
     }
     return updated;
 };
-board.move.right = function(brd) {
+board.move.right = board.move.rightOrig = function(brd) {
     var updated = false;
     for (var i = 0; i < 4; i++) {
         var state = board.row.init();
@@ -185,3 +185,41 @@
     }
     return updated;
 };
+
+/* Restore after testing board.js moves. */
+board.move.restore = function() {
+    board.move.up = board.move.upOrig;
+    board.move.down = board.move.downOrig;
+    board.move.left = board.move.leftOrig;
+    board.move.right = board.move.rightOrig;
+}
+/* For testing board.js moves. */
+board.move.replaceMoveByBoardJS = function(brdEngine, dir) {
+    return function(brd) {
+        var engOrigBrd = new brdEngine(brd);
+        var engBrd = new brdEngine();
+        var changed = engOrigBrd[dir](engBrd);
+        var newBrd = engBrd.exportTo();
+        var changed2 = board.move[dir+"Orig"](brd);
+        for (var i = 0; i < 4; i++) {
+            for (var j = 0; j < 4; j++) {
+                if (newBrd[i][j] !== brd[i][j]) {
+                    console.log("[%d][%d] original: %o, expected: %o, actual: %o", i, j, engOrigBrd.exportTo(), brd, newBrd);
+                    return false;
+                }
+            }
+        }
+        if (changed2 !== changed) {
+            console.log("original: %o, changed: %o, changed2: %o", engOrigBrd.exportTo(), changed, changed2);
+            return false;
+        }
+        return changed;
+    }
+}
+board.move.replaceByBoardJS = function(brdEngine) {
+    // console.log("x2: %o", brdEngine);
+    board.move.up = board.move.replaceMoveByBoardJS(brdEngine, "up");
+    board.move.down = board.move.replaceMoveByBoardJS(brdEngine, "down");
+    board.move.left = board.move.replaceMoveByBoardJS(brdEngine, "left");
+    board.move.right = board.move.replaceMoveByBoardJS(brdEngine, "right");
+}