Fixed isInvertible and isIntegrable not working nested correctly
This commit is contained in:
parent
ff16397cc7
commit
bffc27344a
2 changed files with 29 additions and 6 deletions
|
@ -124,11 +124,14 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[
|
||||||
|
|
||||||
const innermostVariable = numVariables === 1 ? variable?.innermostVariable : undefined;
|
const innermostVariable = numVariables === 1 ? variable?.innermostVariable : undefined;
|
||||||
|
|
||||||
|
const invertible = variable?.isInvertible() ?? false;
|
||||||
|
const integrable = variable?.isIntegrable() ?? false;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
inputs,
|
inputs,
|
||||||
internalEvaluate: evaluate,
|
internalEvaluate: evaluate,
|
||||||
internalInvert: invert,
|
internalInvert: invertible ? invert : undefined,
|
||||||
internalIntegrate: integrate,
|
internalIntegrate: integrable ? integrate : undefined,
|
||||||
internalIntegrateInner: integrateInner,
|
internalIntegrateInner: integrateInner,
|
||||||
applySubstitution,
|
applySubstitution,
|
||||||
innermostVariable,
|
innermostVariable,
|
||||||
|
|
|
@ -491,10 +491,17 @@ describe("Inverting", () => {
|
||||||
expect(formula.invert(100)).compare_tolerance(0);
|
expect(formula.invert(100)).compare_tolerance(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Inverting with non-invertible sections", () => {
|
describe("Inverting with non-invertible sections", () => {
|
||||||
|
test("Non-invertible constant", () => {
|
||||||
const formula = Formula.add(variable, constant.ceil());
|
const formula = Formula.add(variable, constant.ceil());
|
||||||
expect(formula.isInvertible()).toBe(true);
|
expect(formula.isInvertible()).toBe(true);
|
||||||
expect(formula.invert(10)).compare_tolerance(0);
|
expect(() => formula.invert(10)).not.toThrow();
|
||||||
|
});
|
||||||
|
test("Non-invertible variable", () => {
|
||||||
|
const formula = Formula.add(variable.ceil(), constant);
|
||||||
|
expect(formula.isInvertible()).toBe(false);
|
||||||
|
expect(() => formula.invert(10)).toThrow();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -619,6 +626,19 @@ describe("Integrating", () => {
|
||||||
const formula = Formula.pow(1.05, variable).times(100).pow(0.5);
|
const formula = Formula.pow(1.05, variable).times(100).pow(0.5);
|
||||||
expect(() => formula.evaluateIntegral()).toThrow();
|
expect(() => formula.evaluateIntegral()).toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("Integrating with non-integrable sections", () => {
|
||||||
|
test("Non-integrable constant", () => {
|
||||||
|
const formula = Formula.add(variable, constant.ceil());
|
||||||
|
expect(formula.isIntegrable()).toBe(true);
|
||||||
|
expect(() => formula.evaluateIntegral()).not.toThrow();
|
||||||
|
});
|
||||||
|
test("Non-integrable variable", () => {
|
||||||
|
const formula = Formula.add(variable.ceil(), constant);
|
||||||
|
expect(formula.isIntegrable()).toBe(false);
|
||||||
|
expect(() => formula.evaluateIntegral()).toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Inverting integrals", () => {
|
describe("Inverting integrals", () => {
|
||||||
|
|
Loading…
Reference in a new issue