10 lines
1.0 KiB
JavaScript
10 lines
1.0 KiB
JavaScript
const assert=require('node:assert/strict'),S=require('../js/skin-score');
|
|
function run(melanin,water,dark){const r=structuredClone(S.MOCK_RESULT);Object.assign(r.score_info,{melanin_score:melanin,water_score:water,dark_circle_score:dark});r.melasma={value:0};r.freckle={value:0};r.water={water_severity:3};return S.buildViewModel(r,S.MOCK_SIDE,{});}
|
|
for(const [m,w,d]of[[66,97,30],[99,20,99],[99,99,99],[null,97,null],[null,null,null]]){
|
|
const v=run(m,w,d),values=[v.cats.smooth.P,v.cats.tone.P].filter(x=>typeof x==='number'&&Number.isFinite(x));
|
|
assert.equal(v.dims.vita.P,Math.min(...values));assert.equal(v.vitaScoreRule,'combined-tone-smooth-min-v2');assert.equal(v.total,S.weightedTotal(v.dims));
|
|
assert.equal(v.dims.firm.P,Math.min(v.cats.contour.P,v.cats.wrinkles.P));assert.equal(v.dims.stab.P,Math.min(v.cats.sens.P,v.cats.acne.P));
|
|
}
|
|
assert(Math.abs(run(66,97,30).cats.tone.P-77.9)<1e-9);
|
|
console.log('PASS restored dimension minima: combined tone/smooth, firm/stability unchanged, missing inputs, version and weighted total');
|