Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function node(value, left, right) {
- var n = {};
- n.value = value;
- n.left = left;
- n.right = right;
- return n;
- }
- function test_solution(sol) {
- if (!sol.serialize || !sol.deserialize) {
- throw {
- name: 'Solution not in right format',
- message: 'Provide an object with serialize and deserialize functions'
- };
- }
- var randint = function(max) {
- return Math.floor(max * Math.random());
- };
- // create a random tree with the given size
- var random_tree = function(size) {
- var root = {value: randint(1000), left: null, right: null};
- for (var i = 0; i < size; i++) {
- var insert_position = root;
- while (true) {
- if (randint(2) == 0) {
- // add to left
- if (insert_position.left == null) {
- insert_position.left = node(100 + randint(1000), null, null);
- break;
- } else {
- insert_position = insert_position.left;
- }
- } else {
- // add to right
- if (insert_position.right == null) {
- insert_position.right = node(100 + randint(1000), null, null);
- break;
- } else {
- insert_position = insert_position.right;
- }
- }
- }
- }
- return root;
- };
- var trees_equal = function(a, b) {
- if (a == null || b == null) {
- return a == b;
- } else {
- return a.value == b.value &&
- trees_equal(a.left, b.left) &&
- trees_equal(a.right, b.right);
- }
- };
- for (var i = 0; i < 100; i++) {
- var TREE_SIZE = 1 + randint(100);
- var tree = random_tree(TREE_SIZE);
- var serialized = sol.serialize(tree);
- if (serialized.length > TREE_SIZE * 4) {
- throw {
- name: "Serialized tree too large",
- message: "Your serialize function should be more compact!",
- };
- }
- var restored = sol.deserialize(serialized);
- if (!trees_equal(restored, tree)) {
- throw {
- name: "Trees not equal",
- message: "deserialize(serialize(tree)) != tree",
- serialized: serialized,
- original: tree,
- restored: restored
- };
- }
- }
- console.log("Tests passed!");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement