Skip to content

Commit

Permalink
Fixed and added test for blend method.
Browse files Browse the repository at this point in the history
  • Loading branch information
brandonreavis committed May 13, 2015
1 parent 60cdd2c commit 3a638a5
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 10 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.DS_Store
Thumbs.db
node_modules
*.tmp*
37 changes: 27 additions & 10 deletions blend.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ module.exports = function(grids, options){
function merge(a, b){
var grid_c = [];
var data_c = {};
var keys_c = [""];
var key = 1;
var key_mapping_a = {};
var key_mapping_b = {};

var dim = a.grid.length;
var offset = b.keys.length;

for(var y = 0; y < dim; y++){
var row_a = a.grid[y];
var row_b = b.grid[y];
Expand All @@ -28,22 +30,37 @@ function merge(a, b){
var id_a = decode(row_a.charCodeAt(x));
var id_b = decode(row_b.charCodeAt(x));
var id_c = 0;
if(b.data[id_b]){
id_c = id_b;
data_c[id_c] = b.data[id_b];
} else if (a.data[id_a]) {
id_c = id_a + offset;
data_c[id_c] = a.data[id_a];
var key_a = a.keys[id_a];
var key_b = b.keys[id_b];
var key_c = 0;
if(b.data[key_b]){
key_c = key_mapping_b[key_b];
if(!key_c) {
key_c = (key++).toString();
key_mapping_b[key_b] = key_c;
keys_c.push(key_c);
}
data_c[key_c] = b.data[key_b];
id_c = keys_c.indexOf(key_c);
} else if (a.data[key_a]) {
key_c = key_mapping_a[key_a];
if(!key_c) {
key_c = (key++).toString();
key_mapping_a[key_a] = key_c;
keys_c.push(key_c);
}
data_c[key_c] = a.data[id_a];
id_c = keys_c.indexOf(key_c);
}
row_c.push(encode(id_c));
}
grid_c.push(row.join(''));
grid_c.push(row_c.join(''));
}

return {
grid: grid_c,
data: data_c,
keys: Object.keys(data_c)
keys: keys_c
};
}

Expand Down
18 changes: 18 additions & 0 deletions test/blend.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var blend = require('../blend.js');
var assert = require('chai').assert;

function assertGridEqual(result, expected){
assert.deepEqual(result.keys, expected.keys, 'keys should match');
for(var i = 0; i < expected.grid.length; i++){
assert.equal(result.grid[i], expected.grid[i], 'row '+i+' should match');
};
assert.deepEqual(result.data, expected.data, 'data property should match');
}

describe('blend()', function() {
it('should merge utfgrids', function() {
var fixture = require('./fixtures/a.js');
var output = blend(fixture.inputs);
assertGridEqual(output, fixture.result);
});
});
65 changes: 65 additions & 0 deletions test/fixtures/a.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
module.exports.inputs = [{
"data": {
"1": {"id": 1},
"2": {"id": 2},
"3": {"id": 3},
"4": {"id": 4},
"5": {"id": 5},
"6": {"id": 6}
},
"keys": ["","1","2","3","4","5","6"],
"grid": [
" ",
" ",
" ",
" ",
" !#$ ",
" %&' ",
" ",
" "
]
},{
"data": {
"1": {"id": 7},
"2": {"id": 8},
"3": {"id": 9},
"4": {"id": 10},
"5": {"id": 11},
"6": {"id": 12}
},
"keys": ["","1","2","3","4","5","6"],
"grid": [
" ",
" ",
" ",
" ",
" ",
" !#$ ",
" %&' ",
" "
]
}];
module.exports.result = {
"data": {
"1": {"id": 1},
"2": {"id": 2},
"3": {"id": 3},
"4": {"id": 7},
"5": {"id": 8},
"6": {"id": 9},
"7": {"id": 10},
"8": {"id": 11},
"9": {"id": 12},
},
"keys": ["","1","2","3","4","5","6","7","8","9"],
"grid": [
" ",
" ",
" ",
" ",
" !#$ ",
" %&' ",
" ()* ",
" "
]
};

0 comments on commit 3a638a5

Please sign in to comment.