DBSCAN.test.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. require('should');
  2. var DBSCAN = require('../lib/index.js').DBSCAN;
  3. describe('DBSCAN', function() {
  4. describe('run', function() {
  5. it('should return correct clusters for regular density set', function() {
  6. var dbscan = new DBSCAN();
  7. var dataset = [
  8. [1, 1], [0, 1], [1, 0],
  9. [10, 10], [10, 13], [13, 13],
  10. [30, 30], [30, 33], [49, 49], [33, 33], [36, 36]
  11. ];
  12. // small radius
  13. dbscan.run(dataset, 5, 2)
  14. .should.be.eql([
  15. [0, 1, 2],
  16. [3, 4, 5],
  17. [6, 7, 9, 10]
  18. ]);
  19. dbscan.noise.should.eql([8]);
  20. // big radius
  21. dbscan.run(dataset, 50, 2).should.be.eql([
  22. [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
  23. ]);
  24. dbscan.noise.should.eql([]);
  25. });
  26. });
  27. describe('regionQuery', function() {
  28. it('should return nearest neighborhood of a point', function() {
  29. var dataset = [
  30. [1, 1], [2, 2], [3, 3],
  31. [50, 50], [51, 51]
  32. ];
  33. var dbscan = new DBSCAN(dataset);
  34. dbscan.epsilon = 1;
  35. dbscan._regionQuery(1).should.eql([1]);
  36. dbscan.epsilon = 2;
  37. dbscan._regionQuery(1).should.eql([0, 1, 2]);
  38. dbscan._regionQuery(4).should.eql([3, 4]);
  39. dbscan.epsilon = 100;
  40. dbscan._regionQuery(1).should.eql([0, 1, 2, 3, 4]);
  41. });
  42. });
  43. describe('mergeArrays', function() {
  44. it('should merge two arrays', function() {
  45. var dbscan = new DBSCAN();
  46. dbscan._mergeArrays([1, 2, 3], [2, 3, 4, 5])
  47. .should.eql([1, 2, 3, 4, 5]);
  48. dbscan._mergeArrays([2, 3, 4, 5], [1, 2, 3])
  49. .should.eql([2, 3, 4, 5, 1]);
  50. });
  51. });
  52. describe('euclideanDistance', function() {
  53. it('should return distance between two points', function() {
  54. var dbscan = new DBSCAN();
  55. dbscan._euclideanDistance([1, 1], [3, 1]).should.eql(2);
  56. dbscan._euclideanDistance([1, 1], [1, 3]).should.eql(2);
  57. });
  58. });
  59. });