Add regression test for modifier.getFormula respecting enabled
All checks were successful
Run Tests / test (pull_request) Successful in 2m8s

This commit is contained in:
thepaperpilot 2024-02-13 06:48:56 -06:00
parent 1b809a9550
commit 1b30560c40
2 changed files with 27 additions and 5 deletions

View file

@ -276,8 +276,12 @@ export function createExponentialModifier<T extends ExponentialModifierOptions>(
export function createSequentialModifier<
T extends Modifier[],
S = T extends WithRequired<Modifier, "invert">[]
? WithRequired<Modifier, "description" | "invert">
: Omit<WithRequired<Modifier, "description">, "invert">
? T extends WithRequired<Modifier, "getFormula">[]
? WithRequired<Modifier, "description" | "invert" | "getFormula">
: Omit<WithRequired<Modifier, "description" | "getFormula">, "invert">
: T extends WithRequired<Modifier, "invert">[]
? WithRequired<Modifier, "getFormula" | "invert">
: Omit<WithRequired<Modifier, "getFormula">, "invert">
>(modifiersFunc: () => T): S {
return createLazyProxy(() => {
const modifiers = modifiersFunc();
@ -296,10 +300,14 @@ export function createSequentialModifier<
: undefined,
getFormula: modifiers.every(m => m.getFormula != null)
? (gain: FormulaSource) =>
modifiers
modifiers.reduce((acc, curr) => {
if (curr.enabled == null || curr.enabled === true) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return curr.getFormula!(acc);
}
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
.reduce((acc, curr) => Formula.if(acc, curr.enabled ?? true,
acc => curr.getFormula!(acc), acc => acc), gain)
return Formula.if(acc, curr.enabled, acc => curr.getFormula!(acc));
}, gain)
: undefined,
enabled: modifiers.some(m => m.enabled != null)
? computed(() => modifiers.filter(m => unref(m.enabled) !== false).length > 0)

View file

@ -199,6 +199,20 @@ describe("Sequential Modifiers", () => {
// So long as one is true or undefined, enable should be true
expect(unref(modifier.enabled)).toBe(true);
});
test("respects enabled", () => {
const value = ref(10);
const enabled = ref(false);
const modifier = createSequentialModifier(() => [
createMultiplicativeModifier(() => ({ multiplier: 5, enabled }))
]);
expect(modifier.getFormula(Formula.variable(value)).evaluate()).compare_tolerance(
value.value
);
enabled.value = true;
expect(modifier.getFormula(Formula.variable(value)).evaluate()).not.compare_tolerance(
value.value
);
});
});
describe("applies smallerIsBetter correctly", () => {