Cycles: unit tests

cycles-detection-with-context
Alexandre Hajjar 2020-09-22 21:03:08 +02:00
parent 4e30ef98b7
commit e847d3ad17
1 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,65 @@
import { expect } from 'chai'
import dedent from 'dedent-js'
import { hasCycles } from '../source/cyclesLib'
describe('Cyclic dependencies detector 3000 ™', () => {
it('should detect the trivial formule cycle', () => {
const rules = dedent`
a:
formule: a + 1
`
const cycles = hasCycles(rules)
expect(cycles).to.deep.equal([['a']])
})
it('should detect the trivial replace cycle', () => {
const rules = dedent`
a:
remplace: a
`
const cycles = hasCycles(rules)
expect(cycles).to.deep.equal([['a']])
})
it('should detect nested and parallel formule cycles', () => {
const rules = dedent`
a:
formule: b + 1
b:
formule: c + d + 1
c:
formule: a + 1
d:
formule: b + 1
`
const cycles = hasCycles(rules)
expect(cycles).to.deep.equal([['d', 'c', 'b', 'a']])
})
it('should not detect 1 level formule + remplace', () => {
const rules = dedent`
b:
formule: c + 1
remplace: c
c:
formule: 0
`
const cycles = hasCycles(rules)
expect(cycles).to.be.empty
})
it('should detect a 2 levels formuleX2 + remplace (but why? 😢)', () => {
const rules = dedent`
a:
formule: b + 1
remplace: c
b:
formule: c + 1
c:
formule: 0
`
const cycles = hasCycles(rules)
expect(cycles).to.deep.equal([['c', 'b', 'a']])
})
})