fix tests, integrate depenentless sorting into toposort for easier testing and

better guarantees
This commit is contained in:
Henry Jameson 2020-01-20 01:44:11 +02:00
parent 6e1c538e41
commit 2b36a62c56
2 changed files with 20 additions and 12 deletions

View file

@ -540,7 +540,7 @@ const getDependencies = (key, inheritance) => {
* @property {Function} getDeps - function that returns dependencies for
* given value and inheritance object.
* @returns {String[]} keys of inheritance object, sorted in topological
* order
* order. Additionally, dependency-less nodes will always be first in line
*/
export const topoSort = (
inheritance = SLOT_INHERITANCE,
@ -579,7 +579,14 @@ export const topoSort = (
while (unprocessed.length > 0) {
step(unprocessed.pop())
}
return output
return output.sort((a, b) => {
const depsA = getDeps(a, inheritance).length
const depsB = getDeps(b, inheritance).length
if (depsA === depsB || (depsB !== 0 && depsA !== 0)) return 0
if (depsA === 0 && depsB !== 0) return -1
if (depsB === 0 && depsA !== 0) return 1
})
}
/**
@ -657,20 +664,13 @@ export const getLayerSlot = (
}
/**
* topologically sorted SLOT_INHERITANCE + additional priority sort
* topologically sorted SLOT_INHERITANCE
*/
export const SLOT_ORDERED = topoSort(
Object.entries(SLOT_INHERITANCE)
.sort(([aK, aV], [bK, bV]) => ((aV && aV.priority) || 0) - ((bV && bV.priority) || 0))
.reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})
).sort((a, b) => {
const depsA = getDependencies(a, SLOT_INHERITANCE).length
const depsB = getDependencies(b, SLOT_INHERITANCE).length
if (depsA === depsB || (depsB !== 0 && depsA !== 0)) return 0
if (depsA === 0 && depsB !== 0) return -1
if (depsB === 0 && depsA !== 0) return 1
})
)
/**
* Dictionary where keys are color slots and values are opacity associated