describe(`Updating with ${dataLabel}`, () => { for (const [methodLabel, method] of methods) { const data = methodLabel === 'update' ? dataSets[1] : dataSets[0] const newState = method(state, data) const vAnswer = answers[dataLabel][methodLabel].v const stateValue = jString(state, 2) const newStateValue = jString(newState, 2) it(`${methodLabel}: ${vAnswer ? 'equal' : 'UNequal'} by value`, () => { if (vAnswer) { assert.equal(newStateValue, stateValue, 'equal values') } else { assert.equal(newStateValue === stateValue, false, 'unequal values') } }) inspect.forEach((f, level) => { const piece = f(state) const newPiece = f(newState) const answer = answers[dataLabel][methodLabel][level] it(`level ${level} = ${jString(piece)}: ${answer ? 'equal' : 'UNequal'}`, () => { assert.equal(piece === newPiece, answer, `level ${level}`) }) }) } })
inspect.forEach((f, level) => { const piece = f(state) const newPiece = f(newState) const answer = answers[dataLabel][methodLabel][level] it(`level ${level} = ${jString(piece)}: ${answer ? 'equal' : 'UNequal'}`, () => { assert.equal(piece === newPiece, answer, `level ${level}`) }) })
tasks.forEach(({ args, predictedStates, inspectors }) => { describe(`updateAuto(${jString(args)})`, () => { states.forEach(([stateLabel, state], i) => { const predictedState = predictedStates[i] const newState = updateAuto(state, ...args) it(`${stateLabel}: new state has predicted value`, () => { const newStateValue = jString(newState, 2) const predictedStateValue = jString(predictedState, 2) assert.equal(newStateValue, predictedStateValue, stateLabel) }) const [label, selector, answer] = inspectors[i] if (selector != null) { const piece = selector(state) const newPiece = selector(newState) it(`${padStart(answer ? '===' : '!===', 4, ' ')} ${label}`, () => { assert.equal(piece === newPiece, answer, label) }) } }) }) })
it(`${stateLabel}: new state has predicted value`, () => { const newStateValue = jString(newState, 2) const predictedStateValue = jString(predictedState, 2) assert.equal(newStateValue, predictedStateValue, stateLabel) })