d3-force/test/collide-test.js
Philippe Rivière 8aed9d462f
Adopt type=module (#192)
* Adopt type=module

follow changes in d3-format:
* type=module
* add exports
* remove zip
* license: ISC
* update dependencies

* es6 rather than no-undef

* remove Sublime project

* add eslint.json

* related d3/d3#3502; extract copyrights from LICENSE

* update dependencies

* stricter eslint

* cleaner imports

* Update README

Co-authored-by: Mike Bostock <mbostock@gmail.com>
2021-06-05 12:09:51 -07:00

51 lines
2.1 KiB
JavaScript

import assert from "assert";
import {forceCollide, forceSimulation} from "../src/index.js";
import {assertNodeEqual} from "./asserts.js";
it("forceCollide collides nodes", () => {
const collide = forceCollide(1);
const f = forceSimulation().force("collide", collide).stop();
const a = {}, b = {}, c = {};
f.nodes([a, b, c]);
f.tick(10);
assertNodeEqual(a, {index: 0, x: 7.0710678118654755, y: 0, vy: 0, vx: 0});
assertNodeEqual(b, {index: 1, x: -9.03088751750192, y: 8.27303273571596, vy: 0, vx: 0});
assertNodeEqual(c, {index: 2, x: 1.3823220809823638, y: -15.750847141167634, vy: 0, vx: 0});
collide.radius(100);
f.tick(10);
assertNodeEqual(a, {index: 0, x: 174.08616723117228, y: 66.51743051995625, vy: 0.26976816231064354, vx: 0.677346615710878});
assertNodeEqual(b, {index: 1, x: -139.73606544743998, y: 95.69860503079263, vy: 0.3545632444404687, vx: -0.5300880593105067});
assertNodeEqual(c, {index: 2, x: -34.9275994083864, y: -169.69384995620052, vy: -0.6243314067511122, vx: -0.1472585564003713});
});
it("forceCollide respects fixed positions", () => {
const collide = forceCollide(1);
const f = forceSimulation().force("collide", collide).stop();
const a = {fx: 0, fy: 0}, b = {}, c = {};
f.nodes([a, b, c]);
f.tick(10);
assertNodeEqual(a, {fx: 0, fy: 0, index: 0, x: 0, y: 0, vy: 0, vx: 0});
collide.radius(100);
f.tick(10);
assertNodeEqual(a, {fx: 0, fy: 0, index: 0, x: 0, y: 0, vy: 0, vx: 0});
});
it("forceCollide jiggles equal positions", () => {
const collide = forceCollide(1);
const f = forceSimulation().force("collide", collide).stop();
const a = {x: 0, y: 0}, b = {x: 0, y: 0};
f.nodes([a, b]);
f.tick();
assert(a.x !== b.x);
assert(a.y !== b.y);
assert.strictEqual(a.vx, -b.vx);
assert.strictEqual(a.vy, -b.vy);
});
it("forceCollide jiggles in a reproducible way", () => {
const nodes = Array.from({length:10}, () => ({x: 0, y: 0}));
forceSimulation().nodes(nodes).force("collide", forceCollide()).stop().tick(50);
assertNodeEqual(nodes[0], {x: -5.371433857229194, y: -2.6644608278592576, index: 0, vy: 0, vx: 0});
});