UNPKG

flexible-vector

Version:

Javascript vector library with flexible accessors

147 lines 4.87 kB
"use strict"; 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