Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 1x 1x 18x 18x 18x 18x 18x 413x 413x 286x 286x 127x 402x 7x 395x 395x 395x 1x | const GeneratedExpression = require('./generated_expression')
// 256 generated expressions ought to be enough for anybody
const MAX_EXPRESSIONS = 256
class CombinatorialGeneratedExpressionFactory {
constructor(expressionTemplate, parameterTypeCombinations) {
this._expressionTemplate = expressionTemplate
this._parameterTypeCombinations = parameterTypeCombinations
}
generateExpressions() {
const generatedExpressions = []
this._generatePermutations(generatedExpressions, 0, [])
return generatedExpressions
}
_generatePermutations(generatedExpressions, depth, currentParameterTypes) {
Iif (generatedExpressions.length >= MAX_EXPRESSIONS) {
return
}
if (depth === this._parameterTypeCombinations.length) {
generatedExpressions.push(
new GeneratedExpression(this._expressionTemplate, currentParameterTypes)
)
return
}
for (let i = 0; i < this._parameterTypeCombinations[depth].length; ++i) {
// Avoid recursion if no elements can be added.
if (generatedExpressions.length >= MAX_EXPRESSIONS) {
return
}
const newCurrentParameterTypes = currentParameterTypes.slice() // clone
newCurrentParameterTypes.push(this._parameterTypeCombinations[depth][i])
this._generatePermutations(
generatedExpressions,
depth + 1,
newCurrentParameterTypes
)
}
}
}
module.exports = CombinatorialGeneratedExpressionFactory
|