22 lines
1.8 KiB
JavaScript
22 lines
1.8 KiB
JavaScript
'use strict';
|
|
const {assert,loadAppLogic}=require('./helpers/app-source');
|
|
const AppLogic=loadAppLogic(),samples=[],storeCoefficients=[];
|
|
for(let seed=1;seed<=5000;seed++){
|
|
const level=1+(seed%10),baseScore=20+level*level*4,meta={id:`B${seed}`,seed,generatorVersion:5},
|
|
state={paths:[{startGate:0,endGate:1,cells:[[0,0],[0,1],[1,1],[1,2]]}]},
|
|
reward=AppLogic.deterministicBoardReward(baseScore,{worldSeed:0x51a7f00d,meta,state});
|
|
assert(reward.coefficient>=.8&&reward.coefficient<=1.2,'Board coefficient escaped its bound');
|
|
samples.push(reward.award);
|
|
const prices=[700,1400,1800,2400].map(base=>AppLogic.deterministicStorePrice(base,0x51a7f00d,seed%97,Math.floor(seed/97),1));
|
|
assert(prices.every(entry=>entry.coefficient===prices[0].coefficient),'Products in one store received different coefficients');
|
|
storeCoefficients.push(prices[0].coefficient);
|
|
}
|
|
const mean=values=>values.reduce((sum,value)=>sum+value,0)/values.length,
|
|
rewardMean=mean(samples),storeMean=mean(storeCoefficients);
|
|
assert(storeMean>.99&&storeMean<1.01,'Store coefficient distribution is materially biased');
|
|
assert(rewardMean>100&&rewardMean<230,'Reward rebalance left the measured progression band');
|
|
assert(700<1400&&1400<1800&&1800<2400,'Cosmetics/lens/field price ladder is invalid');
|
|
assert(1400/rewardMean>5&&1400/rewardMean<15,'Score lens is either trivial or effectively mandatory');
|
|
assert(2400/rewardMean<24,'MAX field is outside a meaningful attainable score-sink range');
|
|
assert(AppLogic.deterministicBoardReward(100,{meta:{id:'B1',seed:1,generatorVersion:5},state:{paths:[]},scoreLensCount:100}).lensMultiplier===1.5,'Repeated lenses create unbounded score inflation');
|
|
console.log(`Economy simulation passed: mean reward ${rewardMean.toFixed(2)}, mean coefficient ${storeMean.toFixed(4)}`);
|