'use strict'; const test = require('node:test'); const assert = require('node:assert'); const chunkPos = require('../src/core/chunkPos'); test('fromBlock 向下取整且兼容负数坐标', () => { assert.deepStrictEqual(chunkPos.fromBlock(0, 0), { x: 0, z: 0 }); assert.deepStrictEqual(chunkPos.fromBlock(15, 15), { x: 0, z: 0 }); assert.deepStrictEqual(chunkPos.fromBlock(16, 31), { x: 1, z: 1 }); // 负数必须向下取整到更小的区块号,而不是向零取整 assert.deepStrictEqual(chunkPos.fromBlock(-1, -16), { x: -1, z: -1 }); assert.deepStrictEqual(chunkPos.fromBlock(-17, -33), { x: -2, z: -3 }); }); test('key/decode 往返一致(含负数与边界)', () => { const samples = [ [0, 0], [1, 0], [0, 1], [-1, 0], [0, -1], [-1, -1], [1279, 1279], [-1280, -1280], [12345, -54321], [-2048, 2048] ]; for (const [x, z] of samples) { const decoded = chunkPos.decode(chunkPos.key(x, z)); assert.deepStrictEqual(decoded, { x, z }, `坐标 ${x},${z} 编解码不一致`); } }); test('key 对不同坐标产生不同键', () => { const seen = new Set(); for (let x = -50; x <= 50; x++) { for (let z = -50; z <= 50; z++) { const k = chunkPos.key(x, z); assert.ok(!seen.has(k), `键冲突:${x},${z}`); seen.add(k); } } assert.strictEqual(seen.size, 101 * 101); }); test('centerBlock 取区块中心(+8)', () => { assert.strictEqual(chunkPos.centerBlockX(0), 8); assert.strictEqual(chunkPos.centerBlockX(-1), -8); assert.strictEqual(chunkPos.centerBlockZ(3), 56); }); test('曼哈顿与切比雪夫距离', () => { assert.strictEqual(chunkPos.manhattan({ x: 0, z: 0 }, { x: 3, z: -4 }), 7); assert.strictEqual(chunkPos.chebyshev({ x: 0, z: 0 }, { x: 3, z: -4 }), 4); assert.strictEqual(chunkPos.chebyshev({ x: 5, z: 5 }, { x: 5, z: 5 }), 0); }); test('equals 处理 null 与同值', () => { assert.strictEqual(chunkPos.equals({ x: 1, z: 2 }, { x: 1, z: 2 }), true); assert.strictEqual(chunkPos.equals({ x: 1, z: 2 }, { x: 2, z: 1 }), false); assert.strictEqual(chunkPos.equals(null, null), true); assert.strictEqual(chunkPos.equals({ x: 1, z: 2 }, null), false); }); test('cardinalNeighbors 返回四个正方向邻居', () => { const neighbors = chunkPos.cardinalNeighbors(0, 0).map((c) => `${c.x},${c.z}`); assert.deepStrictEqual(neighbors.sort(), ['-1,0', '0,-1', '0,1', '1,0']); }); test('withinWorldBorder 以 ±1280 为界', () => { assert.strictEqual(chunkPos.withinWorldBorder(0, 0), true); assert.strictEqual(chunkPos.withinWorldBorder(1279, -1280), true); assert.strictEqual(chunkPos.withinWorldBorder(1280, 0), false); assert.strictEqual(chunkPos.withinWorldBorder(0, -1281), false); });