graph-builder
Version:
A graph builder library for modeling abstract graph structures.
107 lines • 5.2 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const tape_1 = __importDefault(require("tape"));
const GraphBuilder_1 = require("./GraphBuilder");
const EndpointPair_1 = require("./EndpointPair");
const N1 = 1;
const N2 = 2;
const N3 = 3;
tape_1.default('Graph builder :: directed :: graph creation', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
t.assert(directedGraph, 'Graph is created');
t.end();
});
tape_1.default('Graph builder :: directed :: add nodes', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.addNode(N1);
directedGraph.addNode(N2);
const nodes = Array.from(directedGraph.nodes().values());
t.deepEquals(nodes, [N1, N2], 'Nodes are added');
t.end();
});
tape_1.default('Graph builder :: directed :: remove nodes', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.addNode(N1);
directedGraph.addNode(N2);
directedGraph.removeNode(N2);
const nodes = Array.from(directedGraph.nodes().values());
t.deepEquals(nodes, [N1], 'Nodes are removed');
t.end();
});
tape_1.default('Graph builder :: directed :: connect nodes', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.putEdge(N1, N2);
t.assert(directedGraph.successors(N1).has(N2), 'Nodes are connected');
t.assert(directedGraph.predecessors(N2).has(N1), 'Nodes are connected');
t.end();
});
tape_1.default('Graph builder :: directed :: connect endpoints', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
const edgeN1N2 = EndpointPair_1.EndpointPair.of(directedGraph, N1, N2);
directedGraph.putEdgeConnectingEndpoints(edgeN1N2);
t.assert(directedGraph.successors(N1).has(N2), 'Nodes are connected');
t.assert(directedGraph.predecessors(N2).has(N1), 'Nodes are connected');
t.end();
});
tape_1.default('Graph builder :: directed :: DISconnect nodes', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.putEdge(N1, N2);
directedGraph.removeEdge(N1, N2);
t.notOk(directedGraph.successors(N1).has(N2), 'Nodes are disconnected');
t.notOk(directedGraph.predecessors(N2).has(N1), 'Nodes are disconnected');
t.end();
});
tape_1.default('Graph builder :: directed :: DISconnect endpoints', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
const edgeN1N2 = EndpointPair_1.EndpointPair.of(directedGraph, N1, N2);
directedGraph.putEdge(N1, N2);
directedGraph.removeEdgeConnectingEndpoints(edgeN1N2);
t.notOk(directedGraph.successors(N1).has(N2), 'Nodes are disconnected');
t.notOk(directedGraph.predecessors(N2).has(N1), 'Nodes are disconnected');
t.end();
});
tape_1.default('Graph builder :: directed :: get edges', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.putEdge(N1, N2);
directedGraph.putEdge(N2, N3);
const edges = directedGraph.edges();
t.equals(edges.size, 2, 'Has 2 edges');
const edgeN1N2 = EndpointPair_1.EndpointPair.of(directedGraph, N1, N2);
const edgeN2N3 = EndpointPair_1.EndpointPair.of(directedGraph, N1, N2);
const edgesArray = Array.from(edges.values());
t.assert(edgesArray.find((endpointPair => endpointPair.equals(edgeN1N2))), 'Has edges N1 -> N2');
t.assert(edgesArray.find((endpointPair => endpointPair.equals(edgeN2N3))), 'Has edges N2 -> N3');
t.end();
});
tape_1.default('Graph builder :: directed :: add node twice', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.addNode(N1);
directedGraph.addNode(N1);
t.equals(directedGraph.nodes().size, 1, `Doesn't add the same node twice`);
t.end();
});
tape_1.default('Graph builder :: allow self loops :: allows loops', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(true).build();
directedGraph.addNode(N1);
directedGraph.putEdge(N1, N1);
const edges = directedGraph.edges();
t.equals(edges.size, 1, 'Allows loops');
t.end();
});
tape_1.default('Graph builder :: no self loops :: throws on loops', (t) => {
const directedGraph = GraphBuilder_1.GraphBuilder.directed().allowsSelfLoops(false).build();
directedGraph.addNode(N1);
t.throws(() => {
directedGraph.putEdge(N1, N1);
}, /Cannot add self-loop/, 'throws on loops');
t.end();
});
tape_1.default('Graph builder :: undirected :: graph creation', (t) => {
const undirectedGraph = GraphBuilder_1.GraphBuilder.undirected().allowsSelfLoops(false).build();
t.assert(undirectedGraph, 'Graph is created');
t.end();
});
//# sourceMappingURL=GraphBuilder.spec.js.map