flexible-vector
Version:
Javascript vector library with flexible accessors
147 lines • 4.87 kB
JavaScript
;
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
var __1 = require("../");
describe("generic vector", function () {
test("component access", function () {
var v = __1.vector3(1, 2, 3);
expect(v[0]).toBe(1);
expect(v[1]).toBe(2);
expect(v[2]).toBe(3);
});
test("component access", function () {
var v = __1.vector3(1, 2, 3);
v[1] = 4;
expect(v.y).toBe(4);
});
test("iterator pattern", function () {
var v = __1.vector3(1, 2, 3);
expect(__spread(v)).toStrictEqual([1, 2, 3]);
});
test("add different length vectors", function () {
var v1 = __1.vector(1, 2, 3);
var v2 = __1.vector(1, 2);
expect(function () { return v1.plus(v2); }).toThrow("can only add product vectors of same size, got 3 and 2");
});
});
describe("vector3", function () {
test("creating a 3 vector, checking xyz components getters", function () {
var v = __1.vector3(1, 2, 3);
expect(v.x).toBe(1);
expect(v.y).toBe(2);
expect(v.z).toBe(3);
});
test("creating a 3 vector, checking xyz components setters", function () {
var v = __1.vector3(1, 2, 3);
v.x = 4;
v.y = 5;
v.z = 6;
expect(__spread(v)).toStrictEqual([4, 5, 6]);
});
});
describe("vector4", function () {
test("creating a 4 vector, checking rgba components getters", function () {
var v = __1.vector4(1, 2, 3, 4);
expect(v.r).toBe(1);
expect(v.g).toBe(2);
expect(v.b).toBe(3);
expect(v.a).toBe(4);
});
test("creating a 4 vector, checking rgba components setters", function () {
var v = __1.vector4(1, 2, 3, 4);
v.r = 5;
v.g = 6;
v.b = 7;
v.a = 8;
expect(__spread(v)).toStrictEqual([5, 6, 7, 8]);
});
test("multiple components as subvector getters", function () {
var v = __1.vector4(1, 2, 3, 4);
expect(v.rg.equals(__1.vector2(1, 2))).toBe(true);
expect(v.bgr.equals(__1.vector3(3, 2, 1))).toBe(true);
});
test("multiple components as subvector setters", function () {
var v = __1.vector4(1, 2, 3, 4);
v.gr = __1.vector2(5, 6);
expect(__spread(v)).toStrictEqual([6, 5, 3, 4]);
v.ba = v.ab;
expect(__spread(v)).toStrictEqual([6, 5, 4, 3]);
});
});
describe("vector2", function () {
test("dot product", function () {
var v1 = __1.vector(1, 2);
var v2 = __1.vector(1, 0);
expect(v1.dot(v2)).toBe(1);
});
test("vector addition", function () {
var v1 = __1.vector2(1, 2);
var v2 = __1.vector2(1, 0);
var res = v1.plus(v2);
expect(res.x).toBe(2);
expect(res.y).toBe(2);
});
test("vector subtraction", function () {
var v1 = __1.vector2(1, 2);
var v2 = __1.vector2(1, 0);
var res = v1.minus(v2);
expect(res.x).toBe(0);
expect(res.y).toBe(2);
});
test("vector type after operations", function () {
var v1 = __1.vector2(1, 2);
var v2 = __1.vector2(1, 0);
var v3 = v1.plus(v2).times(1);
expect(v3.x).toBe(2);
expect(v3.y).toBe(2);
});
test("2D rotation", function () {
var v1 = __1.vector2(1, 0);
var v2 = v1.rotate(Math.PI / 2);
expect(v2.x).toBeCloseTo(0);
expect(v2.y).toBeCloseTo(1);
});
test("zero vector", function () {
var v1 = __1.vector2(0, 0);
expect(v1.x).toBe(0);
expect(v1.y).toBe(0);
});
test("logging", function () {
var v1 = __1.vector2(1, 1);
console.log(v1);
});
test("cross product", function () {
var v1 = __1.vector2(1, 0);
var v2 = __1.vector2(0, 1);
expect(v1.cross(v2)).toBe(1);
expect(v2.cross(v1)).toBe(-1);
});
test("angle", function () {
var v1 = __1.vector2(1, 0);
expect(v1.angle()).toBe(0);
var v2 = __1.vector2(1, 1);
expect(v2.angle()).toBe(Math.PI / 4);
var v3 = __1.vector2(0, 1);
expect(v3.angle()).toBe(Math.PI / 2);
});
});
//# sourceMappingURL=vector.test.js.map