Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2014
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function node(value, left, right) {
  2.   var n = {};
  3.   n.value = value;
  4.   n.left = left;
  5.   n.right = right;
  6.   return n;
  7. }
  8.  
  9.  
  10. function test_solution(sol) {
  11.   if (!sol.serialize || !sol.deserialize) {
  12.     throw {
  13.       name: 'Solution not in right format',
  14.       message: 'Provide an object with serialize and deserialize functions'
  15.     };
  16.   }
  17.   var randint = function(max) {
  18.     return Math.floor(max * Math.random());
  19.   };
  20.  
  21.   // create a random tree with the given size
  22.   var random_tree = function(size) {
  23.     var root = {value: randint(1000), left: null, right: null};
  24.     for (var i = 0; i < size; i++) {
  25.       var insert_position = root;
  26.       while (true) {
  27.         if (randint(2) == 0) {
  28.           // add to left
  29.           if (insert_position.left == null) {
  30.             insert_position.left = node(100 + randint(1000), null, null);
  31.             break;
  32.           } else {
  33.             insert_position = insert_position.left;
  34.           }
  35.         } else {
  36.           // add to right
  37.           if (insert_position.right == null) {
  38.             insert_position.right = node(100 + randint(1000), null, null);
  39.             break;
  40.           } else {
  41.             insert_position = insert_position.right;
  42.           }
  43.         }
  44.       }
  45.     }
  46.     return root;
  47.   };
  48.  
  49.   var trees_equal = function(a, b) {
  50.     if (a == null || b == null) {
  51.       return a == b;
  52.     } else {
  53.       return a.value == b.value &&
  54.         trees_equal(a.left, b.left) &&
  55.         trees_equal(a.right, b.right);
  56.     }
  57.   };
  58.  
  59.   for (var i = 0; i < 100; i++) {
  60.     var TREE_SIZE = 1 + randint(100);
  61.     var tree = random_tree(TREE_SIZE);
  62.     var serialized = sol.serialize(tree);
  63.     if (serialized.length > TREE_SIZE * 4) {
  64.       throw {
  65.         name: "Serialized tree too large",
  66.         message: "Your serialize function should be more compact!",
  67.       };
  68.     }
  69.     var restored = sol.deserialize(serialized);
  70.     if (!trees_equal(restored, tree)) {
  71.       throw {
  72.         name: "Trees not equal",
  73.         message: "deserialize(serialize(tree)) != tree",
  74.         serialized: serialized,
  75.         original: tree,
  76.         restored: restored
  77.       };
  78.     }
  79.   }
  80.   console.log("Tests passed!");
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement