Grains resting on anything built cast no shadow (t37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+34
-3
@@ -97,9 +97,10 @@ for (const [name, support, depth, gap, expected] of [
|
||||
['12 falling grains', '', 12, '', true],
|
||||
['13 falling grains', '', 13, '', false],
|
||||
['natural ledge', 'mat[i] = STONE; flags[i] = F_NAT', 3, '', false],
|
||||
['wall floor', 'mat[i] = STONE', 3, '', false],
|
||||
['tube', 'part[i] = P_TR', 3, '', false],
|
||||
['loaded tube', 'mat[i] = SAND; part[i] = P_TR', 3, '', false],
|
||||
['deep natural heap', 'mat[i] = SAND; flags[i] = F_NAT', 13, '', false],
|
||||
['wall floor', 'mat[i] = STONE', 3, '', true],
|
||||
['tube', 'part[i] = P_TR', 3, '', true],
|
||||
['loaded tube', 'mat[i] = SAND; part[i] = P_TR', 3, '', true],
|
||||
]) {
|
||||
run(`
|
||||
for (let y = 40; y <= 53; y++) { const i = y * W + 300; mat[i] = SAND; part[i] = 0; flags[i] = 0; }
|
||||
@@ -112,4 +113,34 @@ run('mat[40 * W + 300] = SAND; mat[41 * W + 300] = EMPTY;');
|
||||
check('a single grain in mid-air is see-through', run('looseForLight(40 * W + 300)'));
|
||||
run('mat[(H - 1) * W + 300] = SAND;');
|
||||
check('loose cell detection stops at the world bottom', run('!looseForLight((H - 1) * W + 300)'));
|
||||
|
||||
flatWorld(run, 320, 200, 160);
|
||||
run(`
|
||||
bot.lamp = false; stats.refined = 0;
|
||||
placeBlock(BP_GRIND, 0, 20, 20, true);
|
||||
for (let bx = 8; bx < 30; bx++) placeBlock(BP_BELT, 1, bx, 36, true);
|
||||
setCell(79 * W + 80, SAND, AMB[79], 0);
|
||||
`);
|
||||
check('sand resting on grinder housing is see-through', run('looseForLight(79 * W + 80)'));
|
||||
for (const mode of ['full', 'fast']) {
|
||||
const result = run(`(() => {
|
||||
SET.lighting = '${mode}';
|
||||
let mismatches = 0, first = '';
|
||||
for (let t = 0; t < 180; t++) {
|
||||
if (t % 4 === 0) setCell(48 * W + 80, SAND, AMB[48], 0);
|
||||
simTick();
|
||||
computeLight();
|
||||
for (const a of [R.lr, R.lg, R.lb]) for (let x = 76; x < 88; x += 2) {
|
||||
const below = lightAt(a, x, 160), open = lightAt(a, 152, 160);
|
||||
if (Math.abs(below - open) > 1e-6) {
|
||||
mismatches++;
|
||||
if (!first) first = 'tick ' + tick + ', x ' + x + ': ' + below + ' / ' + open;
|
||||
}
|
||||
}
|
||||
}
|
||||
return { mismatches, first };
|
||||
})()`);
|
||||
check(`${mode}: streaming grinder leaves ground in daylight for 180 consecutive ticks`, result.mismatches === 0, result.first || 'no shadow');
|
||||
}
|
||||
check('the streaming grinder actually processes its input', run('stats.refined > 0'), run('stats.refined'));
|
||||
done();
|
||||
|
||||
Reference in New Issue
Block a user