@vived/core 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AppObject/AppObject.js +59 -0
- package/dist/cjs/AppObject/AppObject.js.map +1 -0
- package/dist/cjs/AppObject/AppObject.test.js +113 -0
- package/dist/cjs/AppObject/AppObject.test.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectComponent.js +82 -0
- package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectComponent.test.js +132 -0
- package/dist/cjs/AppObject/AppObjectComponent.test.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectController.js +12 -0
- package/dist/cjs/AppObject/AppObjectController.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectEntity.js +38 -0
- package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectEntity.test.js +108 -0
- package/dist/cjs/AppObject/AppObjectEntity.test.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectEntityRepo.js +56 -0
- package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +149 -0
- package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectPM.js +40 -0
- package/dist/cjs/AppObject/AppObjectPM.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectPM.test.js +103 -0
- package/dist/cjs/AppObject/AppObjectPM.test.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectRepo.js +133 -0
- package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectRepo.test.js +213 -0
- package/dist/cjs/AppObject/AppObjectRepo.test.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectUC.js +12 -0
- package/dist/cjs/AppObject/AppObjectUC.js.map +1 -0
- package/dist/cjs/AppObject/AppObjectView.js +12 -0
- package/dist/cjs/AppObject/AppObjectView.js.map +1 -0
- package/dist/cjs/AppObject/getSingletonComponent.js +7 -0
- package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -0
- package/dist/cjs/AppObject/getSingletonComponent.test.js +13 -0
- package/dist/cjs/AppObject/getSingletonComponent.test.js.map +1 -0
- package/dist/cjs/AppObject/index.js +27 -0
- package/dist/cjs/AppObject/index.js.map +1 -0
- package/dist/cjs/AppObject/printAppObjectDetails.js +18 -0
- package/dist/cjs/AppObject/printAppObjectDetails.js.map +1 -0
- package/dist/cjs/Entities/MemoizedAngle.js +23 -0
- package/dist/cjs/Entities/MemoizedAngle.js.map +1 -0
- package/dist/cjs/Entities/MemoizedAngle.test.js +30 -0
- package/dist/cjs/Entities/MemoizedAngle.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedBoolean.js +23 -0
- package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -0
- package/dist/cjs/Entities/MemoizedBoolean.test.js +34 -0
- package/dist/cjs/Entities/MemoizedBoolean.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedColor.js +24 -0
- package/dist/cjs/Entities/MemoizedColor.js.map +1 -0
- package/dist/cjs/Entities/MemoizedColor.test.js +32 -0
- package/dist/cjs/Entities/MemoizedColor.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedNumber.js +23 -0
- package/dist/cjs/Entities/MemoizedNumber.js.map +1 -0
- package/dist/cjs/Entities/MemoizedNumber.test.js +29 -0
- package/dist/cjs/Entities/MemoizedNumber.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedQuaternion.js +24 -0
- package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -0
- package/dist/cjs/Entities/MemoizedQuaternion.test.js +32 -0
- package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedString.js +23 -0
- package/dist/cjs/Entities/MemoizedString.js.map +1 -0
- package/dist/cjs/Entities/MemoizedString.test.js +29 -0
- package/dist/cjs/Entities/MemoizedString.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedVector2.js +24 -0
- package/dist/cjs/Entities/MemoizedVector2.js.map +1 -0
- package/dist/cjs/Entities/MemoizedVector2.test.js +32 -0
- package/dist/cjs/Entities/MemoizedVector2.test.js.map +1 -0
- package/dist/cjs/Entities/MemoizedVector3.js +24 -0
- package/dist/cjs/Entities/MemoizedVector3.js.map +1 -0
- package/dist/cjs/Entities/MemoizedVector3.test.js +32 -0
- package/dist/cjs/Entities/MemoizedVector3.test.js.map +1 -0
- package/dist/cjs/Entities/ObservableEntity.js +20 -0
- package/dist/cjs/Entities/ObservableEntity.js.map +1 -0
- package/dist/cjs/Entities/ObservableEntity.test.js +25 -0
- package/dist/cjs/Entities/ObservableEntity.test.js.map +1 -0
- package/dist/cjs/Entities/ObserverList.js +27 -0
- package/dist/cjs/Entities/ObserverList.js.map +1 -0
- package/dist/cjs/Entities/ObserverList.test.js +44 -0
- package/dist/cjs/Entities/ObserverList.test.js.map +1 -0
- package/dist/cjs/Entities/RangedNumber.js +36 -0
- package/dist/cjs/Entities/RangedNumber.js.map +1 -0
- package/dist/cjs/Entities/RangedNumber.test.js +96 -0
- package/dist/cjs/Entities/RangedNumber.test.js.map +1 -0
- package/dist/cjs/Entities/index.js +28 -0
- package/dist/cjs/Entities/index.js.map +1 -0
- package/dist/cjs/Types/AppBoundary.js +3 -0
- package/dist/cjs/Types/AppBoundary.js.map +1 -0
- package/dist/cjs/Types/EaseFn.js +3 -0
- package/dist/cjs/Types/EaseFn.js.map +1 -0
- package/dist/cjs/Types/PmAdapter.js +3 -0
- package/dist/cjs/Types/PmAdapter.js.map +1 -0
- package/dist/cjs/Types/SingletonPmAdapter.js +3 -0
- package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -0
- package/dist/cjs/Types/index.js +21 -0
- package/dist/cjs/Types/index.js.map +1 -0
- package/dist/cjs/Utilities/LengthConverters.js +21 -0
- package/dist/cjs/Utilities/LengthConverters.js.map +1 -0
- package/dist/cjs/Utilities/LengthConverters.test.js +24 -0
- package/dist/cjs/Utilities/LengthConverters.test.js.map +1 -0
- package/dist/cjs/Utilities/LerpNumber.js +85 -0
- package/dist/cjs/Utilities/LerpNumber.js.map +1 -0
- package/dist/cjs/Utilities/LerpNumber.test.js +90 -0
- package/dist/cjs/Utilities/LerpNumber.test.js.map +1 -0
- package/dist/cjs/Utilities/addAlphaToHex.js +16 -0
- package/dist/cjs/Utilities/addAlphaToHex.js.map +1 -0
- package/dist/cjs/Utilities/addAlphaToHex.test.js +34 -0
- package/dist/cjs/Utilities/addAlphaToHex.test.js.map +1 -0
- package/dist/cjs/Utilities/alphaToHex.js +21 -0
- package/dist/cjs/Utilities/alphaToHex.js.map +1 -0
- package/dist/cjs/Utilities/alphaToHex.test.js +75 -0
- package/dist/cjs/Utilities/alphaToHex.test.js.map +1 -0
- package/dist/cjs/Utilities/degreesToRadians.js +7 -0
- package/dist/cjs/Utilities/degreesToRadians.js.map +1 -0
- package/dist/cjs/Utilities/degreesToRadians.test.js +9 -0
- package/dist/cjs/Utilities/degreesToRadians.test.js.map +1 -0
- package/dist/cjs/Utilities/downloadFile.js +14 -0
- package/dist/cjs/Utilities/downloadFile.js.map +1 -0
- package/dist/cjs/Utilities/easeFunctions.js +208 -0
- package/dist/cjs/Utilities/easeFunctions.js.map +1 -0
- package/dist/cjs/Utilities/easeFunctions.test.js +209 -0
- package/dist/cjs/Utilities/easeFunctions.test.js.map +1 -0
- package/dist/cjs/Utilities/generateUniqueID.js +8 -0
- package/dist/cjs/Utilities/generateUniqueID.js.map +1 -0
- package/dist/cjs/Utilities/index.js +25 -0
- package/dist/cjs/Utilities/index.js.map +1 -0
- package/dist/cjs/Utilities/interpolateNumber.js +18 -0
- package/dist/cjs/Utilities/interpolateNumber.js.map +1 -0
- package/dist/cjs/Utilities/interpolateNumber.test.js +26 -0
- package/dist/cjs/Utilities/interpolateNumber.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Angle.js +47 -0
- package/dist/cjs/ValueObjects/Angle.js.map +1 -0
- package/dist/cjs/ValueObjects/Angle.test.js +28 -0
- package/dist/cjs/ValueObjects/Angle.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Color.js +859 -0
- package/dist/cjs/ValueObjects/Color.js.map +1 -0
- package/dist/cjs/ValueObjects/Color.test.js +147 -0
- package/dist/cjs/ValueObjects/Color.test.js.map +1 -0
- package/dist/cjs/ValueObjects/LineSegment2D.js +72 -0
- package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -0
- package/dist/cjs/ValueObjects/LineSegment2D.test.js +102 -0
- package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Matrix.js +466 -0
- package/dist/cjs/ValueObjects/Matrix.js.map +1 -0
- package/dist/cjs/ValueObjects/Matrix.test.js +385 -0
- package/dist/cjs/ValueObjects/Matrix.test.js.map +1 -0
- package/dist/cjs/ValueObjects/ParametricLine.js +77 -0
- package/dist/cjs/ValueObjects/ParametricLine.js.map +1 -0
- package/dist/cjs/ValueObjects/ParametricLine.test.js +126 -0
- package/dist/cjs/ValueObjects/ParametricLine.test.js.map +1 -0
- package/dist/cjs/ValueObjects/ParametricPlane.js +65 -0
- package/dist/cjs/ValueObjects/ParametricPlane.js.map +1 -0
- package/dist/cjs/ValueObjects/ParametricPlane.test.js +101 -0
- package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Quaternion.js +290 -0
- package/dist/cjs/ValueObjects/Quaternion.js.map +1 -0
- package/dist/cjs/ValueObjects/Quaternion.test.js +240 -0
- package/dist/cjs/ValueObjects/Quaternion.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Rectangle.js +24 -0
- package/dist/cjs/ValueObjects/Rectangle.js.map +1 -0
- package/dist/cjs/ValueObjects/Rectangle.test.js +32 -0
- package/dist/cjs/ValueObjects/Rectangle.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Vector2.js +184 -0
- package/dist/cjs/ValueObjects/Vector2.js.map +1 -0
- package/dist/cjs/ValueObjects/Vector2.test.js +136 -0
- package/dist/cjs/ValueObjects/Vector2.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Vector3.js +231 -0
- package/dist/cjs/ValueObjects/Vector3.js.map +1 -0
- package/dist/cjs/ValueObjects/Vector3.test.js +188 -0
- package/dist/cjs/ValueObjects/Vector3.test.js.map +1 -0
- package/dist/cjs/ValueObjects/Version.js +171 -0
- package/dist/cjs/ValueObjects/Version.js.map +1 -0
- package/dist/cjs/ValueObjects/Version.test.js +310 -0
- package/dist/cjs/ValueObjects/Version.test.js.map +1 -0
- package/dist/cjs/ValueObjects/index.js +28 -0
- package/dist/cjs/ValueObjects/index.js.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/package.json +58 -55
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const MemoizedNumber_1 = require("./MemoizedNumber");
|
|
4
|
+
test("Initial value is stored", () => {
|
|
5
|
+
const memoizedNumber = new MemoizedNumber_1.MemoizedNumber(33, jest.fn());
|
|
6
|
+
expect(memoizedNumber.val).toEqual(33);
|
|
7
|
+
});
|
|
8
|
+
test("Callback is called when something changes", () => {
|
|
9
|
+
const cb = jest.fn();
|
|
10
|
+
const memoizedNumber = new MemoizedNumber_1.MemoizedNumber(33, cb);
|
|
11
|
+
expect(cb).not.toBeCalled();
|
|
12
|
+
memoizedNumber.val = 55;
|
|
13
|
+
expect(cb).toBeCalled();
|
|
14
|
+
});
|
|
15
|
+
test("CB is only called when something has changed", () => {
|
|
16
|
+
const cb = jest.fn();
|
|
17
|
+
const memoizedNumber = new MemoizedNumber_1.MemoizedNumber(33, cb);
|
|
18
|
+
memoizedNumber.val = 33;
|
|
19
|
+
memoizedNumber.val = 33;
|
|
20
|
+
memoizedNumber.val = 33;
|
|
21
|
+
expect(cb).not.toBeCalled();
|
|
22
|
+
});
|
|
23
|
+
test("Setting the value quietly should not notify", () => {
|
|
24
|
+
const cb = jest.fn();
|
|
25
|
+
const memoizedBoolean = new MemoizedNumber_1.MemoizedNumber(2, cb);
|
|
26
|
+
memoizedBoolean.setValQuietly(3);
|
|
27
|
+
expect(cb).not.toBeCalled();
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=MemoizedNumber.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedNumber.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedNumber.test.ts"],"names":[],"mappings":";;AAAA,qDAAkD;AAElD,IAAI,CAAC,yBAAyB,EAAE,GAAE,EAAE;IAClC,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,GAAE,EAAE;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAE5B,cAAc,CAAC,GAAG,GAAG,EAAE,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8CAA8C,EAAE,GAAE,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAElD,cAAc,CAAC,GAAG,GAAG,EAAE,CAAC;IACxB,cAAc,CAAC,GAAG,GAAG,EAAE,CAAC;IACxB,cAAc,CAAC,GAAG,GAAG,EAAE,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6CAA6C,EAAE,GAAE,EAAE;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,+BAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElD,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAA","sourcesContent":["import { MemoizedNumber } from \"./MemoizedNumber\";\r\n\r\ntest(\"Initial value is stored\", ()=>{\r\n const memoizedNumber = new MemoizedNumber(33, jest.fn());\r\n expect(memoizedNumber.val).toEqual(33);\r\n})\r\n\r\ntest(\"Callback is called when something changes\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedNumber = new MemoizedNumber(33, cb);\r\n\r\n expect(cb).not.toBeCalled();\r\n\r\n memoizedNumber.val = 55;\r\n\r\n expect(cb).toBeCalled();\r\n})\r\n\r\ntest(\"CB is only called when something has changed\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedNumber = new MemoizedNumber(33, cb);\r\n\r\n memoizedNumber.val = 33;\r\n memoizedNumber.val = 33;\r\n memoizedNumber.val = 33;\r\n\r\n expect(cb).not.toBeCalled();\r\n})\r\n\r\ntest(\"Setting the value quietly should not notify\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedNumber(2, cb);\r\n\r\n memoizedBoolean.setValQuietly(3);\r\n\r\n expect(cb).not.toBeCalled();\r\n})"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoizedQuaternion = void 0;
|
|
4
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
5
|
+
class MemoizedQuaternion {
|
|
6
|
+
get val() {
|
|
7
|
+
return this._val;
|
|
8
|
+
}
|
|
9
|
+
set val(v) {
|
|
10
|
+
if (ValueObjects_1.Quaternion.Equal(v, this._val))
|
|
11
|
+
return;
|
|
12
|
+
this._val = v;
|
|
13
|
+
this.onChangeCallback();
|
|
14
|
+
}
|
|
15
|
+
setValQuietly(val) {
|
|
16
|
+
this._val = val;
|
|
17
|
+
}
|
|
18
|
+
constructor(initialValue, onChangeCallback) {
|
|
19
|
+
this._val = initialValue;
|
|
20
|
+
this.onChangeCallback = onChangeCallback;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MemoizedQuaternion = MemoizedQuaternion;
|
|
24
|
+
//# sourceMappingURL=MemoizedQuaternion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedQuaternion.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedQuaternion.ts"],"names":[],"mappings":";;;AAAA,kDAA6C;AAE7C,MAAa,kBAAkB;IAG7B,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,CAAa;QACnB,IAAI,yBAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAE3C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAe;QAClC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAwB,EAAE,gBAA4B;QAChE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAxBD,gDAwBC","sourcesContent":["import { Quaternion } from \"../ValueObjects\";\r\n\r\nexport class MemoizedQuaternion {\r\n private _val: Quaternion;\r\n\r\n get val(): Quaternion {\r\n return this._val;\r\n }\r\n\r\n set val(v: Quaternion) {\r\n if (Quaternion.Equal(v, this._val)) return;\r\n\r\n this._val = v;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: Quaternion) {\r\n this._val = val;\r\n }\r\n\r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: Quaternion, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
4
|
+
const MemoizedQuaternion_1 = require("./MemoizedQuaternion");
|
|
5
|
+
test("Initial value is stored", () => {
|
|
6
|
+
const initialQuat = new ValueObjects_1.Quaternion(5, 6, 7, 8);
|
|
7
|
+
const memoizedVector = new MemoizedQuaternion_1.MemoizedQuaternion(initialQuat, jest.fn());
|
|
8
|
+
expect(memoizedVector.val).toEqual(new ValueObjects_1.Quaternion(5, 6, 7, 8));
|
|
9
|
+
});
|
|
10
|
+
test("Callback is called when the val changes", () => {
|
|
11
|
+
const cb = jest.fn();
|
|
12
|
+
const initialQuat = new ValueObjects_1.Quaternion(5, 6, 7, 8);
|
|
13
|
+
const memoizedQuat = new MemoizedQuaternion_1.MemoizedQuaternion(initialQuat, cb);
|
|
14
|
+
memoizedQuat.val = new ValueObjects_1.Quaternion(8, 9, 10, 11);
|
|
15
|
+
expect(cb).toBeCalled();
|
|
16
|
+
});
|
|
17
|
+
test("Callback is called only when the val changes", () => {
|
|
18
|
+
const cb = jest.fn();
|
|
19
|
+
const initialQuat = new ValueObjects_1.Quaternion(5, 6, 7, 8);
|
|
20
|
+
const memoizedQuat = new MemoizedQuaternion_1.MemoizedQuaternion(initialQuat, cb);
|
|
21
|
+
memoizedQuat.val = new ValueObjects_1.Quaternion(5, 6, 7, 8);
|
|
22
|
+
memoizedQuat.val = new ValueObjects_1.Quaternion(5, 6, 7, 8);
|
|
23
|
+
memoizedQuat.val = new ValueObjects_1.Quaternion(5, 6, 7, 8);
|
|
24
|
+
expect(cb).not.toBeCalled();
|
|
25
|
+
});
|
|
26
|
+
test("Setting the value quietly should not notify", () => {
|
|
27
|
+
const cb = jest.fn();
|
|
28
|
+
const memoizedQuat = new MemoizedQuaternion_1.MemoizedQuaternion(ValueObjects_1.Quaternion.Identity(), cb);
|
|
29
|
+
memoizedQuat.setValQuietly(ValueObjects_1.Quaternion.Identity());
|
|
30
|
+
expect(cb).not.toBeCalled();
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=MemoizedQuaternion.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedQuaternion.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedQuaternion.test.ts"],"names":[],"mappings":";;AAAA,kDAA6C;AAC7C,6DAA0D;AAE1D,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,WAAW,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI,uCAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,WAAW,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE7D,YAAY,CAAC,GAAG,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,WAAW,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE7D,YAAY,CAAC,GAAG,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,YAAY,CAAC,GAAG,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,YAAY,CAAC,GAAG,GAAG,IAAI,yBAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,yBAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvE,YAAY,CAAC,aAAa,CAAC,yBAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC","sourcesContent":["import { Quaternion } from \"../ValueObjects\";\r\nimport { MemoizedQuaternion } from \"./MemoizedQuaternion\";\r\n\r\ntest(\"Initial value is stored\", () => {\r\n const initialQuat = new Quaternion(5, 6, 7, 8);\r\n const memoizedVector = new MemoizedQuaternion(initialQuat, jest.fn());\r\n expect(memoizedVector.val).toEqual(new Quaternion(5, 6, 7, 8));\r\n});\r\n\r\ntest(\"Callback is called when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialQuat = new Quaternion(5, 6, 7, 8);\r\n const memoizedQuat = new MemoizedQuaternion(initialQuat, cb);\r\n\r\n memoizedQuat.val = new Quaternion(8, 9, 10, 11);\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\ntest(\"Callback is called only when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialQuat = new Quaternion(5, 6, 7, 8);\r\n const memoizedQuat = new MemoizedQuaternion(initialQuat, cb);\r\n\r\n memoizedQuat.val = new Quaternion(5, 6, 7, 8);\r\n memoizedQuat.val = new Quaternion(5, 6, 7, 8);\r\n memoizedQuat.val = new Quaternion(5, 6, 7, 8);\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\ntest(\"Setting the value quietly should not notify\", () => {\r\n const cb = jest.fn();\r\n const memoizedQuat = new MemoizedQuaternion(Quaternion.Identity(), cb);\r\n\r\n memoizedQuat.setValQuietly(Quaternion.Identity());\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoizedString = void 0;
|
|
4
|
+
class MemoizedString {
|
|
5
|
+
get val() {
|
|
6
|
+
return this._val;
|
|
7
|
+
}
|
|
8
|
+
set val(b) {
|
|
9
|
+
if (this._val === b)
|
|
10
|
+
return;
|
|
11
|
+
this._val = b;
|
|
12
|
+
this.onChangeCallback();
|
|
13
|
+
}
|
|
14
|
+
setValQuietly(val) {
|
|
15
|
+
this._val = val;
|
|
16
|
+
}
|
|
17
|
+
constructor(initialValue, onChangeCallback) {
|
|
18
|
+
this._val = initialValue;
|
|
19
|
+
this.onChangeCallback = onChangeCallback;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.MemoizedString = MemoizedString;
|
|
23
|
+
//# sourceMappingURL=MemoizedString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedString.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedString.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IAEzB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,CAAS;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAW;QAC9B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAoB,EAAE,gBAA4B;QAC5D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAtBD,wCAsBC","sourcesContent":["export class MemoizedString {\r\n private _val: string;\r\n get val(): string {\r\n return this._val;\r\n }\r\n set val(b: string) {\r\n if (this._val === b) return;\r\n\r\n this._val = b;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: string) {\r\n this._val = val;\r\n }\r\n \r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: string, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const MemoizedString_1 = require("./MemoizedString");
|
|
4
|
+
test("Initial value is stored", () => {
|
|
5
|
+
const memoizedNumber = new MemoizedString_1.MemoizedString("string1", jest.fn());
|
|
6
|
+
expect(memoizedNumber.val).toEqual("string1");
|
|
7
|
+
});
|
|
8
|
+
test("Callback is called when something changes", () => {
|
|
9
|
+
const cb = jest.fn();
|
|
10
|
+
const memoizedNumber = new MemoizedString_1.MemoizedString("string1", cb);
|
|
11
|
+
expect(cb).not.toBeCalled();
|
|
12
|
+
memoizedNumber.val = "string2";
|
|
13
|
+
expect(cb).toBeCalled();
|
|
14
|
+
});
|
|
15
|
+
test("CB is only called when something has changed", () => {
|
|
16
|
+
const cb = jest.fn();
|
|
17
|
+
const memoizedNumber = new MemoizedString_1.MemoizedString("string1", cb);
|
|
18
|
+
memoizedNumber.val = "string1";
|
|
19
|
+
memoizedNumber.val = "string1";
|
|
20
|
+
memoizedNumber.val = "string1";
|
|
21
|
+
expect(cb).not.toBeCalled();
|
|
22
|
+
});
|
|
23
|
+
test("Setting the value quietly should not notify", () => {
|
|
24
|
+
const cb = jest.fn();
|
|
25
|
+
const memoizedBoolean = new MemoizedString_1.MemoizedString("string1", cb);
|
|
26
|
+
memoizedBoolean.setValQuietly("string2");
|
|
27
|
+
expect(cb).not.toBeCalled();
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=MemoizedString.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedString.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedString.test.ts"],"names":[],"mappings":";;AAAA,qDAAkD;AAElD,IAAI,CAAC,yBAAyB,EAAE,GAAE,EAAE;IAClC,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,GAAE,EAAE;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEzD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAE5B,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;IAE/B,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8CAA8C,EAAE,GAAE,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEzD,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;IAE/B,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6CAA6C,EAAE,GAAE,EAAE;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,+BAAc,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE1D,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAEzC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAA","sourcesContent":["import { MemoizedString } from \"./MemoizedString\";\r\n\r\ntest(\"Initial value is stored\", ()=>{\r\n const memoizedNumber = new MemoizedString(\"string1\", jest.fn());\r\n expect(memoizedNumber.val).toEqual(\"string1\");\r\n})\r\n\r\ntest(\"Callback is called when something changes\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedNumber = new MemoizedString(\"string1\", cb);\r\n\r\n expect(cb).not.toBeCalled();\r\n\r\n memoizedNumber.val = \"string2\";\r\n\r\n expect(cb).toBeCalled();\r\n})\r\n\r\ntest(\"CB is only called when something has changed\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedNumber = new MemoizedString(\"string1\", cb);\r\n\r\n memoizedNumber.val = \"string1\";\r\n memoizedNumber.val = \"string1\";\r\n memoizedNumber.val = \"string1\";\r\n\r\n expect(cb).not.toBeCalled();\r\n})\r\n\r\ntest(\"Setting the value quietly should not notify\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedString(\"string1\", cb);\r\n\r\n memoizedBoolean.setValQuietly(\"string2\");\r\n\r\n expect(cb).not.toBeCalled();\r\n})"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoizedVector2 = void 0;
|
|
4
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
5
|
+
class MemoizedVector2 {
|
|
6
|
+
get val() {
|
|
7
|
+
return this._val;
|
|
8
|
+
}
|
|
9
|
+
set val(v) {
|
|
10
|
+
if (ValueObjects_1.Vector2.Equal(v, this._val))
|
|
11
|
+
return;
|
|
12
|
+
this._val = v;
|
|
13
|
+
this.onChangeCallback();
|
|
14
|
+
}
|
|
15
|
+
setValQuietly(val) {
|
|
16
|
+
this._val = val;
|
|
17
|
+
}
|
|
18
|
+
constructor(initialValue, onChangeCallback) {
|
|
19
|
+
this._val = initialValue;
|
|
20
|
+
this.onChangeCallback = onChangeCallback;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MemoizedVector2 = MemoizedVector2;
|
|
24
|
+
//# sourceMappingURL=MemoizedVector2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedVector2.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedVector2.ts"],"names":[],"mappings":";;;AAAA,kDAA0C;AAE1C,MAAa,eAAe;IAG1B,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,CAAU;QAChB,IAAI,sBAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAExC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAY;QAC/B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAqB,EAAE,gBAA4B;QAC7D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAxBD,0CAwBC","sourcesContent":["import { Vector2 } from \"../ValueObjects\";\r\n\r\nexport class MemoizedVector2 {\r\n private _val: Vector2;\r\n\r\n get val(): Vector2 {\r\n return this._val;\r\n }\r\n\r\n set val(v: Vector2) {\r\n if (Vector2.Equal(v, this._val)) return;\r\n\r\n this._val = v;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: Vector2) {\r\n this._val = val;\r\n }\r\n\r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: Vector2, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
4
|
+
const MemoizedVector2_1 = require("./MemoizedVector2");
|
|
5
|
+
test("Initial value is stored", () => {
|
|
6
|
+
const initialVec = new ValueObjects_1.Vector2(5, 6);
|
|
7
|
+
const memoizedVector = new MemoizedVector2_1.MemoizedVector2(initialVec, jest.fn());
|
|
8
|
+
expect(memoizedVector.val).toEqual(new ValueObjects_1.Vector2(5, 6));
|
|
9
|
+
});
|
|
10
|
+
test("Callback is called when the val changes", () => {
|
|
11
|
+
const cb = jest.fn();
|
|
12
|
+
const initialVec = new ValueObjects_1.Vector2(5, 6);
|
|
13
|
+
const memoizedVector = new MemoizedVector2_1.MemoizedVector2(initialVec, cb);
|
|
14
|
+
memoizedVector.val = new ValueObjects_1.Vector2(8, 9);
|
|
15
|
+
expect(cb).toBeCalled();
|
|
16
|
+
});
|
|
17
|
+
test("Callback is called only when the val changes", () => {
|
|
18
|
+
const cb = jest.fn();
|
|
19
|
+
const initialVec = new ValueObjects_1.Vector2(5, 6);
|
|
20
|
+
const memoizedVector = new MemoizedVector2_1.MemoizedVector2(initialVec, cb);
|
|
21
|
+
memoizedVector.val = new ValueObjects_1.Vector2(5, 6);
|
|
22
|
+
memoizedVector.val = new ValueObjects_1.Vector2(5, 6);
|
|
23
|
+
memoizedVector.val = new ValueObjects_1.Vector2(5, 6);
|
|
24
|
+
expect(cb).not.toBeCalled();
|
|
25
|
+
});
|
|
26
|
+
test("Setting the value quietly should not notify", () => {
|
|
27
|
+
const cb = jest.fn();
|
|
28
|
+
const memoizedBoolean = new MemoizedVector2_1.MemoizedVector2(ValueObjects_1.Vector2.One(), cb);
|
|
29
|
+
memoizedBoolean.setValQuietly(ValueObjects_1.Vector2.Zero());
|
|
30
|
+
expect(cb).not.toBeCalled();
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=MemoizedVector2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedVector2.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedVector2.test.ts"],"names":[],"mappings":";;AAAA,kDAA0C;AAC1C,uDAAoD;AAEpD,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,UAAU,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3D,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3D,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,sBAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/D,eAAe,CAAC,aAAa,CAAC,sBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC","sourcesContent":["import { Vector2 } from \"../ValueObjects\";\r\nimport { MemoizedVector2 } from \"./MemoizedVector2\";\r\n\r\ntest(\"Initial value is stored\", () => {\r\n const initialVec = new Vector2(5, 6);\r\n const memoizedVector = new MemoizedVector2(initialVec, jest.fn());\r\n expect(memoizedVector.val).toEqual(new Vector2(5, 6));\r\n});\r\n\r\ntest(\"Callback is called when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialVec = new Vector2(5, 6);\r\n const memoizedVector = new MemoizedVector2(initialVec, cb);\r\n\r\n memoizedVector.val = new Vector2(8, 9);\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\ntest(\"Callback is called only when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialVec = new Vector2(5, 6);\r\n const memoizedVector = new MemoizedVector2(initialVec, cb);\r\n\r\n memoizedVector.val = new Vector2(5, 6);\r\n memoizedVector.val = new Vector2(5, 6);\r\n memoizedVector.val = new Vector2(5, 6);\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\ntest(\"Setting the value quietly should not notify\", () => {\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedVector2(Vector2.One(), cb);\r\n\r\n memoizedBoolean.setValQuietly(Vector2.Zero());\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoizedVector3 = void 0;
|
|
4
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
5
|
+
class MemoizedVector3 {
|
|
6
|
+
get val() {
|
|
7
|
+
return this._val;
|
|
8
|
+
}
|
|
9
|
+
set val(v) {
|
|
10
|
+
if (ValueObjects_1.Vector3.Equal(v, this._val))
|
|
11
|
+
return;
|
|
12
|
+
this._val = v;
|
|
13
|
+
this.onChangeCallback();
|
|
14
|
+
}
|
|
15
|
+
setValQuietly(val) {
|
|
16
|
+
this._val = val;
|
|
17
|
+
}
|
|
18
|
+
constructor(initialValue, onChangeCallback) {
|
|
19
|
+
this._val = initialValue;
|
|
20
|
+
this.onChangeCallback = onChangeCallback;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MemoizedVector3 = MemoizedVector3;
|
|
24
|
+
//# sourceMappingURL=MemoizedVector3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedVector3.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedVector3.ts"],"names":[],"mappings":";;;AAAA,kDAA0C;AAE1C,MAAa,eAAe;IAG1B,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,CAAU;QAChB,IAAI,sBAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAExC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAY;QAC/B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAqB,EAAE,gBAA4B;QAC7D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAxBD,0CAwBC","sourcesContent":["import { Vector3 } from \"../ValueObjects\";\r\n\r\nexport class MemoizedVector3 {\r\n private _val: Vector3;\r\n\r\n get val(): Vector3 {\r\n return this._val;\r\n }\r\n\r\n set val(v: Vector3) {\r\n if (Vector3.Equal(v, this._val)) return;\r\n\r\n this._val = v;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: Vector3) {\r\n this._val = val;\r\n }\r\n\r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: Vector3, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
4
|
+
const MemoizedVector3_1 = require("./MemoizedVector3");
|
|
5
|
+
test("Initial value is stored", () => {
|
|
6
|
+
const initialVec = new ValueObjects_1.Vector3(5, 6, 7);
|
|
7
|
+
const memoizedVector = new MemoizedVector3_1.MemoizedVector3(initialVec, jest.fn());
|
|
8
|
+
expect(memoizedVector.val).toEqual(new ValueObjects_1.Vector3(5, 6, 7));
|
|
9
|
+
});
|
|
10
|
+
test("Callback is called when the val changes", () => {
|
|
11
|
+
const cb = jest.fn();
|
|
12
|
+
const initialVec = new ValueObjects_1.Vector3(5, 6, 7);
|
|
13
|
+
const memoizedVector = new MemoizedVector3_1.MemoizedVector3(initialVec, cb);
|
|
14
|
+
memoizedVector.val = new ValueObjects_1.Vector3(8, 9, 10);
|
|
15
|
+
expect(cb).toBeCalled();
|
|
16
|
+
});
|
|
17
|
+
test("Callback is called only when the val changes", () => {
|
|
18
|
+
const cb = jest.fn();
|
|
19
|
+
const initialVec = new ValueObjects_1.Vector3(5, 6, 7);
|
|
20
|
+
const memoizedVector = new MemoizedVector3_1.MemoizedVector3(initialVec, cb);
|
|
21
|
+
memoizedVector.val = new ValueObjects_1.Vector3(5, 6, 7);
|
|
22
|
+
memoizedVector.val = new ValueObjects_1.Vector3(5, 6, 7);
|
|
23
|
+
memoizedVector.val = new ValueObjects_1.Vector3(5, 6, 7);
|
|
24
|
+
expect(cb).not.toBeCalled();
|
|
25
|
+
});
|
|
26
|
+
test("Setting the value quietly should not notify", () => {
|
|
27
|
+
const cb = jest.fn();
|
|
28
|
+
const memoizedBoolean = new MemoizedVector3_1.MemoizedVector3(ValueObjects_1.Vector3.One(), cb);
|
|
29
|
+
memoizedBoolean.setValQuietly(ValueObjects_1.Vector3.Zero());
|
|
30
|
+
expect(cb).not.toBeCalled();
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=MemoizedVector3.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoizedVector3.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedVector3.test.ts"],"names":[],"mappings":";;AAAA,kDAA0C;AAC1C,uDAAoD;AAEpD,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,UAAU,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3D,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3C,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,iCAAe,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3D,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,cAAc,CAAC,GAAG,GAAG,IAAI,sBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,sBAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/D,eAAe,CAAC,aAAa,CAAC,sBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC","sourcesContent":["import { Vector3 } from \"../ValueObjects\";\r\nimport { MemoizedVector3 } from \"./MemoizedVector3\";\r\n\r\ntest(\"Initial value is stored\", () => {\r\n const initialVec = new Vector3(5, 6, 7);\r\n const memoizedVector = new MemoizedVector3(initialVec, jest.fn());\r\n expect(memoizedVector.val).toEqual(new Vector3(5, 6, 7));\r\n});\r\n\r\ntest(\"Callback is called when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialVec = new Vector3(5, 6, 7);\r\n const memoizedVector = new MemoizedVector3(initialVec, cb);\r\n\r\n memoizedVector.val = new Vector3(8, 9, 10);\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\ntest(\"Callback is called only when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialVec = new Vector3(5, 6, 7);\r\n const memoizedVector = new MemoizedVector3(initialVec, cb);\r\n\r\n memoizedVector.val = new Vector3(5, 6, 7);\r\n memoizedVector.val = new Vector3(5, 6, 7);\r\n memoizedVector.val = new Vector3(5, 6, 7);\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\ntest(\"Setting the value quietly should not notify\", () => {\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedVector3(Vector3.One(), cb);\r\n\r\n memoizedBoolean.setValQuietly(Vector3.Zero());\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObservableEntity = void 0;
|
|
4
|
+
const ObserverList_1 = require("./ObserverList");
|
|
5
|
+
class ObservableEntity {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.observerList = new ObserverList_1.ObserverList();
|
|
8
|
+
this.addObserver = (observer) => {
|
|
9
|
+
this.observerList.add(observer);
|
|
10
|
+
};
|
|
11
|
+
this.removeObserver = (observer) => {
|
|
12
|
+
this.observerList.remove(observer);
|
|
13
|
+
};
|
|
14
|
+
this.notify = () => {
|
|
15
|
+
this.observerList.notify();
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ObservableEntity = ObservableEntity;
|
|
20
|
+
//# sourceMappingURL=ObservableEntity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservableEntity.js","sourceRoot":"","sources":["../../../src/Entities/ObservableEntity.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAI9C,MAAsB,gBAAgB;IAAtC;QACU,iBAAY,GAAG,IAAI,2BAAY,EAAQ,CAAC;QAEhD,gBAAW,GAAG,CAAC,QAAwB,EAAQ,EAAE;YAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,mBAAc,GAAG,CAAC,QAAwB,EAAQ,EAAE;YAClD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,WAAM,GAAG,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC;CAAA;AAZD,4CAYC","sourcesContent":["import { ObserverList } from \"./ObserverList\";\r\n\r\nexport type EntityObserver = () => void;\r\n\r\nexport abstract class ObservableEntity {\r\n private observerList = new ObserverList<void>();\r\n\r\n addObserver = (observer: EntityObserver): void => {\r\n this.observerList.add(observer);\r\n };\r\n removeObserver = (observer: EntityObserver): void => {\r\n this.observerList.remove(observer);\r\n };\r\n notify = () => {\r\n this.observerList.notify();\r\n };\r\n}\r\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ObservableEntity_1 = require("./ObservableEntity");
|
|
4
|
+
class ObservableEntityImp extends ObservableEntity_1.ObservableEntity {
|
|
5
|
+
}
|
|
6
|
+
function makeTestRig() {
|
|
7
|
+
const observableEntity = new ObservableEntityImp();
|
|
8
|
+
const observer = jest.fn();
|
|
9
|
+
observableEntity.addObserver(observer);
|
|
10
|
+
return { observableEntity, observer };
|
|
11
|
+
}
|
|
12
|
+
describe("Abstract Observable Entity", () => {
|
|
13
|
+
it("Notifies", () => {
|
|
14
|
+
const { observer, observableEntity } = makeTestRig();
|
|
15
|
+
observableEntity.notify();
|
|
16
|
+
expect(observer).toBeCalled();
|
|
17
|
+
});
|
|
18
|
+
it("Removes an observer", () => {
|
|
19
|
+
const { observer, observableEntity } = makeTestRig();
|
|
20
|
+
observableEntity.removeObserver(observer);
|
|
21
|
+
observableEntity.notify();
|
|
22
|
+
expect(observer).not.toBeCalled();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=ObservableEntity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservableEntity.test.js","sourceRoot":"","sources":["../../../src/Entities/ObservableEntity.test.ts"],"names":[],"mappings":";;AAAA,yDAAsD;AAEtD,MAAM,mBAAoB,SAAQ,mCAAgB;CAAG;AAErD,SAAS,WAAW;IAClB,MAAM,gBAAgB,GAAG,IAAI,mBAAmB,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3B,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;QAClB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;QACrD,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAE1B,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;QACrD,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAE1B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { ObservableEntity } from \"./ObservableEntity\";\r\n\r\nclass ObservableEntityImp extends ObservableEntity {}\r\n\r\nfunction makeTestRig() {\r\n const observableEntity = new ObservableEntityImp();\r\n const observer = jest.fn();\r\n observableEntity.addObserver(observer);\r\n\r\n return { observableEntity, observer };\r\n}\r\n\r\ndescribe(\"Abstract Observable Entity\", () => {\r\n it(\"Notifies\", () => {\r\n const { observer, observableEntity } = makeTestRig();\r\n observableEntity.notify();\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Removes an observer\", () => {\r\n const { observer, observableEntity } = makeTestRig();\r\n observableEntity.removeObserver(observer);\r\n observableEntity.notify();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n});\r\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObserverList = void 0;
|
|
4
|
+
class ObserverList {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.observers = [];
|
|
7
|
+
this.notify = (msg) => {
|
|
8
|
+
this.observers.forEach((obs) => {
|
|
9
|
+
obs(msg);
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
this.add = (obs) => {
|
|
13
|
+
this.observers.push(obs);
|
|
14
|
+
};
|
|
15
|
+
this.remove = (obs) => {
|
|
16
|
+
const index = this.observers.indexOf(obs);
|
|
17
|
+
if (index >= 0) {
|
|
18
|
+
this.observers.splice(index, 1);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
this.clear = () => {
|
|
22
|
+
this.observers = [];
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ObserverList = ObserverList;
|
|
27
|
+
//# sourceMappingURL=ObserverList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObserverList.js","sourceRoot":"","sources":["../../../src/Entities/ObserverList.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IAAzB;QACU,cAAS,GAAyB,EAAE,CAAC;QAEtC,WAAM,GAAG,CAAC,GAAM,EAAE,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC7B,GAAG,CAAC,GAAG,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC,CAAA;QAEM,QAAG,GAAG,CAAC,GAAqB,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAA;QAEM,WAAM,GAAG,CAAC,GAAqB,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAA;QAEM,UAAK,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC,CAAA;IACH,CAAC;CAAA;AAvBD,oCAuBC","sourcesContent":["export class ObserverList<T> {\r\n private observers: ((msg: T) => void)[] = [];\r\n\r\n public notify = (msg: T) => {\r\n this.observers.forEach((obs) => {\r\n obs(msg);\r\n });\r\n }\r\n\r\n public add = (obs: (msg: T) => void) => {\r\n this.observers.push(obs);\r\n }\r\n\r\n public remove = (obs: (msg: T) => void) => {\r\n const index = this.observers.indexOf(obs);\r\n if (index >= 0) {\r\n this.observers.splice(index, 1);\r\n }\r\n }\r\n\r\n public clear = () => {\r\n this.observers = [];\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ObserverList_1 = require("./ObserverList");
|
|
4
|
+
test("An observer that recieves nothing", () => {
|
|
5
|
+
const observers = new ObserverList_1.ObserverList();
|
|
6
|
+
const obs = jest.fn();
|
|
7
|
+
observers.add(obs);
|
|
8
|
+
observers.notify();
|
|
9
|
+
expect(obs).toBeCalled();
|
|
10
|
+
});
|
|
11
|
+
test("An observer that recieves a string", () => {
|
|
12
|
+
const observers = new ObserverList_1.ObserverList();
|
|
13
|
+
const obs = jest.fn();
|
|
14
|
+
observers.add(obs);
|
|
15
|
+
observers.notify("!yolo");
|
|
16
|
+
expect(obs).toBeCalledWith("!yolo");
|
|
17
|
+
});
|
|
18
|
+
test("An observer that recieves a number", () => {
|
|
19
|
+
const observers = new ObserverList_1.ObserverList();
|
|
20
|
+
const obs = jest.fn();
|
|
21
|
+
observers.add(obs);
|
|
22
|
+
observers.notify(55);
|
|
23
|
+
expect(obs).toBeCalledWith(55);
|
|
24
|
+
});
|
|
25
|
+
test("Observer can be removed", () => {
|
|
26
|
+
const observers = new ObserverList_1.ObserverList();
|
|
27
|
+
const obs = jest.fn();
|
|
28
|
+
observers.add(obs);
|
|
29
|
+
observers.notify();
|
|
30
|
+
expect(obs).toBeCalled();
|
|
31
|
+
obs.mockClear();
|
|
32
|
+
observers.remove(obs);
|
|
33
|
+
observers.notify();
|
|
34
|
+
expect(obs).not.toBeCalled();
|
|
35
|
+
});
|
|
36
|
+
test("Clearing the oberver list", () => {
|
|
37
|
+
const observers = new ObserverList_1.ObserverList();
|
|
38
|
+
const obs = jest.fn();
|
|
39
|
+
observers.add(obs);
|
|
40
|
+
observers.clear();
|
|
41
|
+
observers.notify();
|
|
42
|
+
expect(obs).not.toBeCalled();
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=ObserverList.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObserverList.test.js","sourceRoot":"","sources":["../../../src/Entities/ObserverList.test.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAE9C,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC7C,MAAM,SAAS,GAAG,IAAI,2BAAY,EAAQ,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAEtB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,SAAS,CAAC,MAAM,EAAE,CAAC;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAC9C,MAAM,SAAS,GAAG,IAAI,2BAAY,EAAU,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAEtB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE1B,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAC9C,MAAM,SAAS,GAAG,IAAI,2BAAY,EAAU,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAEtB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAErB,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,SAAS,GAAG,IAAI,2BAAY,EAAQ,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAEtB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,SAAS,CAAC,MAAM,EAAE,CAAC;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAC;IAChB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,SAAS,CAAC,MAAM,EAAE,CAAC;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAE,EAAE;IACpC,MAAM,SAAS,GAAG,IAAI,2BAAY,EAAQ,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAEtB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnB,SAAS,CAAC,KAAK,EAAE,CAAC;IAElB,SAAS,CAAC,MAAM,EAAE,CAAC;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAA","sourcesContent":["import { ObserverList } from \"./ObserverList\";\r\n\r\ntest(\"An observer that recieves nothing\", () => {\r\n const observers = new ObserverList<void>();\r\n const obs = jest.fn();\r\n\r\n observers.add(obs);\r\n observers.notify();\r\n\r\n expect(obs).toBeCalled();\r\n});\r\n\r\ntest(\"An observer that recieves a string\", () => {\r\n const observers = new ObserverList<string>();\r\n const obs = jest.fn();\r\n\r\n observers.add(obs);\r\n observers.notify(\"!yolo\");\r\n\r\n expect(obs).toBeCalledWith(\"!yolo\");\r\n});\r\n\r\ntest(\"An observer that recieves a number\", () => {\r\n const observers = new ObserverList<number>();\r\n const obs = jest.fn();\r\n\r\n observers.add(obs);\r\n\r\n observers.notify(55);\r\n\r\n expect(obs).toBeCalledWith(55);\r\n});\r\n\r\ntest(\"Observer can be removed\", () => {\r\n const observers = new ObserverList<void>();\r\n const obs = jest.fn();\r\n\r\n observers.add(obs);\r\n observers.notify();\r\n\r\n expect(obs).toBeCalled();\r\n\r\n obs.mockClear();\r\n observers.remove(obs);\r\n observers.notify();\r\n\r\n expect(obs).not.toBeCalled();\r\n});\r\n\r\ntest(\"Clearing the oberver list\", ()=>{\r\n const observers = new ObserverList<void>();\r\n const obs = jest.fn();\r\n\r\n observers.add(obs);\r\n\r\n observers.clear();\r\n\r\n observers.notify();\r\n\r\n expect(obs).not.toBeCalled();\r\n})\r\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RangedNumber = void 0;
|
|
4
|
+
class RangedNumber {
|
|
5
|
+
get val() {
|
|
6
|
+
return this._val;
|
|
7
|
+
}
|
|
8
|
+
set val(x) {
|
|
9
|
+
const y = this.clamp(x);
|
|
10
|
+
if (this._val === y)
|
|
11
|
+
return;
|
|
12
|
+
this._val = y;
|
|
13
|
+
this.onChangeCallback();
|
|
14
|
+
}
|
|
15
|
+
setValQuietly(val) {
|
|
16
|
+
this._val = this.clamp(val);
|
|
17
|
+
}
|
|
18
|
+
clamp(x) {
|
|
19
|
+
let rVal = x;
|
|
20
|
+
if (x > this.maxValue) {
|
|
21
|
+
rVal = this.maxValue;
|
|
22
|
+
}
|
|
23
|
+
else if (x < this.minValue) {
|
|
24
|
+
rVal = this.minValue;
|
|
25
|
+
}
|
|
26
|
+
return rVal;
|
|
27
|
+
}
|
|
28
|
+
constructor(props, onChangeCallback) {
|
|
29
|
+
this.maxValue = props.max;
|
|
30
|
+
this.minValue = props.min;
|
|
31
|
+
this._val = this.clamp(props.initialValue);
|
|
32
|
+
this.onChangeCallback = onChangeCallback;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.RangedNumber = RangedNumber;
|
|
36
|
+
//# sourceMappingURL=RangedNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangedNumber.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.ts"],"names":[],"mappings":";;;AAMA,MAAa,YAAY;IAIvB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,CAAS;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAW;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,CAAS;QACrB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,YAAY,KAA6B,EAAE,gBAA4B;QACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAE1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAtCD,oCAsCC","sourcesContent":["export interface RangedNumberProperties {\r\n min: number;\r\n max: number;\r\n initialValue: number;\r\n}\r\n\r\nexport class RangedNumber {\r\n public readonly maxValue: number;\r\n public readonly minValue: number;\r\n private _val: number;\r\n get val(): number {\r\n return this._val;\r\n }\r\n set val(x: number) {\r\n const y = this.clamp(x);\r\n if (this._val === y) return;\r\n\r\n this._val = y;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: number) {\r\n this._val = this.clamp(val);\r\n }\r\n\r\n private clamp(x: number): number {\r\n let rVal = x;\r\n if (x > this.maxValue) {\r\n rVal = this.maxValue;\r\n } else if (x < this.minValue) {\r\n rVal = this.minValue;\r\n }\r\n\r\n return rVal;\r\n }\r\n private onChangeCallback: () => void;\r\n\r\n constructor(props: RangedNumberProperties, onChangeCallback: () => void) {\r\n this.maxValue = props.max;\r\n this.minValue = props.min;\r\n\r\n this._val = this.clamp(props.initialValue);\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const RangedNumber_1 = require("./RangedNumber");
|
|
4
|
+
it("Stores the initial value", () => {
|
|
5
|
+
const props = {
|
|
6
|
+
initialValue: 5,
|
|
7
|
+
max: 10,
|
|
8
|
+
min: 1,
|
|
9
|
+
};
|
|
10
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, jest.fn());
|
|
11
|
+
expect(memoizedNumber.val).toEqual(5);
|
|
12
|
+
});
|
|
13
|
+
it("Clamps the initial value", () => {
|
|
14
|
+
const props = {
|
|
15
|
+
initialValue: 50,
|
|
16
|
+
max: 10,
|
|
17
|
+
min: 1,
|
|
18
|
+
};
|
|
19
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, jest.fn());
|
|
20
|
+
expect(memoizedNumber.val).toEqual(10);
|
|
21
|
+
});
|
|
22
|
+
it("Clamps the value", () => {
|
|
23
|
+
const props = {
|
|
24
|
+
initialValue: 5,
|
|
25
|
+
max: 10,
|
|
26
|
+
min: 1,
|
|
27
|
+
};
|
|
28
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, jest.fn());
|
|
29
|
+
expect(memoizedNumber.val).toEqual(5);
|
|
30
|
+
memoizedNumber.val = 11;
|
|
31
|
+
expect(memoizedNumber.val).toEqual(10);
|
|
32
|
+
memoizedNumber.val = 0;
|
|
33
|
+
expect(memoizedNumber.val).toEqual(1);
|
|
34
|
+
});
|
|
35
|
+
it("Triggers the callback when something changes", () => {
|
|
36
|
+
const cb = jest.fn();
|
|
37
|
+
const props = {
|
|
38
|
+
initialValue: 5,
|
|
39
|
+
max: 10,
|
|
40
|
+
min: 1,
|
|
41
|
+
};
|
|
42
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
|
|
43
|
+
expect(cb).not.toBeCalled();
|
|
44
|
+
memoizedNumber.val = 6;
|
|
45
|
+
expect(cb).toBeCalled();
|
|
46
|
+
});
|
|
47
|
+
it("Only triggers the CB when something changes", () => {
|
|
48
|
+
const cb = jest.fn();
|
|
49
|
+
const props = {
|
|
50
|
+
initialValue: 5,
|
|
51
|
+
max: 10,
|
|
52
|
+
min: 1,
|
|
53
|
+
};
|
|
54
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
|
|
55
|
+
memoizedNumber.val = 5;
|
|
56
|
+
memoizedNumber.val = 5;
|
|
57
|
+
memoizedNumber.val = 5;
|
|
58
|
+
expect(cb).not.toBeCalled();
|
|
59
|
+
});
|
|
60
|
+
it("Checks the clamped value before triggering", () => {
|
|
61
|
+
const cb = jest.fn();
|
|
62
|
+
const props = {
|
|
63
|
+
initialValue: 10,
|
|
64
|
+
max: 10,
|
|
65
|
+
min: 1,
|
|
66
|
+
};
|
|
67
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
|
|
68
|
+
memoizedNumber.val = 11;
|
|
69
|
+
memoizedNumber.val = 12;
|
|
70
|
+
memoizedNumber.val = 13;
|
|
71
|
+
expect(cb).not.toBeCalled();
|
|
72
|
+
});
|
|
73
|
+
it("Does not notify if set quietly", () => {
|
|
74
|
+
const cb = jest.fn();
|
|
75
|
+
const props = {
|
|
76
|
+
initialValue: 5,
|
|
77
|
+
max: 10,
|
|
78
|
+
min: 1,
|
|
79
|
+
};
|
|
80
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
|
|
81
|
+
memoizedNumber.setValQuietly(6);
|
|
82
|
+
expect(memoizedNumber.val).toEqual(6);
|
|
83
|
+
expect(cb).not.toBeCalled();
|
|
84
|
+
});
|
|
85
|
+
it("Setting quietly is clamped", () => {
|
|
86
|
+
const cb = jest.fn();
|
|
87
|
+
const props = {
|
|
88
|
+
initialValue: 5,
|
|
89
|
+
max: 10,
|
|
90
|
+
min: 1,
|
|
91
|
+
};
|
|
92
|
+
const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
|
|
93
|
+
memoizedNumber.setValQuietly(-1);
|
|
94
|
+
expect(memoizedNumber.val).toEqual(1);
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=RangedNumber.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangedNumber.test.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { RangedNumber, RangedNumberProperties } from \"./RangedNumber\";\r\n\r\nit(\"Stores the initial value\", () => {\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n\r\n const memoizedNumber = new RangedNumber(props, jest.fn());\r\n expect(memoizedNumber.val).toEqual(5);\r\n});\r\n\r\nit(\"Clamps the initial value\", () => {\r\n const props: RangedNumberProperties = {\r\n initialValue: 50,\r\n max: 10,\r\n min: 1,\r\n };\r\n\r\n const memoizedNumber = new RangedNumber(props, jest.fn());\r\n expect(memoizedNumber.val).toEqual(10);\r\n});\r\n\r\nit(\"Clamps the value\", () => {\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n\r\n const memoizedNumber = new RangedNumber(props, jest.fn());\r\n\r\n expect(memoizedNumber.val).toEqual(5);\r\n\r\n memoizedNumber.val = 11;\r\n expect(memoizedNumber.val).toEqual(10);\r\n\r\n memoizedNumber.val = 0;\r\n expect(memoizedNumber.val).toEqual(1);\r\n});\r\n\r\nit(\"Triggers the callback when something changes\", () => {\r\n const cb = jest.fn();\r\n\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n expect(cb).not.toBeCalled();\r\n\r\n memoizedNumber.val = 6;\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\nit(\"Only triggers the CB when something changes\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.val = 5;\r\n memoizedNumber.val = 5;\r\n memoizedNumber.val = 5;\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\nit(\"Checks the clamped value before triggering\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 10,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.val = 11;\r\n memoizedNumber.val = 12;\r\n memoizedNumber.val = 13;\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\nit(\"Does not notify if set quietly\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.setValQuietly(6);\r\n\r\n expect(memoizedNumber.val).toEqual(6);\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\nit(\"Setting quietly is clamped\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.setValQuietly(-1);\r\n expect(memoizedNumber.val).toEqual(1);\r\n});\r\n"]}
|