UNPKG

graph-builder

Version:

A graph builder library for modeling abstract graph structures.

107 lines 5.2 kB
"use strict"; 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