:notebook_with_decorative_cover:
@graph-data-structure/specification
Graph data structure specification for JavaScript.
:warning: Depending on your environment, the code may require
regeneratorRuntimeto be defined, for instance by importing regenerator-runtime/runtime.
// eslint-disable-next-line ava/use-test
import ava from 'ava';
import * as spec from '@graph-data-structure/specification';
spec.graph(ava, "My graph implementation", MyGraphConstructor);
Signatures
Graphs, DiGraphs, MultiGraphs, and MultiDiGraphs
Graph, DiGraph, MultiGraph, or MultiDiGraph
Create a new graph.
let G = new Graph( ) ;
// ...
let G = new DiGraph( ) ;
// ...
let G = new MultiGraph( ) ;
// ...
let G = new MultiDiGraph( ) ;
// ...
vadd
Add a vertex to graph G.
let u = G.vadd( ) ;
vdel
Delete vertex u from graph G.
G.vdel( u ) ;
eadd
Add edge (u,v) to graph G.
let e = G.eadd( u , v ) ;
edel
Delete edge e from graph G.
G.edel( e ) ;
vitr
Get an iterator over vertex references in graph G.
for ( let u of G.vitr( ) ) ... ;
eitr
Get an iterator over edge references in graph G.
for ( let e of g.eitr( ) ) ... ;
iitr
Get an iterator over edge references of edges incident to u in graph G.
for ( let e of G.iitr( u ) ) ... ;
nitr
Get an iterator over vertex references of neighbors of u in graph G.
for ( let v of G.nitr( u ) ) ... ;
vertices
Get an iterator over vertices in graph G.
for ( let u of G.vertices( ) ) ... ;
edges
Get an iterator over edges in graph G.
for ( let [ u , v , e ] of G.edges( ) ) ... ;
incident
Get an iterator over edges incident to w in graph G.
for ( let [ u , v , e ] of G.incident( w ) ) ... ;
endpoints
Get endpoints u and v of an edge reference e in graph G.
let [ u , v ] = G.endpoints( e ) ;
DiGraphs and MultiDiGraphs
These methods must also be implemented (with the same invariants) in Graphs and MultiGraphs for convenience.
initr
Get an iterator over edge references of ingoing edges of u in graph G.
for ( let e of G.initr( u ) ) ... ;
outitr
Get an iterator over edge references of outgoing edges of u in graph G.
for ( let e of G.outitr( u ) ) ... ;
dpitr
Get an iterator over direct predecessors of u in graph G.
for ( let v of G.dpitr( u ) ) ... ;
dsitr
Get an iterator over direct successors of u in graph G.
for ( let v of G.dsitr( u ) ) ... ;
ingoing
Get an iterator over ingoing edges of w in graph G.
The invariant v === w must hold.
for ( let [ u , v , e ] of G.ingoing( w ) ) ... ;
outgoing
Get an iterator over outgoing edges of w in graph G.
The invariant u === w must hold.
for ( let [ u , v , e ] of G.outgoing( w ) ) ... ;
reverse
Reverse the directions of edges in G.
G.reverse( ) ;
