74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
require('should');
|
|
var DBSCAN = require('../lib/index.js').DBSCAN;
|
|
|
|
describe('DBSCAN', function() {
|
|
|
|
describe('run', function() {
|
|
it('should return correct clusters for regular density set', function() {
|
|
var dbscan = new DBSCAN();
|
|
var dataset = [
|
|
[1, 1], [0, 1], [1, 0],
|
|
[10, 10], [10, 13], [13, 13],
|
|
[30, 30], [30, 33], [49, 49], [33, 33], [36, 36]
|
|
];
|
|
|
|
// small radius
|
|
dbscan.run(dataset, 5, 2)
|
|
.should.be.eql([
|
|
[0, 1, 2],
|
|
[3, 4, 5],
|
|
[6, 7, 9, 10]
|
|
]);
|
|
|
|
dbscan.noise.should.eql([8]);
|
|
|
|
// big radius
|
|
dbscan.run(dataset, 50, 2).should.be.eql([
|
|
[0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
|
|
]);
|
|
|
|
dbscan.noise.should.eql([]);
|
|
});
|
|
});
|
|
|
|
describe('regionQuery', function() {
|
|
it('should return nearest neighborhood of a point', function() {
|
|
var dataset = [
|
|
[1, 1], [2, 2], [3, 3],
|
|
[50, 50], [51, 51]
|
|
];
|
|
var dbscan = new DBSCAN(dataset);
|
|
|
|
dbscan.epsilon = 1;
|
|
dbscan._regionQuery(1).should.eql([1]);
|
|
|
|
dbscan.epsilon = 2;
|
|
dbscan._regionQuery(1).should.eql([0, 1, 2]);
|
|
dbscan._regionQuery(4).should.eql([3, 4]);
|
|
|
|
dbscan.epsilon = 100;
|
|
dbscan._regionQuery(1).should.eql([0, 1, 2, 3, 4]);
|
|
});
|
|
});
|
|
|
|
describe('mergeArrays', function() {
|
|
it('should merge two arrays', function() {
|
|
var dbscan = new DBSCAN();
|
|
dbscan._mergeArrays([1, 2, 3], [2, 3, 4, 5])
|
|
.should.eql([1, 2, 3, 4, 5]);
|
|
|
|
dbscan._mergeArrays([2, 3, 4, 5], [1, 2, 3])
|
|
.should.eql([2, 3, 4, 5, 1]);
|
|
});
|
|
});
|
|
|
|
describe('euclideanDistance', function() {
|
|
it('should return distance between two points', function() {
|
|
var dbscan = new DBSCAN();
|
|
dbscan._euclideanDistance([1, 1], [3, 1]).should.eql(2);
|
|
dbscan._euclideanDistance([1, 1], [1, 3]).should.eql(2);
|
|
});
|
|
});
|
|
|
|
});
|