package.specs.properties.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of graphology Show documentation
Show all versions of graphology Show documentation
A robust and multipurpose Graph object for JavaScript.
The newest version!
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = properties;
var _assert = _interopRequireDefault(require("assert"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
var PROPERTIES = ['order', 'size', 'directedSize', 'undirectedSize', 'type', 'multi', 'allowSelfLoops', 'implementation', 'selfLoopCount', 'directedSelfLoopCount', 'undirectedSelfLoopCount'];
function properties(Graph) {
return {
/**
* Regarding all properties.
*/
misc: {
'all expected properties should be set.': function allExpectedPropertiesShouldBeSet() {
var graph = new Graph();
PROPERTIES.forEach(function (property) {
(0, _assert["default"])(property in graph, property);
});
},
'properties should be read-only.': function propertiesShouldBeReadOnly() {
var graph = new Graph();
// Attempting to mutate the properties
PROPERTIES.forEach(function (property) {
_assert["default"]["throws"](function () {
graph[property] = 'test';
}, TypeError);
});
}
},
/**
* Order.
*/
'#.order': {
'it should be 0 if the graph is empty.': function itShouldBe0IfTheGraphIsEmpty() {
var graph = new Graph();
_assert["default"].strictEqual(graph.order, 0);
},
'adding nodes should increase order.': function addingNodesShouldIncreaseOrder() {
var graph = new Graph();
graph.addNode('John');
graph.addNode('Jack');
_assert["default"].strictEqual(graph.order, 2);
}
},
/**
* Size.
*/
'#.size': {
'it should be 0 if the graph is empty.': function itShouldBe0IfTheGraphIsEmpty() {
var graph = new Graph();
_assert["default"].strictEqual(graph.size, 0);
},
'adding & dropping edges should affect size.': function addingDroppingEdgesShouldAffectSize() {
var graph = new Graph();
graph.addNode('John');
graph.addNode('Jack');
graph.addDirectedEdge('John', 'Jack');
_assert["default"].strictEqual(graph.size, 1);
graph.dropEdge('John', 'Jack');
_assert["default"].strictEqual(graph.size, 0);
}
},
/**
* Directed Size.
*/
'#.directedSize': {
'it should be 0 if the graph is empty.': function itShouldBe0IfTheGraphIsEmpty() {
var graph = new Graph();
_assert["default"].strictEqual(graph.directedSize, 0);
},
'adding & dropping edges should affect directed size.': function addingDroppingEdgesShouldAffectDirectedSize() {
var graph = new Graph();
graph.addNode('John');
graph.addNode('Jack');
var directedEdge = graph.addDirectedEdge('John', 'Jack');
_assert["default"].strictEqual(graph.directedSize, 1);
var undirectedEdge = graph.addUndirectedEdge('John', 'Jack');
_assert["default"].strictEqual(graph.directedSize, 1);
graph.dropEdge(directedEdge);
_assert["default"].strictEqual(graph.directedSize, 0);
graph.dropEdge(undirectedEdge);
_assert["default"].strictEqual(graph.directedSize, 0);
}
},
/**
* Undirected Size.
*/
'#.undirectedSize': {
'it should be 0 if the graph is empty.': function itShouldBe0IfTheGraphIsEmpty() {
var graph = new Graph();
_assert["default"].strictEqual(graph.undirectedSize, 0);
},
'adding & dropping edges should affect undirected size.': function addingDroppingEdgesShouldAffectUndirectedSize() {
var graph = new Graph();
graph.addNode('John');
graph.addNode('Jack');
var directedEdge = graph.addDirectedEdge('John', 'Jack');
_assert["default"].strictEqual(graph.undirectedSize, 0);
var undirectedEdge = graph.addUndirectedEdge('John', 'Jack');
_assert["default"].strictEqual(graph.undirectedSize, 1);
graph.dropEdge(directedEdge);
_assert["default"].strictEqual(graph.undirectedSize, 1);
graph.dropEdge(undirectedEdge);
_assert["default"].strictEqual(graph.undirectedSize, 0);
}
},
/**
* Multi.
*/
'#.multi': {
'it should be false by default.': function itShouldBeFalseByDefault() {
var graph = new Graph();
_assert["default"].strictEqual(graph.multi, false);
}
},
/**
* Type.
*/
'#.type': {
'it should be "mixed" by default.': function itShouldBeMixedByDefault() {
var graph = new Graph();
_assert["default"].strictEqual(graph.type, 'mixed');
}
},
/**
* Self loops.
*/
'#.allowSelfLoops': {
'it should be true by default.': function itShouldBeTrueByDefault() {
var graph = new Graph();
_assert["default"].strictEqual(graph.allowSelfLoops, true);
}
},
/**
* Implementation.
*/
'#.implementation': {
'it should exist and be a string.': function itShouldExistAndBeAString() {
var graph = new Graph();
_assert["default"].strictEqual(_typeof(graph.implementation), 'string');
}
},
/**
* Self Loop Count.
*/
'#.selfLoopCount': {
'it should exist and be correct.': function itShouldExistAndBeCorrect() {
var graph = new Graph();
graph.mergeDirectedEdge('John', 'John');
graph.mergeDirectedEdge('Lucy', 'Lucy');
graph.mergeUndirectedEdge('Joana', 'Joana');
_assert["default"].strictEqual(graph.selfLoopCount, 3);
_assert["default"].strictEqual(graph.directedSelfLoopCount, 2);
_assert["default"].strictEqual(graph.undirectedSelfLoopCount, 1);
graph.forEachEdge(function (edge) {
return graph.dropEdge(edge);
});
_assert["default"].strictEqual(graph.selfLoopCount, 0);
_assert["default"].strictEqual(graph.directedSelfLoopCount, 0);
_assert["default"].strictEqual(graph.undirectedSelfLoopCount, 0);
}
}
};
}