diff --git a/test/test_bench.js b/test/test_bench.js new file mode 100644 index 0000000000..3308d8a39c --- /dev/null +++ b/test/test_bench.js @@ -0,0 +1,205 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var Clip = /** @class */ (function () { + function Clip(name, startOffset, lengthOfClip) { + this.startOffset = startOffset; + this.lengthOfClip = lengthOfClip; + this.name = name; + this.timerID = null; + this.scrubberEndingPosition = 100; + } + Clip.prototype.play = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + console.log("Playing ".concat(this.name)); + this.timerID = setInterval(function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + console.log("Running async ".concat(this.name)); + this.stop(); + return [2 /*return*/]; + }); + }); }, this.lengthOfClip); + return [2 /*return*/]; + }); + }); + }; + Clip.prototype.stop = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + clearInterval(this.timerID); + console.log("Stopping ".concat(this.name)); + return [2 /*return*/]; + }); + }); + }; + return Clip; +}()); +var API = /** @class */ (function () { + function API() { + this.timelineItems = []; + this.timerID = null; + this.timeLineLimit = 1000 * 10; + } + API.prototype.addPlayableClip = function (clip) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.timelineItems.push(clip); + return [2 /*return*/]; + }); + }); + }; + API.prototype.start = function () { + return __awaiter(this, void 0, void 0, function () { + var start, updateInterval, timerID; + var _this = this; + return __generator(this, function (_a) { + start = 0; + updateInterval = 100; + timerID = setInterval(function () { return __awaiter(_this, void 0, void 0, function () { + var _loop_1, this_1, _i, _a, element; + return __generator(this, function (_b) { + console.log("Current Time:".concat(start)); + _loop_1 = function (element) { + if (element.startOffset >= start) { + element.play(); + // remove the element + this_1.timelineItems = this_1.timelineItems.filter(function (item) { return item !== element; }); + } + }; + this_1 = this; + // get last updated time when stopped + for (_i = 0, _a = this.timelineItems; _i < _a.length; _i++) { + element = _a[_i]; + _loop_1(element); + } + if (start == this.timeLineLimit || this.timelineItems.length == 0) { + this.stop(); + } + start += updateInterval; + return [2 /*return*/]; + }); + }); }, updateInterval); + this.timerID = timerID; + return [2 /*return*/]; + }); + }); + }; + API.prototype.stop = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + console.log("Stopping Timeline"); + clearInterval(this.timerID); + return [2 /*return*/]; + }); + }); + }; + return API; +}()); +// How much timeline precision we have +var percision = 100; +// Visual verification tests. +function CheckIfBasicClipWorks() { + var api = new API(); + api.addPlayableClip(new Clip("clip1", 0, 1000)); + api.start(); +} +function CheckIfBasicClipWorks3SecondsAfterTimelineStops() { + var api = new API(); + api.addPlayableClip(new Clip("clip1", 0, 10000)); + api.start(); +} +function CheckIfTwoClipsAtTheSameTimeWorks() { + var api = new API(); + api.addPlayableClip(new Clip("clip1", 0, 1000)); + api.start(); +} +function CheckIfTwoClipsOneAfterAnotherWorks() { + var api = new API(); + api.addPlayableClip(new Clip("clip1", 0, 1000)); + api.addPlayableClip(new Clip("clip2", 0, 2000)); + api.start(); +} +function CheckIfTimeLineStopBeforeClipPlays() { + var _this = this; + var api = new API(); + api.addPlayableClip(new Clip("clip3", 0, 1000)); + api.start(); + setInterval(function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + api.stop(); + return [2 /*return*/]; + }); + }); }, 1100); + console.log("Stopped"); +} +function CheckIfTimeLineStartAfterClipPlays() { + var _this = this; + var api = new API(); + api.addPlayableClip(new Clip("clip3", 0, 1000)); + api.start(); + setInterval(function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + api.stop(); + return [2 /*return*/]; + }); + }); }, 500); + console.log("Stopped"); +} +function CheckIfClipsPlayAllTogetherConcurrently() { + var api = new API(); + api.addPlayableClip(new Clip("clip1", 0, 1000)); + api.addPlayableClip(new Clip("clip2", 0, 1000)); + api.addPlayableClip(new Clip("clip3", 0, 1000)); + api.addPlayableClip(new Clip("clip4", 0, 1000)); + api.start(); +} +function CheckIfClipsPlayAllTogether() { + var api = new API(); + api.addPlayableClip(new Clip("clip1", 0, 1000)); + api.addPlayableClip(new Clip("clip2", 0, 1000)); + api.addPlayableClip(new Clip("clip3", 0, 1000)); + api.addPlayableClip(new Clip("clip4", 0, 1000)); + api.start(); +} +CheckIfBasicClipWorks(); +// CheckIfTwoClipsAtTheSameTimeWorks() +// CheckIfTwoClipsOneAfterAnotherWorks() +// CheckIfTimeLineStopBeforeClipPlays() +// CheckIfTimeLineStartAfterClipPlays() +// CheckIfClipsPlayAllTogetherConcurrently() +// CheckIfClipsPlayAllTogether() diff --git a/test/test_bench.tsx b/test/test_bench.tsx new file mode 100644 index 0000000000..f8409b8e87 --- /dev/null +++ b/test/test_bench.tsx @@ -0,0 +1,156 @@ +// Write unsubcribe and run the remainder of the clip tech. + + +class Clip { + name: string + startOffset: number + timerID: NodeJS.Timeout | null + lengthOfClip: number + scrubberEndingPosition: number + + constructor(name: string, startOffset: number, lengthOfClip: number,unsubscribe) { + this.startOffset = startOffset + this.lengthOfClip = lengthOfClip + this.name = name + this.timerID = null + + this.scrubberEndingPosition = 100 + } + + async play(): Promise { + console.log(`Playing ${this.name}`) + this.timerID = setInterval(async () => { + console.log(`Running async ${this.name}`) + this.stop() + }, this.lengthOfClip) + } + + async stop(): Promise { + clearInterval(this.timerID!) + console.log(`Stopping ${this.name}`) + } +} + +class API { + timelineItems: Clip[] + timerID: NodeJS.Timeout | null + timeLineLimit: number + + runningClips: Clip[] + + constructor() { + this.timelineItems = [] + this.timerID = null + this.timeLineLimit = 1000 * 10 + this.runningClips = [] + } + + async addPlayableClip(clip: Clip): Promise { + this.timelineItems.push(clip) + } + + async start(): Promise { + let start = 0 + const updateInterval = 100 + const timerID = setInterval(async () => { + console.log(`Current Time:${start}`) + + // get last updated time when stopped + for (const element of this.timelineItems) { + if (element.startOffset >= start) { + element.play() + // remove the element + this.timelineItems = this.timelineItems.filter(item => item !== element) + } + } + if (start == this.timeLineLimit || this.timelineItems.length == 0) { + this.stop() + } + + start += updateInterval + }, updateInterval) + + this.timerID = timerID + } + + async stop(): Promise { + console.log(`Stopping Timeline`) + clearInterval(this.timerID!) + } +} + +// How much timeline precision we have +const percision = 100 + +// Visual verification tests. +function CheckIfBasicClipWorks() { + const api = new API() + api.addPlayableClip(new Clip("clip1", 0, 1000)) + api.start() +} + +function CheckIfBasicClipWorks3SecondsAfterTimelineStops() { + const api = new API() + api.addPlayableClip(new Clip("clip1", 0, 10000)) + api.start() +} + +function CheckIfTwoClipsAtTheSameTimeWorks() { + const api = new API() + api.addPlayableClip(new Clip("clip1", 0, 1000)) + api.start() +} + +function CheckIfTwoClipsOneAfterAnotherWorks() { + const api = new API() + api.addPlayableClip(new Clip("clip1", 0, 1000)) + api.addPlayableClip(new Clip("clip2", 0, 2000)) + api.start() +} + +function CheckIfTimeLineStopBeforeClipPlays() { + const api = new API() + api.addPlayableClip(new Clip("clip3",0,1000)) + api.start() + setInterval(async ()=> { + api.stop() + },1100) + console.log("Stopped") +} + +function CheckIfTimeLineStartAfterClipPlays() { + const api = new API() + api.addPlayableClip(new Clip("clip3",0,1000)) + api.start() + setInterval(async ()=> { + api.stop() + },500) + console.log("Stopped") +} + +function CheckIfClipsPlayAllTogetherConcurrently() { + const api = new API() + api.addPlayableClip(new Clip("clip1",0,1000)) + api.addPlayableClip(new Clip("clip2",0,1000)) + api.addPlayableClip(new Clip("clip3",0,1000)) + api.addPlayableClip(new Clip("clip4",0,1000)) + api.start() +} + +function CheckIfClipsPlayAllTogether() { + const api = new API() + api.addPlayableClip(new Clip("clip1",0,1000)) + api.addPlayableClip(new Clip("clip2",0,1000)) + api.addPlayableClip(new Clip("clip3",0,1000)) + api.addPlayableClip(new Clip("clip4",0,1000)) + api.start() +} + +CheckIfBasicClipWorks() +// CheckIfTwoClipsAtTheSameTimeWorks() +// CheckIfTwoClipsOneAfterAnotherWorks() +// CheckIfTimeLineStopBeforeClipPlays() +// CheckIfTimeLineStartAfterClipPlays() +// CheckIfClipsPlayAllTogetherConcurrently() + +// CheckIfClipsPlayAllTogether()