44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { weightStandardData } from '../../mockData/weightStandardData.ts';
|
|
import { getTargetGainForAge, getTargetWeightForAge } from '../weight.ts';
|
|
|
|
function rowForDoc(docWeight: number) {
|
|
return weightStandardData.data.find((row) => row.day === docWeight)!;
|
|
}
|
|
|
|
describe('getTargetWeightForAge', () => {
|
|
it('uses the exact DOC-weight row and age column', () => {
|
|
const row = rowForDoc(42);
|
|
expect(getTargetWeightForAge(1, 42)).toBe(row.values[0]);
|
|
expect(getTargetWeightForAge(35, 42)).toBe(row.values[34]);
|
|
});
|
|
|
|
it('clamps below-range DOC weight to the 35 g row', () => {
|
|
const row = rowForDoc(35);
|
|
expect(getTargetWeightForAge(7, 20)).toBe(row.values[6]);
|
|
expect(getTargetWeightForAge(7, 30)).toBe(row.values[6]);
|
|
});
|
|
|
|
it('clamps above-range DOC weight to the 51 g row', () => {
|
|
const row = rowForDoc(51);
|
|
expect(getTargetWeightForAge(7, 52)).toBe(row.values[6]);
|
|
expect(getTargetWeightForAge(7, 60)).toBe(row.values[6]);
|
|
});
|
|
|
|
it('returns null for ages outside 1..35', () => {
|
|
expect(getTargetWeightForAge(0, 42)).toBeNull();
|
|
expect(getTargetWeightForAge(36, 42)).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe('getTargetGainForAge', () => {
|
|
it('returns day-over-day delta from the DOC-weight row', () => {
|
|
const row = rowForDoc(40);
|
|
expect(getTargetGainForAge(2, 40)).toBe(row.values[1]! - row.values[0]!);
|
|
});
|
|
|
|
it('returns null for age 1', () => {
|
|
expect(getTargetGainForAge(1, 40)).toBeNull();
|
|
});
|
|
});
|