2021-04-22 19:29:18 +02:00
|
|
|
const expect = require("chai").expect;
|
2022-06-12 21:49:34 +02:00
|
|
|
const freesewing = require("../dist/index.js");
|
2021-04-22 19:29:18 +02:00
|
|
|
const Point = freesewing.Point;
|
|
|
|
const round = freesewing.utils.round;
|
2018-07-12 12:53:49 +00:00
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should return point object", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let result = new Point(2, 4);
|
|
|
|
expect(result).to.be.a("object");
|
2018-07-12 12:53:49 +00:00
|
|
|
expect(result.x).to.equal(2);
|
|
|
|
expect(result.y).to.equal(4);
|
|
|
|
});
|
|
|
|
|
2021-04-22 19:29:18 +02:00
|
|
|
it("Should not limit point precision", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let result = new Point(2.12345, 4.98765);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(result.x).to.equal(2.12345);
|
|
|
|
expect(result.y).to.equal(4.98765);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should return distance", () => {
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(new Point(2, 4).dist(new Point(-123, -32423)))).to.equal(32427.24);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should return slope", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let from = new Point(0, 0);
|
|
|
|
expect(from.slope(new Point(0, -10))).to.equal(-Infinity);
|
|
|
|
expect(from.slope(new Point(10, 0))).to.equal(0);
|
|
|
|
expect(from.slope(new Point(0, 10))).to.equal(Infinity);
|
|
|
|
expect(from.slope(new Point(-10, 0))).to.equal(-0);
|
|
|
|
expect(from.slope(new Point(10, 10))).to.equal(1);
|
|
|
|
expect(from.slope(new Point(-10, 5))).to.equal(-0.5);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should return angle", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let from = new Point(0, 0);
|
|
|
|
expect(from.angle(new Point(10, 0))).to.equal(0);
|
|
|
|
expect(from.angle(new Point(-20, 0))).to.equal(180);
|
|
|
|
expect(from.angle(new Point(0, -10))).to.equal(90);
|
|
|
|
expect(from.angle(new Point(0, 10))).to.equal(270);
|
|
|
|
expect(from.angle(new Point(10, -10))).to.equal(45);
|
|
|
|
expect(from.angle(new Point(10, 10))).to.equal(315);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should copy a point", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let result = new Point(2, 4).copy();
|
2018-07-12 12:53:49 +00:00
|
|
|
expect(result.x).to.equal(2);
|
|
|
|
expect(result.y).to.equal(4);
|
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should check points for equality", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let a = new Point(-123, 456);
|
|
|
|
let b = new Point(-123, 456);
|
2018-07-12 12:53:49 +00:00
|
|
|
expect(a).to.deep.equal(b);
|
|
|
|
});
|
|
|
|
|
2019-02-24 13:00:55 +01:00
|
|
|
it("Should flip point around unset X value", () => {
|
2018-09-07 16:09:14 +02:00
|
|
|
let result = new Point(2, 4).flipX();
|
|
|
|
expect(result.x).to.equal(-2);
|
|
|
|
expect(result.y).to.equal(4);
|
|
|
|
});
|
|
|
|
|
2019-02-24 13:00:55 +01:00
|
|
|
it("Should flip point around X value that is zero", () => {
|
2019-04-13 14:45:17 +02:00
|
|
|
let flip = new Point(0, 0);
|
|
|
|
let result = new Point(2, 4).flipX(flip);
|
2019-02-24 13:00:55 +01:00
|
|
|
expect(result.x).to.equal(-2);
|
|
|
|
expect(result.y).to.equal(4);
|
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should flip point around X value", () => {
|
2018-08-14 16:33:12 +02:00
|
|
|
let result = new Point(2, 4).flipX(new Point(-20, 19));
|
2018-07-12 12:53:49 +00:00
|
|
|
expect(result.x).to.equal(-42);
|
|
|
|
expect(result.y).to.equal(4);
|
|
|
|
});
|
|
|
|
|
2019-02-24 13:00:55 +01:00
|
|
|
it("Should flip point around unset Y value", () => {
|
2018-09-07 16:09:14 +02:00
|
|
|
let result = new Point(2, 4).flipY();
|
|
|
|
expect(result.x).to.equal(2);
|
|
|
|
expect(result.y).to.equal(-4);
|
|
|
|
});
|
|
|
|
|
2019-02-24 13:00:55 +01:00
|
|
|
it("Should flip point around Y value that is zero", () => {
|
2019-04-13 14:45:17 +02:00
|
|
|
let flip = new Point(0, 0);
|
|
|
|
let result = new Point(2, 4).flipY(flip);
|
2019-02-24 13:00:55 +01:00
|
|
|
expect(result.x).to.equal(2);
|
|
|
|
expect(result.y).to.equal(-4);
|
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should flip point around Y value", () => {
|
2018-08-14 16:33:12 +02:00
|
|
|
let result = new Point(2, 4).flipY(new Point(12, -14));
|
2018-07-12 12:53:49 +00:00
|
|
|
expect(result.x).to.equal(2);
|
|
|
|
expect(result.y).to.equal(-32);
|
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should shift a point", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let origin = new Point(0, 0);
|
2018-07-12 12:53:49 +00:00
|
|
|
let n = origin.shift(90, 10);
|
|
|
|
let e = origin.shift(0, 10);
|
|
|
|
let s = origin.shift(270, 10);
|
|
|
|
let w = origin.shift(180, 10);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(n.x)).to.equal(0);
|
|
|
|
expect(round(n.y)).to.equal(-10);
|
|
|
|
expect(round(e.x)).to.equal(10);
|
|
|
|
expect(round(e.y)).to.equal(0);
|
|
|
|
expect(round(s.x)).to.equal(0);
|
|
|
|
expect(round(s.y)).to.equal(10);
|
|
|
|
expect(round(w.x)).to.equal(-10);
|
|
|
|
expect(round(w.y)).to.equal(0);
|
2018-07-12 12:53:49 +00:00
|
|
|
let rand = origin.shift(-123, 456);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(rand.x)).to.equal(-248.36);
|
|
|
|
expect(round(rand.y)).to.equal(382.43);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should shift a point towards another", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let origin = new Point(0, 0);
|
|
|
|
let n = new Point(0, -10);
|
|
|
|
let e = new Point(10, 0);
|
|
|
|
let s = new Point(0, 10);
|
|
|
|
let w = new Point(-10, 0);
|
2018-07-12 12:53:49 +00:00
|
|
|
let sn = origin.shiftTowards(n, 123);
|
|
|
|
let se = origin.shiftTowards(e, 123);
|
|
|
|
let ss = origin.shiftTowards(s, 123);
|
|
|
|
let sw = origin.shiftTowards(w, 123);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(sn.x)).to.equal(0);
|
|
|
|
expect(round(sn.y)).to.equal(-123);
|
|
|
|
expect(round(se.x)).to.equal(123);
|
|
|
|
expect(round(se.y)).to.equal(0);
|
|
|
|
expect(round(ss.x)).to.equal(0);
|
|
|
|
expect(round(ss.y)).to.equal(123);
|
|
|
|
expect(round(sw.x)).to.equal(-123);
|
|
|
|
expect(round(sw.y)).to.equal(0);
|
|
|
|
expect(round(sw.shiftTowards(sn, 100).x)).to.equal(-52.29);
|
|
|
|
expect(round(ss.shiftTowards(se, 200).y)).to.equal(-18.42);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should shift a point a fraction towards another", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let origin = new Point(0, 0);
|
|
|
|
let n = new Point(0, -10);
|
|
|
|
let e = new Point(10, 0);
|
|
|
|
let s = new Point(0, 10);
|
|
|
|
let w = new Point(-10, 0);
|
2018-07-12 12:53:49 +00:00
|
|
|
let sn = origin.shiftFractionTowards(n, 1.5);
|
|
|
|
let se = origin.shiftFractionTowards(e, 1.5);
|
|
|
|
let ss = origin.shiftFractionTowards(s, 0.5);
|
|
|
|
let sw = origin.shiftFractionTowards(w, 2.5);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(sn.x)).to.equal(0);
|
|
|
|
expect(round(sn.y)).to.equal(-15);
|
|
|
|
expect(round(se.x)).to.equal(15);
|
|
|
|
expect(round(se.y)).to.equal(0);
|
|
|
|
expect(round(ss.x)).to.equal(0);
|
|
|
|
expect(round(ss.y)).to.equal(5);
|
|
|
|
expect(round(sw.x)).to.equal(-25);
|
|
|
|
expect(round(sw.y)).to.equal(0);
|
|
|
|
expect(round(sw.shiftFractionTowards(sn, 100).x)).to.equal(2475);
|
|
|
|
expect(round(ss.shiftFractionTowards(se, 200).y)).to.equal(-995);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should shift a point beyond another", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let origin = new Point(0, 0);
|
|
|
|
let n = new Point(0, -10);
|
|
|
|
let e = new Point(10, 0);
|
|
|
|
let s = new Point(0, 10);
|
|
|
|
let w = new Point(-10, 0);
|
2018-07-12 12:53:49 +00:00
|
|
|
let sn = origin.shiftOutwards(n, 100);
|
|
|
|
let se = origin.shiftOutwards(e, 100);
|
|
|
|
let ss = origin.shiftOutwards(s, 100);
|
|
|
|
let sw = origin.shiftOutwards(w, 100);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(sn.x)).to.equal(0);
|
|
|
|
expect(round(sn.y)).to.equal(-110);
|
|
|
|
expect(round(se.x)).to.equal(110);
|
|
|
|
expect(round(se.y)).to.equal(0);
|
|
|
|
expect(round(ss.x)).to.equal(0);
|
|
|
|
expect(round(ss.y)).to.equal(110);
|
|
|
|
expect(round(sw.x)).to.equal(-110);
|
|
|
|
expect(round(sw.y)).to.equal(0);
|
|
|
|
expect(round(sw.shiftOutwards(sn, 100).x)).to.equal(70.71);
|
|
|
|
expect(round(ss.shiftOutwards(se, 200).y)).to.equal(-141.42);
|
2018-07-12 12:53:49 +00:00
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should rotate a point around another", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let sun = new Point(0, 0);
|
|
|
|
let moon = new Point(10, 0);
|
2018-07-19 09:29:25 +00:00
|
|
|
let a = moon.rotate(90, sun);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(a.x)).to.equal(0);
|
|
|
|
expect(round(a.y)).to.equal(-10);
|
2018-07-19 09:29:25 +00:00
|
|
|
let b = moon.rotate(-90, sun);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(b.x)).to.equal(0);
|
|
|
|
expect(round(b.y)).to.equal(10);
|
2018-07-19 09:29:25 +00:00
|
|
|
let c = moon.rotate(180, sun);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(c.x)).to.equal(-10);
|
|
|
|
expect(round(c.y)).to.equal(0);
|
2018-08-11 19:17:39 +02:00
|
|
|
let sun2 = new Point(222, 44);
|
|
|
|
let moon2 = new Point(212, 41);
|
2018-07-19 09:29:25 +00:00
|
|
|
let d = moon2.rotate(90, sun2);
|
2021-04-22 19:29:18 +02:00
|
|
|
expect(round(d.x)).to.equal(219);
|
|
|
|
expect(round(d.y)).to.equal(54);
|
2018-07-19 09:29:25 +00:00
|
|
|
});
|
2018-08-11 19:17:39 +02:00
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should set an attribute", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let p = new Point(0, 0).attr("class", "test");
|
|
|
|
expect(p.attributes.get("class")).to.equal("test");
|
|
|
|
p.attr("class", "more");
|
|
|
|
expect(p.attributes.get("class")).to.equal("test more");
|
|
|
|
p.attr("class", "less", true);
|
|
|
|
expect(p.attributes.get("class")).to.equal("less");
|
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should detect points in the same location", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let p1 = new Point(123, 456);
|
|
|
|
let p2 = new Point(123, 456);
|
|
|
|
expect(p1.sitsOn(p2)).to.equal(true);
|
|
|
|
p2.x = 122.99;
|
|
|
|
expect(p1.sitsOn(p2)).to.equal(false);
|
|
|
|
});
|
|
|
|
|
2018-08-12 12:37:30 +02:00
|
|
|
it("Should clone a point", () => {
|
2018-08-11 19:17:39 +02:00
|
|
|
let p1 = new Point(123, 456).attr("class", "something");
|
|
|
|
p1.attr("class", "else");
|
|
|
|
let p2 = p1.clone();
|
|
|
|
expect(p2.sitsOn(p1)).to.equal(true);
|
|
|
|
expect(p2.attributes.get("class")).to.equal("something else");
|
|
|
|
});
|
2018-09-07 16:09:14 +02:00
|
|
|
|
|
|
|
it("Should translate a point", () => {
|
|
|
|
let p1 = new Point(10, 20);
|
|
|
|
let p2 = p1.translate(15, 50);
|
|
|
|
expect(p2.x).to.equal(25);
|
|
|
|
expect(p2.y).to.equal(70);
|
|
|
|
});
|