From a57dbc670ea469e3ca8402087a6e5d2a0facf0c9 Mon Sep 17 00:00:00 2001 From: Stefan Eckert Date: Sun, 29 Sep 2019 13:23:15 +0200 Subject: [PATCH] fix(vector): docs for empty constructor --- src/vector.js | 56 +++++++++++++++++++++++++++++++++++++++++++++----- test/vector.js | 7 +++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/vector.js b/src/vector.js index 9bcc583d..9fab2701 100644 --- a/src/vector.js +++ b/src/vector.js @@ -33,7 +33,7 @@ function square(val) { */ class AVector { /** - * @param {number | [number, number, number] | Alg} x + * @param {number | [number, number, number] | Alg} [x] * @param {number} [y] * @param {number} [z] * @hidden @@ -230,6 +230,14 @@ class AVector { return this.dot(this); } + /** + * + * @throws SetNotImplementedError + */ + set lengthSq(_) { + throw new Error('set lengthSq() not implemented'); + } + /** * * @returns {number} @@ -238,6 +246,14 @@ class AVector { return Math.sqrt(this.lengthSq); } + /** + * + * @throws SetNotImplementedError + */ + set length(_) { + throw new Error('set length() not implemented'); + } + /** * * @returns {number} @@ -246,6 +262,14 @@ class AVector { return this.lengthSq; } + /** + * + * @throws SetNotImplementedError + */ + set lensq(_) { + throw new Error('set lensq() not implemented'); + } + /** * * @returns {number} @@ -254,6 +278,14 @@ class AVector { return this.length; } + /** + * + * @throws SetNotImplementedError + */ + set len(_) { + throw new Error('set len() not implemented'); + } + /** * * @returns {number} @@ -473,12 +505,13 @@ export function calc(alg) { const vectorFactory = cachedFactory(Vector); /** + * @typedef {() => VectorType} VectorZero * @typedef {(alg: Alg) => VectorType} VectorAlg * @typedef {(x: number , y: number, z: number) => VectorType} VectorCon * @typedef {(data: [number, number, number]) => VectorType} VectorArr - * @typedef {VectorAlg & VectorCon & VectorArr} + * @typedef {VectorAlg & VectorCon & VectorArr & VectorZero} * - * @param {number | [number, number, number] | Alg} x + * @param {number | [number, number, number] | Alg} [x] * @param {number} [y] * @param {number} [z] * @returns {VectorType} @@ -491,12 +524,13 @@ export function vector(x, y, z) { const victorFactory = cachedFactory(Victor); /** + * @typedef {() => VictorType} VictorZero * @typedef {(alg: Alg) => VictorType} VictorAlg * @typedef {(x: number , y: number, z: number) => VictorType} VictorCon * @typedef {(data: [number, number, number]) => VictorType} VictorArr - * @typedef {VictorAlg & VictorCon & VictorArr} + * @typedef {VictorAlg & VictorCon & VictorArr & VictorZero} * - * @param {number | [number, number, number] | Alg} x + * @param {number | [number, number, number] | Alg} [x] * @param {number} [y] * @param {number} [z] * @returns {VictorType} @@ -507,12 +541,18 @@ export function victor(x, y, z) { } export const Export = { + /** * @param {Alg} alg * @return {VectorType | VictorType} */ calc: alg => operatorCalc(alg), + /** + * @type {VectorZero} + */ + vector: () => vectorFactory(), + /** * @type {VectorAlg} */ @@ -528,6 +568,11 @@ export const Export = { */ vector: (x, y, z) => vectorFactory(x, y, z), + /** + * @type {VictorZero} + */ + victor: () => victorFactory(), + /** * @type {VictorAlg} */ @@ -544,6 +589,7 @@ export const Export = { victor: (x, y, z) => victorFactory(x, y, z) }; +export const ZERO = victor(0, 0, 0); export const FORWARD = victor(0, 0, -1); export const LEFT = victor(-1, 0, 0); export const UP = victor(0, 1, 0); diff --git a/test/vector.js b/test/vector.js index b977e6b9..1aa6f27c 100644 --- a/test/vector.js +++ b/test/vector.js @@ -9,6 +9,13 @@ import * as Examples from '../examples'; * @param {(typeof Vector) | (typeof Victor)} Vec3 */ const vectorTest = (vec3, Vec3) => { + it('should create empty vector', () => { + const pos = vec3(); + assert.equal(pos.x, 0); + assert.equal(pos.y, 0); + assert.equal(pos.z, 0); + }); + it('should create x y z values', () => { const pos = vec3(5, 6, 7); assert.equal(pos.x, 5);