Chaining Test (v2)

Revision 2 of this benchmark created on


Setup

let entities = {"0":{"id":0,"x":0.9946533074778419,"y":0.3059083515828709},"1":{"id":1,"x":1.0583496360468558,"y":13.57576522639433},"2":{"id":2,"x":11.022155707329242,"y":16.136028602302094},"3":{"id":3,"x":7.862940199939628,"y":14.658491775022458},"4":{"id":4,"x":9.151338731419196,"y":0.05540801408666418},"5":{"id":5,"x":9.35792925180948,"y":15.998868306222004},"6":{"id":6,"x":0.04234965467271756,"y":15.53116808235191},"7":{"id":7,"x":13.361970012144674,"y":15.573269525275935},"8":{"id":8,"x":13.48527611008735,"y":15.268277308416923},"9":{"id":9,"x":10.301396661968845,"y":16.794671027907647},"10":{"id":10,"x":11.953317636064437,"y":4.769271490647999},"11":{"id":11,"x":19.71572958251297,"y":14.236069837927822},"12":{"id":12,"x":3.24569556800661,"y":0.7397951818655901},"13":{"id":13,"x":17.88807574677351,"y":11.576808631692849},"14":{"id":14,"x":15.13445542550163,"y":11.47587723515171},"15":{"id":15,"x":1.9252283495754252,"y":12.413823796865993},"16":{"id":16,"x":9.950926239779715,"y":7.927836224087068},"17":{"id":17,"x":1.1094953500031357,"y":13.639501983985983},"18":{"id":18,"x":19.622739214024904,"y":11.038672560446003},"19":{"id":19,"x":1.6343388198246789,"y":5.720433747341076},"20":{"id":20,"x":8.97545381628273,"y":5.177715957260172},"21":{"id":21,"x":5.587454951617303,"y":4.54559624128458},"22":{"id":22,"x":8.167011934653825,"y":11.91465804496865},"23":{"id":23,"x":19.063229598478635,"y":5.256922690105585},"24":{"id":24,"x":2.64774224428987,"y":14.115759935349601},"25":{"id":25,"x":6.213771950118843,"y":10.440119491163298},"26":{"id":26,"x":19.64130209073518,"y":5.467279508652849},"27":{"id":27,"x":12.825207959187349,"y":5.996806015464173},"28":{"id":28,"x":3.7538852370797393,"y":19.964851171317154},"29":{"id":29,"x":12.272499376796508,"y":8.88894575986923}};

function distance_squared(a, b) {
	let dx = a.x - b.x;
	let dy = a.y - b.y;
	return dx * dx + dy * dy;
}

Test runner

Ready to run.

Testing in
TestOps/sec
Thmsn
let chainTargets = [];
let previousTarget = entities["0"];
while(chainTargets.length < 5) {
	const targets = Object.values(entities).map((m) => ({
		target: m,
		distance: distance_squared(m, previousTarget)
	})).filter((m) => {
		if(m.target.id == previousTarget.id || chainTargets.includes(m.target)) {
			return false;
		}
		return m.distance <= 100 * 100;
	}).sort((a, b) => a.distance - b.distance);
	const entity = targets.shift();
	if (!entity) {				
		break;
	}

	previousTarget = entity.target;
	chainTargets.push(previousTarget);
}
ready
Aria
let chainTargets = [];
let previousTarget = entities["0"];
while(chainTargets.length < 5) {
    let closest_dist = Infinity;
    let closest_entity = null;
    for(let id in entities) {
        let entity = entities[id];
        if(entity.id == previousTarget.id || chainTargets.includes(entity)) {
            continue;
        }
        let dist = distance_squared(entity, previousTarget);
        if(dist < closest_dist) {
            closest_dist = dist;
            closest_entity = entity;
        }
    }
    if(closest_dist > 100 * 100) {
        break;
    }
	previousTarget = closest_entity;
	chainTargets.push(previousTarget);
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.