d3-sankey-diagram
Version:
Sankey diagram d3 plugin
112 lines (91 loc) • 2.96 kB
JavaScript
import { addDummyNodes, dummyNodes } from '../../src/sortNodes/dummy-nodes.js'
import tape from 'tape'
import { Graph } from '@dagrejs/graphlib'
tape('dummyNodes(edge) adds nothing to short edges', test => {
test.deepEqual(dummyNodes({rank: 0}, {rank: 1}), [], 'forwards')
test.deepEqual(dummyNodes({rank: 1, backwards: true},
{rank: 0, backwards: true}), [], 'backwards')
test.end()
})
tape('dummyNodes(edge) adds forwards nodes to forwards-forwards edges', test => {
test.deepEqual(dummyNodes({rank: 0}, {rank: 2}), [
{rank: 1, backwards: false}
])
test.deepEqual(dummyNodes({rank: 1}, {rank: 4}), [
{rank: 2, backwards: false},
{rank: 3, backwards: false}
])
test.end()
})
tape('dummyNodes(edge) adds backwards nodes to backwards-backwards edges', test => {
test.deepEqual(dummyNodes({rank: 2, backwards: true},
{rank: 0, backwards: true}), [
{rank: 1, backwards: true}
])
test.deepEqual(dummyNodes({rank: 4, backwards: true},
{rank: 1, backwards: true}), [
{rank: 3, backwards: true},
{rank: 2, backwards: true}
])
test.end()
})
tape('dummyNodes(edge) adds turn-around nodes to forwards-backwards edges', test => {
// a --,
// |
// b <-- * <-`
test.deepEqual(dummyNodes({rank: 1, backwards: false},
{rank: 0, backwards: true}), [
{rank: 1, backwards: true}
])
// a --,
// |
// b <-`
test.deepEqual(dummyNodes({rank: 0, backwards: false},
{rank: 0, backwards: true}), [])
// a --> * --,
// |
// b <-`
test.deepEqual(dummyNodes({rank: 0, backwards: false},
{rank: 1, backwards: true}), [
{rank: 1, backwards: false}
])
test.end()
})
tape('dummyNodes(edge) adds turn-around nodes to backwards-forwards edges', test => {
// ,-- a
// |
// `-> * --> b
test.deepEqual(dummyNodes({rank: 0, backwards: true},
{rank: 1, backwards: false}), [
{rank: 0, backwards: false}
])
// ,-- a
// |
// `-> b
test.deepEqual(dummyNodes({rank: 0, backwards: true},
{rank: 0, backwards: false}), [])
// ,-- * <-- a
// |
// `-> b
test.deepEqual(dummyNodes({rank: 1, backwards: true},
{rank: 0, backwards: false}), [
{rank: 0, backwards: true}
])
test.end()
})
tape('addDummyNodes(G) adds nodes to graph', test => {
//
// a -- b -- c
// `---*---`
//
const graph = new Graph({ directed: true, multigraph: true })
graph.setNode('a', {rank: 0})
graph.setNode('b', {rank: 1})
graph.setNode('c', {rank: 2})
graph.setEdge('a', 'b', {value: 1})
graph.setEdge('b', 'c', {value: 1})
graph.setEdge('a', 'c', {value: 1})
addDummyNodes(graph)
test.deepEqual(graph.nodes(), ['a', 'b', 'c', '__a_c_0'])
test.end()
})