From 50f607a524c59484061c8954c386bb27a1e0c28e Mon Sep 17 00:00:00 2001 From: electricessence Date: Wed, 27 Apr 2016 03:17:50 -0700 Subject: [PATCH] Successfully implemented 'istanbul' code coverage and commenced coverage improvement. Raised Collections/Arrays to 100% code coverage. --- bower.json | 2 +- .../System/Collections/Array/Compare.js | 9 +- .../System/Collections/Array/Compare.js.map | 2 +- .../System/Collections/Array/Dispatch.js | 6 +- .../System/Collections/Array/Dispatch.js.map | 2 +- .../System/Collections/Array/Utility.js | 3 +- .../System/Collections/Array/Utility.js.map | 2 +- package.json | 2 +- source/System/Collections/Array/Compare.js | 12 +- .../System/Collections/Array/Compare.js.map | 2 +- source/System/Collections/Array/Compare.ts | 20 +- source/System/Collections/Array/Dispatch.js | 6 +- .../System/Collections/Array/Dispatch.js.map | 2 +- source/System/Collections/Array/Dispatch.ts | 12 +- source/System/Collections/Array/Utility.js | 4 +- .../System/Collections/Array/Utility.js.map | 2 +- source/System/Collections/Array/Utility.ts | 4 +- .../System/Collections/Arrays/Compare.js | 53 ++++- .../System/Collections/Arrays/Compare.js.map | 2 +- .../System/Collections/Arrays/Compare.ts | 66 +++++- .../System/Collections/Arrays/Dispatch.js | 33 ++- .../System/Collections/Arrays/Dispatch.js.map | 2 +- .../System/Collections/Arrays/Dispatch.ts | 45 +++- .../System/Collections/Arrays/Procedure.js | 36 ++- .../Collections/Arrays/Procedure.js.map | 2 +- .../System/Collections/Arrays/Procedure.ts | 62 ++++- .../System/Collections/Arrays/Utility.js | 146 +++++++++++- .../System/Collections/Arrays/Utility.js.map | 2 +- .../System/Collections/Arrays/Utility.ts | 219 +++++++++++++++++- tests/mocha/import-tests.js | 3 +- tests/mocha/import-tests.js.map | 2 +- 31 files changed, 679 insertions(+), 86 deletions(-) diff --git a/bower.json b/bower.json index f485505b..60714809 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "typescript-dotnet", - "version": "2.9.3", + "version": "2.10.0", "ignore": [ ".bowercc", ".gitignore", diff --git a/dist/commonjs/System/Collections/Array/Compare.js b/dist/commonjs/System/Collections/Array/Compare.js index 5058f4b6..31413210 100644 --- a/dist/commonjs/System/Collections/Array/Compare.js +++ b/dist/commonjs/System/Collections/Array/Compare.js @@ -37,9 +37,8 @@ function areEqual(a, b, strict) { return true; } exports.areEqual = areEqual; -function copyAndSort(a, comparer) { - if (!a) return null; - if (Array.isArray(a)) return a.slice(); +function sort(a, comparer) { + if (!a || a.length < 2) return a; var len = a.length, b; if (len > 65536) b = new Array(len);else { @@ -56,8 +55,8 @@ function areEquivalent(a, b) { var len = validateSize(a, b); if (Types_1.default.isBoolean(len)) return len; - a = copyAndSort(a, comparer); - b = copyAndSort(b, comparer); + a = sort(a, comparer); + b = sort(b, comparer); for (var i = 0; i < len; i++) { if (comparer(a[i], b[i]) !== 0) return false; } diff --git a/dist/commonjs/System/Collections/Array/Compare.js.map b/dist/commonjs/System/Collections/Array/Compare.js.map index f6056a90..7e73ac95 100644 --- a/dist/commonjs/System/Collections/Array/Compare.js.map +++ b/dist/commonjs/System/Collections/Array/Compare.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Array/Compare.js","System/Collections/Array/Compare.ts"],"names":[],"mappings":"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","file":"System/Collections/Array/Compare.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Values = require(\"../../Compare\");\nconst Types_1 = require(\"../../Types\");\nfunction validateSize(a, b) {\n if (a && b && a === b || !a && !b)\n return true;\n if (!a || !b)\n return false;\n var len = a.length;\n if (len !== b.length)\n return false;\n if (len === 0)\n return true;\n return len;\n}\nfunction areAllEqual(arrays, strict, equalityComparer = Values.areEqual) {\n if (!arrays)\n throw new Error(\"ArgumentNullException: 'arrays' cannot be null.\");\n if (arrays.length < 2)\n throw new Error(\"Cannot compare a set of arrays less than 2.\");\n var first = arrays[0];\n for (let i = 0, l = arrays.length; i < l; i++) {\n if (!areEqual(first, arrays[i], strict, equalityComparer))\n return false;\n }\n return true;\n}\nexports.areAllEqual = areAllEqual;\nfunction areEqual(a, b, strict, equalityComparer = Values.areEqual) {\n var len = validateSize(a, b);\n if (Types_1.default.isBoolean(len))\n return len;\n for (let i = 0; i < len; i++) {\n if (!equalityComparer(a[i], b[i], strict))\n return false;\n }\n return true;\n}\nexports.areEqual = areEqual;\nfunction copyAndSort(a, comparer) {\n if (!a)\n return null;\n if (Array.isArray(a))\n return a.slice();\n var len = a.length, b;\n if (len > 65536)\n b = new Array(len);\n else {\n b = [];\n b.length = len;\n }\n for (let i = 0; i < len; i++)\n b[i] = a[i];\n b.sort(comparer);\n return b;\n}\nfunction areEquivalent(a, b, comparer = Values.compare) {\n var len = validateSize(a, b);\n if (Types_1.default.isBoolean(len))\n return len;\n a = copyAndSort(a, comparer);\n b = copyAndSort(b, comparer);\n for (let i = 0; i < len; i++) {\n if (comparer(a[i], b[i]) !== 0)\n return false;\n }\n return true;\n}\nexports.areEquivalent = areEquivalent;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n///\r\n///\r\n///\r\nimport * as Values from \"../../Compare\";\r\nimport Type from \"../../Types\";\r\n\r\n/* validateSize: Utility for quick validation/invalidation of array equality.\r\n\tWhy this way? Why not pass a closure for the last return?\r\n\tReason: Performance and avoiding the creation of new functions/closures. */\r\nfunction validateSize(a:IArray, b:IArray):any\r\n{\r\n\t// Both valid and are same object, or both are null/undefined.\r\n\tif(a && b && a===b || !a && !b)\r\n\t\treturn true;\r\n\r\n\t// At this point, at least one has to be non-null.\r\n\tif(!a || !b)\r\n\t\treturn false;\r\n\r\n\tvar len = a.length;\r\n\tif(len!==b.length)\r\n\t\treturn false;\r\n\r\n\t// If both are arrays and have zero length, they are equal.\r\n\tif(len===0)\r\n\t\treturn true;\r\n\r\n\t// Return the length for downstream processing.\r\n\treturn len;\r\n}\r\n\r\nexport function areAllEqual(\r\n\tarrays:any[][],\r\n\tstrict?:boolean,\r\n\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n{\r\n\tif(!arrays)\r\n\t\tthrow new Error(\"ArgumentNullException: 'arrays' cannot be null.\");\r\n\tif(arrays.length<2)\r\n\t\tthrow new Error(\"Cannot compare a set of arrays less than 2.\");\r\n\tvar first = arrays[0];\r\n\tfor(let i = 0, l = arrays.length; i(\r\n\ta:IArray, b:IArray,\r\n\tstrict?:boolean,\r\n\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n{\r\n\tvar len = validateSize(a, b);\r\n\tif(Type.isBoolean(len)) return len;\r\n\r\n\tfor(let i = 0; i(a:IArray, comparer:Comparison):T[]\r\n{\r\n\tif(!a) return null;\r\n\tif(Array.isArray(a)) return (>a).slice();\r\n\tvar len = a.length, b:T[];\r\n\tif(len>65536) b = new Array(len);\r\n\telse\r\n\t{\r\n\t\tb = [];\r\n\t\tb.length = len;\r\n\t}\r\n\tfor(let i = 0; i(a:IArray, b:IArray):boolean;\r\nexport function areEquivalent(a:IArray>, b:IArray>):boolean;\r\nexport function areEquivalent(a:IArray, b:IArray, comparer:Comparison):boolean;\r\nexport function areEquivalent(\r\n\ta:IArray, b:IArray,\r\n\tcomparer:Comparison = Values.compare):boolean\r\n{\r\n\tvar len = validateSize(a, b);\r\n\tif(Type.isBoolean(len)) return len;\r\n\r\n\t// There might be a better more performant way to do this, but for the moment, this\r\n\t// works quite well.\r\n\ta = copyAndSort(a, comparer);\r\n\tb = copyAndSort(b, comparer);\r\n\r\n\tfor(let i = 0; i 65536)\n b = new Array(len);\n else {\n b = [];\n b.length = len;\n }\n for (let i = 0; i < len; i++)\n b[i] = a[i];\n b.sort(comparer);\n return b;\n}\nfunction areEquivalent(a, b, comparer = Values.compare) {\n var len = validateSize(a, b);\n if (Types_1.default.isBoolean(len))\n return len;\n a = sort(a, comparer);\n b = sort(b, comparer);\n for (let i = 0; i < len; i++) {\n if (comparer(a[i], b[i]) !== 0)\n return false;\n }\n return true;\n}\nexports.areEquivalent = areEquivalent;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n///\r\n///\r\n///\r\nimport * as Values from \"../../Compare\";\r\nimport Type from \"../../Types\";\r\n\r\n/* validateSize: Utility for quick validation/invalidation of array equality.\r\n\tWhy this way? Why not pass a closure for the last return?\r\n\tReason: Performance and avoiding the creation of new functions/closures. */\r\nfunction validateSize(a:IArray, b:IArray):any\r\n{\r\n\t// Both valid and are same object, or both are null/undefined.\r\n\tif(a && b && a===b || !a && !b)\r\n\t\treturn true;\r\n\r\n\t// At this point, at least one has to be non-null.\r\n\tif(!a || !b)\r\n\t\treturn false;\r\n\r\n\tvar len = a.length;\r\n\tif(len!==b.length)\r\n\t\treturn false;\r\n\r\n\t// If both are arrays and have zero length, they are equal.\r\n\tif(len===0)\r\n\t\treturn true;\r\n\r\n\t// Return the length for downstream processing.\r\n\treturn len;\r\n}\r\n\r\nexport function areAllEqual(\r\n\tarrays:any[][],\r\n\tstrict?:boolean,\r\n\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n{\r\n\tif(!arrays)\r\n\t\tthrow new Error(\"ArgumentNullException: 'arrays' cannot be null.\");\r\n\tif(arrays.length<2)\r\n\t\tthrow new Error(\"Cannot compare a set of arrays less than 2.\");\r\n\tvar first = arrays[0];\r\n\tfor(let i = 0, l = arrays.length; i(\r\n\ta:IArray, b:IArray,\r\n\tstrict?:boolean,\r\n\tequalityComparer:EqualityComparison = Values.areEqual):boolean\r\n{\r\n\tvar len = validateSize(a, b);\r\n\tif(Type.isBoolean(len)) return len;\r\n\r\n\tfor(let i = 0; i(a:IArray, comparer:Comparison):IArray\r\n{\r\n\tif(!a || a.length<2) return a;\r\n\r\n\tvar len = a.length, b:T[];\r\n\tif(len>65536)\r\n\t\tb = new Array(len);\r\n\telse {\r\n\t\tb = [];\r\n\t\tb.length = len;\r\n\t}\r\n\tfor(let i = 0; i(a:IArray, b:IArray):boolean;\r\nexport function areEquivalent(a:IArray>, b:IArray>):boolean;\r\nexport function areEquivalent(a:IArray, b:IArray, comparer:Comparison):boolean;\r\nexport function areEquivalent(\r\n\ta:IArray, b:IArray,\r\n\tcomparer:Comparison = Values.compare):boolean\r\n{\r\n\tvar len = validateSize(a, b);\r\n\tif(Type.isBoolean(len)) return len;\r\n\r\n\t// There might be a better more performant way to do this, but for the moment, this\r\n\t// works quite well.\r\n\ta = sort(a, comparer);\r\n\tb = sort(b, comparer);\r\n\r\n\tfor(let i = 0; i\r\n///\r\nimport Type from \"../../Types\";\r\nimport {copy} from \"./Utility\";\r\n\r\ninterface DispatchErrorHandler\r\n{\r\n\t(ex?:any, i?:number):void;\r\n}\r\n\r\n/**\r\n * Simply takes a payload and passes it to all the listeners.\r\n *\r\n * While dispatching:\r\n * * This is an unsafe method if by chance any of the listeners modify the array.\r\n * * It cannot prevent changes to the payload.\r\n *\r\n * Improving safety:\r\n * * Only use a local array that isn't exposed to the listeners.\r\n * * Use the dispatch method instead as it makes a copy of the listeners array.\r\n * * Freeze the listeners array so it can't be modified.\r\n * * Freeze the payload.\r\n *\r\n * Specifying trap will catch any errors and pass them along if trap is a function.\r\n * A payload is used instead of arguments for easy typing.\r\n *\r\n *\r\n * @param listeners\r\n * @param payload\r\n * @param trap\r\n */\r\nexport function unsafe(\r\n\tlisteners:IArray<(payload:T)=>any>,\r\n\tpayload:T, trap?:boolean|DispatchErrorHandler):void\r\n{\r\n\tif(listeners && listeners.length)\r\n\t{\r\n\t\tfor(let i = 0, len = listeners.length; i(\r\n\tlisteners:IArray<(payload:T)=>TResult>,\r\n\tpayload:T, trap?:boolean|DispatchErrorHandler):TResult[]\r\n{\r\n\r\n\tif(!listeners) return null;\r\n\t// Reuse the copy as the array result.\r\n\tvar result:any[] = copy(listeners);\r\n\tif(listeners.length)\r\n\t{\r\n\r\n\t\tfor(let i = 0, len = result.length; i(\r\n\tlisteners:IArray<(payload:T)=>any>,\r\n\tpayload:T, trap?:boolean|DispatchErrorHandler):void\r\n{\r\n\tunsafe(copy(listeners), payload, trap);\r\n}"]} \ No newline at end of file +{"version":3,"sources":["System/Collections/Array/Dispatch.js","System/Collections/Array/Dispatch.ts"],"names":[],"mappings":";;;;AAIA;;ACGA,IAAA,UAAA,QAAiB,aAAjB,CAAA;AACA,IAAA,YAAA,QAAmB,WAAnB,CAAA;AAEA,IAAM,QAAY,KAAK,CAAL;AA4BlB,SAAA,MAAA,CACC,SADD,EAEC,OAFD,EAEY,IAFZ,EAE8C;AAE7C,QAAG,aAAa,UAAU,MAAV,EAChB;AACC,aAAI,IAAI,IAAI,CAAJ,EAAO,MAAM,UAAU,MAAV,EAAkB,IAAE,GAAF,EAAO,GAA9C,EACA;AACC,gBAAI,KAAc,UAAU,CAAV,CAAd,CADL;AAEC,gBAAG,CAAC,EAAD,EAAK,SAAR;AACA,gBACA;AACC,mBAAG,OAAH,EADD;aADA,CAIA,OAAM,EAAN,EACA;AACC,oBAAG,CAAC,IAAD,EACF,MAAM,EAAN,CADD,KAEK,IAAG,QAAA,OAAA,CAAK,UAAL,CAAgB,IAAhB,CAAH,EACJ,KAAK,EAAL,EAAS,CAAT,EADI;aAJN;SARD;KAFD;CAJD;AAAgB,QAAA,MAAA,GAAM,MAAN;AAkChB,SAAA,MAAA,CACC,SADD,EAEC,OAFD,EAEY,IAFZ,EAE8C;AAG7C,QAAG,CAAC,SAAD,EAAY,OAAO,IAAP,CAAf;AAEA,QAAI,SAAe,UAAA,IAAA,CAAK,SAAL,CAAf,CALyC;AAM7C,QAAG,UAAU,MAAV,EACH;AAEC,aAAI,IAAI,IAAI,CAAJ,EAAO,MAAM,OAAO,MAAP,EAAe,IAAE,GAAF,EAAO,GAA3C,EACA;AACC,gBAAI,KAAc,OAAO,CAAP,CAAd,CADL;AAEC,gBACA;AACC,uBAAO,CAAP,IAAY,KACT,GAAG,OAAH,CADS,GAET,KAFS,CADb;aADA,CAMA,OAAM,EAAN,EACA;AACC,uBAAO,CAAP,IAAY,KAAZ,CADD;AAEC,oBAAG,CAAC,IAAD,EACF,MAAM,EAAN,CADD,KAEK,IAAG,QAAA,OAAA,CAAK,UAAL,CAAgB,IAAhB,CAAH,EACJ,KAAK,EAAL,EAAS,CAAT,EADI;aALN;SATD;KAHD;AAuBA,WAAO,MAAP,CA7B6C;CAF9C;AAAgB,QAAA,MAAA,GAAM,MAAN;AA2ChB,SAAA,QAAA,CACC,SADD,EAEC,OAFD,EAEY,IAFZ,EAE8C;AAE7C,WAAO,UAAA,IAAA,CAAK,SAAL,CAAP,EAAwB,OAAxB,EAAiC,IAAjC,EAF6C;CAF9C;AAAgB,QAAA,QAAA,GAAQ,QAAR;AAOhB,OAAA,cAAA,CAAA,OAAA,EAAA,YAAA,EAAA,EAAA,OAAA,IAAA,EAAA;ADlEA,QAAQ,OAAR,GCkEe,QDlEf","file":"System/Collections/Array/Dispatch.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Types_1 = require(\"../../Types\");\nconst Utility_1 = require(\"./Utility\");\nconst VOID0 = void (0);\nfunction unsafe(listeners, payload, trap) {\n if (listeners && listeners.length) {\n for (let i = 0, len = listeners.length; i < len; i++) {\n let fn = listeners[i];\n if (!fn)\n continue;\n try {\n fn(payload);\n }\n catch (ex) {\n if (!trap)\n throw ex;\n else if (Types_1.default.isFunction(trap))\n trap(ex, i);\n }\n }\n }\n}\nexports.unsafe = unsafe;\nfunction mapped(listeners, payload, trap) {\n if (!listeners)\n return null;\n var result = Utility_1.copy(listeners);\n if (listeners.length) {\n for (let i = 0, len = result.length; i < len; i++) {\n let fn = result[i];\n try {\n result[i] = fn\n ? fn(payload)\n : VOID0;\n }\n catch (ex) {\n result[i] = VOID0;\n if (!trap)\n throw ex;\n else if (Types_1.default.isFunction(trap))\n trap(ex, i);\n }\n }\n }\n return result;\n}\nexports.mapped = mapped;\nfunction dispatch(listeners, payload, trap) {\n unsafe(Utility_1.copy(listeners), payload, trap);\n}\nexports.dispatch = dispatch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = dispatch;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n///\r\nimport Type from \"../../Types\";\r\nimport {copy} from \"./Utility\";\r\n\r\nconst VOID0:any = void(0);\r\n\r\ninterface DispatchErrorHandler\r\n{\r\n\t(ex?:any, i?:number):void;\r\n}\r\n\r\n/**\r\n * Simply takes a payload and passes it to all the listeners.\r\n *\r\n * While dispatching:\r\n * * This is an unsafe method if by chance any of the listeners modify the array.\r\n * * It cannot prevent changes to the payload.\r\n *\r\n * Improving safety:\r\n * * Only use a local array that isn't exposed to the listeners.\r\n * * Use the dispatch method instead as it makes a copy of the listeners array.\r\n * * Freeze the listeners array so it can't be modified.\r\n * * Freeze the payload.\r\n *\r\n * Specifying trap will catch any errors and pass them along if trap is a function.\r\n * A payload is used instead of arguments for easy typing.\r\n *\r\n *\r\n * @param listeners\r\n * @param payload\r\n * @param trap\r\n */\r\nexport function unsafe(\r\n\tlisteners:IArray<(payload:T)=>any>,\r\n\tpayload:T, trap?:boolean|DispatchErrorHandler):void\r\n{\r\n\tif(listeners && listeners.length)\r\n\t{\r\n\t\tfor(let i = 0, len = listeners.length; i(\r\n\tlisteners:IArray<(payload:T)=>TResult>,\r\n\tpayload:T, trap?:boolean|DispatchErrorHandler):TResult[]\r\n{\r\n\r\n\tif(!listeners) return null;\r\n\t// Reuse the copy as the array result.\r\n\tvar result:any[] = copy(listeners);\r\n\tif(listeners.length)\r\n\t{\r\n\r\n\t\tfor(let i = 0, len = result.length; i(\r\n\tlisteners:IArray<(payload:T)=>any>,\r\n\tpayload:T, trap?:boolean|DispatchErrorHandler):void\r\n{\r\n\tunsafe(copy(listeners), payload, trap);\r\n}\r\n\r\nexport default dispatch;"]} \ No newline at end of file diff --git a/dist/commonjs/System/Collections/Array/Utility.js b/dist/commonjs/System/Collections/Array/Utility.js index 8b824e7f..3952b17b 100644 --- a/dist/commonjs/System/Collections/Array/Utility.js +++ b/dist/commonjs/System/Collections/Array/Utility.js @@ -41,6 +41,7 @@ function copyTo(source, destination) { if (!destination) throw new ArgumentNullException_1.default('destination', CBN); if (sourceIndex < 0) throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, CBL0); var sourceLength = source.length; + if (!sourceLength) return destination; if (sourceIndex >= sourceLength) throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, 'Must be less than the length of the source array.'); if (destination.length < 0) throw new ArgumentOutOfRangeException_1.default('destinationIndex', destinationIndex, CBL0); var maxLength = source.length - sourceIndex; @@ -138,7 +139,7 @@ exports.findIndex = findIndex; function forEach(source, action) { if (source && action) { for (var i = 0; i < source.length; i++) { - if (action(source[i]) === false) break; + if (action(source[i], i) === false) break; } } } diff --git a/dist/commonjs/System/Collections/Array/Utility.js.map b/dist/commonjs/System/Collections/Array/Utility.js.map index f5ef6dc1..762171bc 100644 --- a/dist/commonjs/System/Collections/Array/Utility.js.map +++ b/dist/commonjs/System/Collections/Array/Utility.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Collections/Array/Utility.js","System/Collections/Array/Utility.ts"],"names":[],"mappings":"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","file":"System/Collections/Array/Utility.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\n */\n\"use strict\";\nconst Types_1 = require(\"../../Types\");\nconst Integer_1 = require(\"../../Integer\");\nconst Compare_1 = require(\"../../Compare\");\nconst ArgumentException_1 = require(\"../../Exceptions/ArgumentException\");\nconst ArgumentNullException_1 = require(\"../../Exceptions/ArgumentNullException\");\nconst ArgumentOutOfRangeException_1 = require(\"../../Exceptions/ArgumentOutOfRangeException\");\nfunction initialize(length) {\n Integer_1.default.assert(length, 'length');\n var array;\n if (length > 65536)\n array = new Array(length);\n else {\n array = [];\n array.length = length;\n }\n return array;\n}\nexports.initialize = initialize;\nfunction copy(source, sourceIndex = 0, length = Infinity) {\n if (!source)\n return source;\n return copyTo(source, initialize(Math.min(length, Math.max(source.length - sourceIndex, 0))), sourceIndex, 0, length);\n}\nexports.copy = copy;\nconst CBN = 'Cannot be null.', CB0 = 'Cannot be zero.', CBL0 = 'Cannot be less than zero.', VFN = 'Must be a valid finite number';\nfunction copyTo(source, destination, sourceIndex = 0, destinationIndex = 0, length = Infinity) {\n if (!source)\n throw new ArgumentNullException_1.default('source', CBN);\n if (!destination)\n throw new ArgumentNullException_1.default('destination', CBN);\n if (sourceIndex < 0)\n throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, CBL0);\n var sourceLength = source.length;\n if (sourceIndex >= sourceLength)\n throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, 'Must be less than the length of the source array.');\n if (destination.length < 0)\n throw new ArgumentOutOfRangeException_1.default('destinationIndex', destinationIndex, CBL0);\n var maxLength = source.length - sourceIndex;\n if (isFinite(length) && length > maxLength)\n throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, 'Source index + length cannot exceed the length of the source array.');\n length = Math.min(length, maxLength);\n var newLength = destinationIndex + length;\n if (newLength > destination.length)\n destination.length = newLength;\n for (let i = 0; i < length; i++) {\n destination[destinationIndex + i] = source[sourceIndex + i];\n }\n return destination;\n}\nexports.copyTo = copyTo;\nfunction indexOf(array, item, equalityComparer = Compare_1.areEqual) {\n var len = array && array.length;\n if (len) {\n if (Array.isArray(array) && !Types_1.default.isTrueNaN(item))\n return array.indexOf(item);\n for (let i = 0; i < len; i++) {\n if (equalityComparer(array[i], item))\n return i;\n }\n }\n return -1;\n}\nexports.indexOf = indexOf;\nfunction contains(array, item, equalityComparer = Compare_1.areEqual) {\n return indexOf(array, item, equalityComparer) != -1;\n}\nexports.contains = contains;\nfunction replace(array, old, newValue, max) {\n if (!array || !array.length || max === 0)\n return 0;\n if (max < 0)\n throw new ArgumentOutOfRangeException_1.default('max', max, CBL0);\n if (!max)\n max = Infinity;\n var count = 0;\n for (let i = 0, len = array.length; i < len; i++) {\n if (array[i] === old) {\n array[i] = newValue;\n ++count;\n if (count == max)\n break;\n }\n }\n return count;\n}\nexports.replace = replace;\nfunction updateRange(array, value, start = 0, stop) {\n if (!array)\n return;\n Integer_1.default.assertZeroOrGreater(start, 'start');\n if (!stop && stop !== 0)\n stop = array.length;\n Integer_1.default.assert(stop, 'stop');\n if (stop < start)\n throw new ArgumentOutOfRangeException_1.default(\"stop\", stop, \"is less than start\");\n for (let i = start; i < stop; i++) {\n array[i] = value;\n }\n}\nexports.updateRange = updateRange;\nfunction clear(array, start = 0, stop) {\n updateRange(array, null, start, stop);\n}\nexports.clear = clear;\nfunction register(array, item, equalityComparer = Compare_1.areEqual) {\n if (!array)\n throw new ArgumentNullException_1.default('array', CBN);\n var len = array.length;\n var ok = !len || !contains(array, item, equalityComparer);\n if (ok)\n array[len] = item;\n return ok;\n}\nexports.register = register;\nfunction findIndex(array, predicate) {\n if (!array)\n throw new ArgumentNullException_1.default('array', CBN);\n if (!Types_1.default.isFunction(predicate))\n throw new ArgumentException_1.default('predicate', 'Must be a function.');\n var len = array.length;\n if (Array.isArray(array)) {\n for (let i = 0; i < len; i++) {\n if (predicate(array[i]))\n return i;\n }\n }\n else {\n for (let i = 0; i < len; i++) {\n if ((i) in (array) && predicate(array[i]))\n return i;\n }\n }\n return -1;\n}\nexports.findIndex = findIndex;\nfunction forEach(source, action) {\n if (source && action) {\n for (let i = 0; i < source.length; i++) {\n if (action(source[i]) === false)\n break;\n }\n }\n}\nexports.forEach = forEach;\nfunction applyTo(target, fn) {\n if (target && fn) {\n for (let i = 0; i < target.length; i++) {\n target[i] = fn(target[i]);\n }\n }\n}\nexports.applyTo = applyTo;\nfunction removeIndex(array, index) {\n if (!array)\n throw new ArgumentNullException_1.default('array', CBN);\n Integer_1.default.assert(index, 'index');\n if (index < 0)\n throw new ArgumentOutOfRangeException_1.default('index', index, CBL0);\n var exists = index < array.length;\n if (exists)\n array.splice(index, 1);\n return exists;\n}\nexports.removeIndex = removeIndex;\nfunction remove(array, value, max, equalityComparer = Compare_1.areEqual) {\n if (!array || !array.length || max === 0)\n return 0;\n if (max < 0)\n throw new ArgumentOutOfRangeException_1.default('max', max, CBL0);\n var count = 0;\n if (!max || !isFinite(max)) {\n for (let i = (array.length - 1); i >= 0; i--) {\n if (equalityComparer(array[i], value)) {\n array.splice(i, 1);\n ++count;\n }\n }\n }\n else {\n var found = [];\n for (let i = 0, len = array.length; i < len; i++) {\n if (equalityComparer(array[i], value)) {\n found.push(i);\n ++count;\n if (count == max)\n break;\n }\n }\n for (let i = found.length - 1; i >= 0; i--) {\n array.splice(found[i], 1);\n }\n }\n return count;\n}\nexports.remove = remove;\nfunction repeat(element, count) {\n Integer_1.default.assert(count, 'count');\n if (count < 0)\n throw new ArgumentOutOfRangeException_1.default('count', count, CBL0);\n var result = initialize(count);\n for (let i = 0; i < count; i++) {\n result[i] = element;\n }\n return result;\n}\nexports.repeat = repeat;\nfunction range(first, count, step = 1) {\n if (isNaN(first) || !isFinite(first))\n throw new ArgumentOutOfRangeException_1.default('first', first, VFN);\n if (isNaN(count) || !isFinite(count))\n throw new ArgumentOutOfRangeException_1.default('count', count, VFN);\n if (count < 0)\n throw new ArgumentOutOfRangeException_1.default('count', count, CBL0);\n var result = initialize(count);\n for (let i = 0; i < count; i++) {\n result[i] = first;\n first += step;\n }\n return result;\n}\nexports.range = range;\nfunction rangeUntil(first, until, step = 1) {\n if (step == 0)\n throw new ArgumentOutOfRangeException_1.default('step', step, CB0);\n return range(first, (until - first) / step, step);\n}\nexports.rangeUntil = rangeUntil;\nfunction flatten(a, recurseDepth = 0) {\n var result = [];\n for (var i = 0; i < a.length; i++) {\n var x = a[i];\n if (Array.isArray(x)) {\n if (recurseDepth > 0)\n x = flatten(x, recurseDepth - 1);\n for (var n = 0; n < x.length; n++)\n result.push(x[n]);\n }\n else\n result.push(x);\n }\n return result;\n}\nexports.flatten = flatten;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n///\r\nimport Type from \"../../Types\";\r\nimport Integer from \"../../Integer\";\r\nimport {areEqual} from \"../../Compare\";\r\nimport ArgumentException from \"../../Exceptions/ArgumentException\";\r\nimport ArgumentNullException from \"../../Exceptions/ArgumentNullException\";\r\nimport ArgumentOutOfRangeException from \"../../Exceptions/ArgumentOutOfRangeException\";\r\n\r\n/**\r\n * Initializes an array depending on the requested capacity.\r\n * The returned array will have a .length equal to the value provided.\r\n * @param length\r\n * @returns {T[]}\r\n */\r\nexport function initialize(length:number):T[]\r\n{\r\n\tInteger.assert(length, 'length');\r\n\t// This logic is based upon JS performance tests that show a significant difference at the level of 65536.\r\n\tvar array:T[];\r\n\tif(length>65536)\r\n\t\tarray = new Array(length);\r\n\telse\r\n\t{\r\n\t\tarray = [];\r\n\t\tarray.length = length;\r\n\t}\r\n\treturn array;\r\n}\r\n\r\n/**\r\n *\r\n * @param source\r\n * @param sourceIndex\r\n * @param length\r\n * @returns {any}\r\n */\r\nexport function copy(\r\n\tsource:IArray,\r\n\tsourceIndex:number = 0,\r\n\tlength:number = Infinity):T[]\r\n{\r\n\tif(!source) return source; // may have passed zero? undefined? or null?\r\n\treturn copyTo(\r\n\t\tsource,\r\n\t\tinitialize(Math.min(length, Math.max(source.length - sourceIndex, 0))),\r\n\t\tsourceIndex, 0, length);\r\n}\r\n\r\nconst\r\n\tCBN = 'Cannot be null.',\r\n\tCB0 = 'Cannot be zero.',\r\n\tCBL0 = 'Cannot be less than zero.',\r\n\tVFN = 'Must be a valid finite number';\r\n\r\n/**\r\n * Copies one array to another.\r\n * @param source\r\n * @param destination\r\n * @param sourceIndex\r\n * @param destinationIndex\r\n * @param length An optional limit to stop copying.\r\n * @returns The destination array.\r\n */\r\nexport function copyTo>(\r\n\tsource:IArray,\r\n\tdestination:TDestination,\r\n\tsourceIndex:number = 0,\r\n\tdestinationIndex:number = 0,\r\n\tlength:number = Infinity):TDestination\r\n{\r\n\tif(!source)\r\n\t\tthrow new ArgumentNullException('source', CBN);\r\n\r\n\tif(!destination)\r\n\t\tthrow new ArgumentNullException('destination', CBN);\r\n\r\n\tif(sourceIndex<0)\r\n\t\tthrow new ArgumentOutOfRangeException('sourceIndex', sourceIndex, CBL0);\r\n\r\n\tvar sourceLength = source.length;\r\n\tif(sourceIndex>=sourceLength)\r\n\t\tthrow new ArgumentOutOfRangeException('sourceIndex', sourceIndex, 'Must be less than the length of the source array.');\r\n\r\n\tif(destination.length<0)\r\n\t\tthrow new ArgumentOutOfRangeException('destinationIndex', destinationIndex, CBL0);\r\n\r\n\tvar maxLength = source.length - sourceIndex;\r\n\tif(isFinite(length) && length>maxLength)\r\n\t\tthrow new ArgumentOutOfRangeException('sourceIndex', sourceIndex, 'Source index + length cannot exceed the length of the source array.');\r\n\r\n\tlength = Math.min(length, maxLength);\r\n\tvar newLength = destinationIndex + length;\r\n\tif(newLength>destination.length) destination.length = newLength;\r\n\r\n\tfor(let i = 0; i(\r\n\tarray:IArray, item:T,\r\n\tequalityComparer:EqualityComparison = areEqual):number\r\n{\r\n\r\n\tvar len = array && array.length;\r\n\tif(len)\r\n\t{\r\n\t\t// NaN NEVER evaluates its equality so be careful.\r\n\t\tif(Array.isArray(array) && !Type.isTrueNaN(item))\r\n\t\t\treturn array.indexOf(item);\r\n\r\n\t\tfor(let i = 0; i(\r\n\tarray:IArray, item:T,\r\n\tequalityComparer:EqualityComparison = areEqual):boolean\r\n{\r\n\treturn indexOf(array, item, equalityComparer)!= -1;\r\n}\r\n\r\n/**\r\n * Finds and replaces a value from an array. Will replaces all instances unless a maximum is specified.\r\n * @param array\r\n * @param old\r\n * @param newValue\r\n * @param max\r\n * @returns {number}\r\n */\r\nexport function replace(\r\n\tarray:IArray,\r\n\told:T,\r\n\tnewValue:T,\r\n\tmax?:number):number\r\n{\r\n\tif(!array || !array.length || max===0) return 0;\r\n\tif(max<0) throw new ArgumentOutOfRangeException('max', max, CBL0);\r\n\tif(!max) max = Infinity;\r\n\r\n\tvar count = 0;\r\n\r\n\tfor(let i = 0,len=array.length;i(\r\n\tarray:IArray,\r\n\tvalue:T,\r\n\tstart:number = 0,\r\n\tstop?:number):void\r\n{\r\n\tif(!array) return;\r\n\tInteger.assertZeroOrGreater(start, 'start');\r\n\tif(!stop && stop!==0) stop = array.length;\r\n\tInteger.assert(stop, 'stop');\r\n\tif(stop,\r\n\tstart:number = 0,\r\n\tstop?:number):void\r\n{\r\n\tupdateRange(array, null, start, stop);\r\n}\r\n\r\n/**\r\n * Ensures a value exists within an array. If not found, adds to the end.\r\n * @param array\r\n * @param item\r\n * @param {function?} equalityComparer\r\n * @returns {boolean}\r\n */\r\nexport function register(\r\n\tarray:IArray, item:T,\r\n\tequalityComparer:EqualityComparison = areEqual):boolean\r\n{\r\n\tif(!array)\r\n\t\tthrow new ArgumentNullException('array', CBN);\r\n\tvar len = array.length; // avoid querying .length more than once. *\r\n\tvar ok = !len || !contains(array, item, equalityComparer);\r\n\tif(ok) array[len] = item; // * push would query length again.\r\n\treturn ok;\r\n}\r\n\r\n/**\r\n * Returns the first index of which the provided predicate returns true.\r\n * Returns -1 if always false.\r\n * @param array\r\n * @param predicate\r\n * @returns {number}\r\n */\r\nexport function findIndex(array:IArray, predicate:Predicate):number\r\n{\r\n\tif(!array)\r\n\t\tthrow new ArgumentNullException('array', CBN);\r\n\tif(!Type.isFunction(predicate))\r\n\t\tthrow new ArgumentException('predicate', 'Must be a function.');\r\n\r\n\tvar len = array.length;\r\n\tif(Array.isArray(array)) {\r\n\t\tfor(let i = 0; i(\r\n\tsource:IArray,\r\n\taction:Predicate | Action):void\r\n{\r\n\tif(source && action)\r\n\t{\r\n\t\t// Don't cache the length since it is possible that the underlying array changed.\r\n\t\tfor(let i = 0; i(target:IArray, fn:(a:T) => T):void\r\n{\r\n\tif(target && fn)\r\n\t{\r\n\t\tfor(let i = 0; i(array:T[], index:number):boolean\r\n{\r\n\tif(!array)\r\n\t\tthrow new ArgumentNullException('array', CBN);\r\n\r\n\tInteger.assert(index, 'index');\r\n\tif(index<0) throw new ArgumentOutOfRangeException('index', index, CBL0);\r\n\r\n\r\n\tvar exists = index(\r\n\tarray:T[], value:T, max?:number,\r\n\tequalityComparer:EqualityComparison = areEqual):number\r\n{\r\n\tif(!array || !array.length || max===0) return 0;\r\n\tif(max<0) throw new ArgumentOutOfRangeException('max', max, CBL0);\r\n\r\n\tvar count = 0;\r\n\tif(!max || !isFinite(max)) {\r\n\t\t// Don't track the indexes and remove in reverse.\r\n\t\tfor(let i = (array.length - 1); i>=0; i--)\r\n\t\t{\r\n\t\t\tif(equalityComparer(array[i], value))\r\n\t\t\t{\r\n\t\t\t\tarray.splice(i, 1);\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\t// Since the user will expect it to happen in forward order...\r\n\t\tvar found:number[] = []; // indexes;\r\n\t\tfor(let i = 0, len = array.length; i=0;i--) {\r\n\t\t\tarray.splice(found[i], 1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\treturn count;\r\n}\r\n\r\n/**\r\n * Simply repeats a value the number of times specified.\r\n * @param element\r\n * @param count\r\n * @returns {T[]}\r\n */\r\nexport function repeat(element:T, count:number):T[]\r\n{\r\n\tInteger.assert(count, 'count');\r\n\tif(count<0) throw new ArgumentOutOfRangeException('count', count, CBL0);\r\n\r\n\tvar result = initialize(count);\r\n\tfor(let i = 0; i(count);\r\n\tfor(let i = 0; i0) x = flatten(x, recurseDepth - 1);\r\n\t\t\tfor(var n = 0; n 65536)\n array = new Array(length);\n else {\n array = [];\n array.length = length;\n }\n return array;\n}\nexports.initialize = initialize;\nfunction copy(source, sourceIndex = 0, length = Infinity) {\n if (!source)\n return source;\n return copyTo(source, initialize(Math.min(length, Math.max(source.length - sourceIndex, 0))), sourceIndex, 0, length);\n}\nexports.copy = copy;\nconst CBN = 'Cannot be null.', CB0 = 'Cannot be zero.', CBL0 = 'Cannot be less than zero.', VFN = 'Must be a valid finite number';\nfunction copyTo(source, destination, sourceIndex = 0, destinationIndex = 0, length = Infinity) {\n if (!source)\n throw new ArgumentNullException_1.default('source', CBN);\n if (!destination)\n throw new ArgumentNullException_1.default('destination', CBN);\n if (sourceIndex < 0)\n throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, CBL0);\n var sourceLength = source.length;\n if (!sourceLength)\n return destination;\n if (sourceIndex >= sourceLength)\n throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, 'Must be less than the length of the source array.');\n if (destination.length < 0)\n throw new ArgumentOutOfRangeException_1.default('destinationIndex', destinationIndex, CBL0);\n var maxLength = source.length - sourceIndex;\n if (isFinite(length) && length > maxLength)\n throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, 'Source index + length cannot exceed the length of the source array.');\n length = Math.min(length, maxLength);\n var newLength = destinationIndex + length;\n if (newLength > destination.length)\n destination.length = newLength;\n for (let i = 0; i < length; i++) {\n destination[destinationIndex + i] = source[sourceIndex + i];\n }\n return destination;\n}\nexports.copyTo = copyTo;\nfunction indexOf(array, item, equalityComparer = Compare_1.areEqual) {\n var len = array && array.length;\n if (len) {\n if (Array.isArray(array) && !Types_1.default.isTrueNaN(item))\n return array.indexOf(item);\n for (let i = 0; i < len; i++) {\n if (equalityComparer(array[i], item))\n return i;\n }\n }\n return -1;\n}\nexports.indexOf = indexOf;\nfunction contains(array, item, equalityComparer = Compare_1.areEqual) {\n return indexOf(array, item, equalityComparer) != -1;\n}\nexports.contains = contains;\nfunction replace(array, old, newValue, max) {\n if (!array || !array.length || max === 0)\n return 0;\n if (max < 0)\n throw new ArgumentOutOfRangeException_1.default('max', max, CBL0);\n if (!max)\n max = Infinity;\n var count = 0;\n for (let i = 0, len = array.length; i < len; i++) {\n if (array[i] === old) {\n array[i] = newValue;\n ++count;\n if (count == max)\n break;\n }\n }\n return count;\n}\nexports.replace = replace;\nfunction updateRange(array, value, start = 0, stop) {\n if (!array)\n return;\n Integer_1.default.assertZeroOrGreater(start, 'start');\n if (!stop && stop !== 0)\n stop = array.length;\n Integer_1.default.assert(stop, 'stop');\n if (stop < start)\n throw new ArgumentOutOfRangeException_1.default(\"stop\", stop, \"is less than start\");\n for (let i = start; i < stop; i++) {\n array[i] = value;\n }\n}\nexports.updateRange = updateRange;\nfunction clear(array, start = 0, stop) {\n updateRange(array, null, start, stop);\n}\nexports.clear = clear;\nfunction register(array, item, equalityComparer = Compare_1.areEqual) {\n if (!array)\n throw new ArgumentNullException_1.default('array', CBN);\n var len = array.length;\n var ok = !len || !contains(array, item, equalityComparer);\n if (ok)\n array[len] = item;\n return ok;\n}\nexports.register = register;\nfunction findIndex(array, predicate) {\n if (!array)\n throw new ArgumentNullException_1.default('array', CBN);\n if (!Types_1.default.isFunction(predicate))\n throw new ArgumentException_1.default('predicate', 'Must be a function.');\n var len = array.length;\n if (Array.isArray(array)) {\n for (let i = 0; i < len; i++) {\n if (predicate(array[i]))\n return i;\n }\n }\n else {\n for (let i = 0; i < len; i++) {\n if ((i) in (array) && predicate(array[i]))\n return i;\n }\n }\n return -1;\n}\nexports.findIndex = findIndex;\nfunction forEach(source, action) {\n if (source && action) {\n for (let i = 0; i < source.length; i++) {\n if (action(source[i], i) === false)\n break;\n }\n }\n}\nexports.forEach = forEach;\nfunction applyTo(target, fn) {\n if (target && fn) {\n for (let i = 0; i < target.length; i++) {\n target[i] = fn(target[i]);\n }\n }\n}\nexports.applyTo = applyTo;\nfunction removeIndex(array, index) {\n if (!array)\n throw new ArgumentNullException_1.default('array', CBN);\n Integer_1.default.assert(index, 'index');\n if (index < 0)\n throw new ArgumentOutOfRangeException_1.default('index', index, CBL0);\n var exists = index < array.length;\n if (exists)\n array.splice(index, 1);\n return exists;\n}\nexports.removeIndex = removeIndex;\nfunction remove(array, value, max, equalityComparer = Compare_1.areEqual) {\n if (!array || !array.length || max === 0)\n return 0;\n if (max < 0)\n throw new ArgumentOutOfRangeException_1.default('max', max, CBL0);\n var count = 0;\n if (!max || !isFinite(max)) {\n for (let i = (array.length - 1); i >= 0; i--) {\n if (equalityComparer(array[i], value)) {\n array.splice(i, 1);\n ++count;\n }\n }\n }\n else {\n var found = [];\n for (let i = 0, len = array.length; i < len; i++) {\n if (equalityComparer(array[i], value)) {\n found.push(i);\n ++count;\n if (count == max)\n break;\n }\n }\n for (let i = found.length - 1; i >= 0; i--) {\n array.splice(found[i], 1);\n }\n }\n return count;\n}\nexports.remove = remove;\nfunction repeat(element, count) {\n Integer_1.default.assert(count, 'count');\n if (count < 0)\n throw new ArgumentOutOfRangeException_1.default('count', count, CBL0);\n var result = initialize(count);\n for (let i = 0; i < count; i++) {\n result[i] = element;\n }\n return result;\n}\nexports.repeat = repeat;\nfunction range(first, count, step = 1) {\n if (isNaN(first) || !isFinite(first))\n throw new ArgumentOutOfRangeException_1.default('first', first, VFN);\n if (isNaN(count) || !isFinite(count))\n throw new ArgumentOutOfRangeException_1.default('count', count, VFN);\n if (count < 0)\n throw new ArgumentOutOfRangeException_1.default('count', count, CBL0);\n var result = initialize(count);\n for (let i = 0; i < count; i++) {\n result[i] = first;\n first += step;\n }\n return result;\n}\nexports.range = range;\nfunction rangeUntil(first, until, step = 1) {\n if (step == 0)\n throw new ArgumentOutOfRangeException_1.default('step', step, CB0);\n return range(first, (until - first) / step, step);\n}\nexports.rangeUntil = rangeUntil;\nfunction flatten(a, recurseDepth = 0) {\n var result = [];\n for (var i = 0; i < a.length; i++) {\n var x = a[i];\n if (Array.isArray(x)) {\n if (recurseDepth > 0)\n x = flatten(x, recurseDepth - 1);\n for (var n = 0; n < x.length; n++)\n result.push(x[n]);\n }\n else\n result.push(x);\n }\n return result;\n}\nexports.flatten = flatten;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n///\r\n///\r\nimport Type from \"../../Types\";\r\nimport Integer from \"../../Integer\";\r\nimport {areEqual} from \"../../Compare\";\r\nimport ArgumentException from \"../../Exceptions/ArgumentException\";\r\nimport ArgumentNullException from \"../../Exceptions/ArgumentNullException\";\r\nimport ArgumentOutOfRangeException from \"../../Exceptions/ArgumentOutOfRangeException\";\r\n\r\n/**\r\n * Initializes an array depending on the requested capacity.\r\n * The returned array will have a .length equal to the value provided.\r\n * @param length\r\n * @returns {T[]}\r\n */\r\nexport function initialize(length:number):T[]\r\n{\r\n\tInteger.assert(length, 'length');\r\n\t// This logic is based upon JS performance tests that show a significant difference at the level of 65536.\r\n\tvar array:T[];\r\n\tif(length>65536)\r\n\t\tarray = new Array(length);\r\n\telse\r\n\t{\r\n\t\tarray = [];\r\n\t\tarray.length = length;\r\n\t}\r\n\treturn array;\r\n}\r\n\r\n/**\r\n *\r\n * @param source\r\n * @param sourceIndex\r\n * @param length\r\n * @returns {any}\r\n */\r\nexport function copy(\r\n\tsource:IArray,\r\n\tsourceIndex:number = 0,\r\n\tlength:number = Infinity):T[]\r\n{\r\n\tif(!source) return source; // may have passed zero? undefined? or null?\r\n\treturn copyTo(\r\n\t\tsource,\r\n\t\tinitialize(Math.min(length, Math.max(source.length - sourceIndex, 0))),\r\n\t\tsourceIndex, 0, length);\r\n}\r\n\r\nconst\r\n\tCBN = 'Cannot be null.',\r\n\tCB0 = 'Cannot be zero.',\r\n\tCBL0 = 'Cannot be less than zero.',\r\n\tVFN = 'Must be a valid finite number';\r\n\r\n/**\r\n * Copies one array to another.\r\n * @param source\r\n * @param destination\r\n * @param sourceIndex\r\n * @param destinationIndex\r\n * @param length An optional limit to stop copying.\r\n * @returns The destination array.\r\n */\r\nexport function copyTo>(\r\n\tsource:IArray,\r\n\tdestination:TDestination,\r\n\tsourceIndex:number = 0,\r\n\tdestinationIndex:number = 0,\r\n\tlength:number = Infinity):TDestination\r\n{\r\n\tif(!source)\r\n\t\tthrow new ArgumentNullException('source', CBN);\r\n\r\n\tif(!destination)\r\n\t\tthrow new ArgumentNullException('destination', CBN);\r\n\r\n\tif(sourceIndex<0)\r\n\t\tthrow new ArgumentOutOfRangeException('sourceIndex', sourceIndex, CBL0);\r\n\r\n\tvar sourceLength = source.length;\r\n\tif(!sourceLength)\r\n\t\treturn destination;\r\n\tif(sourceIndex>=sourceLength)\r\n\t\tthrow new ArgumentOutOfRangeException('sourceIndex', sourceIndex, 'Must be less than the length of the source array.');\r\n\r\n\tif(destination.length<0)\r\n\t\tthrow new ArgumentOutOfRangeException('destinationIndex', destinationIndex, CBL0);\r\n\r\n\tvar maxLength = source.length - sourceIndex;\r\n\tif(isFinite(length) && length>maxLength)\r\n\t\tthrow new ArgumentOutOfRangeException('sourceIndex', sourceIndex, 'Source index + length cannot exceed the length of the source array.');\r\n\r\n\tlength = Math.min(length, maxLength);\r\n\tvar newLength = destinationIndex + length;\r\n\tif(newLength>destination.length) destination.length = newLength;\r\n\r\n\tfor(let i = 0; i(\r\n\tarray:IArray, item:T,\r\n\tequalityComparer:EqualityComparison = areEqual):number\r\n{\r\n\r\n\tvar len = array && array.length;\r\n\tif(len)\r\n\t{\r\n\t\t// NaN NEVER evaluates its equality so be careful.\r\n\t\tif(Array.isArray(array) && !Type.isTrueNaN(item))\r\n\t\t\treturn array.indexOf(item);\r\n\r\n\t\tfor(let i = 0; i(\r\n\tarray:IArray, item:T,\r\n\tequalityComparer:EqualityComparison = areEqual):boolean\r\n{\r\n\treturn indexOf(array, item, equalityComparer)!= -1;\r\n}\r\n\r\n/**\r\n * Finds and replaces a value from an array. Will replaces all instances unless a maximum is specified.\r\n * @param array\r\n * @param old\r\n * @param newValue\r\n * @param max\r\n * @returns {number}\r\n */\r\nexport function replace(\r\n\tarray:IArray,\r\n\told:T,\r\n\tnewValue:T,\r\n\tmax?:number):number\r\n{\r\n\tif(!array || !array.length || max===0) return 0;\r\n\tif(max<0) throw new ArgumentOutOfRangeException('max', max, CBL0);\r\n\tif(!max) max = Infinity;\r\n\r\n\tvar count = 0;\r\n\r\n\tfor(let i = 0,len=array.length;i(\r\n\tarray:IArray,\r\n\tvalue:T,\r\n\tstart:number = 0,\r\n\tstop?:number):void\r\n{\r\n\tif(!array) return;\r\n\tInteger.assertZeroOrGreater(start, 'start');\r\n\tif(!stop && stop!==0) stop = array.length;\r\n\tInteger.assert(stop, 'stop');\r\n\tif(stop,\r\n\tstart:number = 0,\r\n\tstop?:number):void\r\n{\r\n\tupdateRange(array, null, start, stop);\r\n}\r\n\r\n/**\r\n * Ensures a value exists within an array. If not found, adds to the end.\r\n * @param array\r\n * @param item\r\n * @param {function?} equalityComparer\r\n * @returns {boolean}\r\n */\r\nexport function register(\r\n\tarray:IArray, item:T,\r\n\tequalityComparer:EqualityComparison = areEqual):boolean\r\n{\r\n\tif(!array)\r\n\t\tthrow new ArgumentNullException('array', CBN);\r\n\tvar len = array.length; // avoid querying .length more than once. *\r\n\tvar ok = !len || !contains(array, item, equalityComparer);\r\n\tif(ok) array[len] = item; // * push would query length again.\r\n\treturn ok;\r\n}\r\n\r\n/**\r\n * Returns the first index of which the provided predicate returns true.\r\n * Returns -1 if always false.\r\n * @param array\r\n * @param predicate\r\n * @returns {number}\r\n */\r\nexport function findIndex(array:IArray, predicate:Predicate):number\r\n{\r\n\tif(!array)\r\n\t\tthrow new ArgumentNullException('array', CBN);\r\n\tif(!Type.isFunction(predicate))\r\n\t\tthrow new ArgumentException('predicate', 'Must be a function.');\r\n\r\n\tvar len = array.length;\r\n\tif(Array.isArray(array)) {\r\n\t\tfor(let i = 0; i(\r\n\tsource:IArray,\r\n\taction:Predicate | Action):void\r\n{\r\n\tif(source && action)\r\n\t{\r\n\t\t// Don't cache the length since it is possible that the underlying array changed.\r\n\t\tfor(let i = 0; i(target:IArray, fn:(a:T) => T):void\r\n{\r\n\tif(target && fn)\r\n\t{\r\n\t\tfor(let i = 0; i(array:T[], index:number):boolean\r\n{\r\n\tif(!array)\r\n\t\tthrow new ArgumentNullException('array', CBN);\r\n\r\n\tInteger.assert(index, 'index');\r\n\tif(index<0) throw new ArgumentOutOfRangeException('index', index, CBL0);\r\n\r\n\r\n\tvar exists = index(\r\n\tarray:T[], value:T, max?:number,\r\n\tequalityComparer:EqualityComparison = areEqual):number\r\n{\r\n\tif(!array || !array.length || max===0) return 0;\r\n\tif(max<0) throw new ArgumentOutOfRangeException('max', max, CBL0);\r\n\r\n\tvar count = 0;\r\n\tif(!max || !isFinite(max)) {\r\n\t\t// Don't track the indexes and remove in reverse.\r\n\t\tfor(let i = (array.length - 1); i>=0; i--)\r\n\t\t{\r\n\t\t\tif(equalityComparer(array[i], value))\r\n\t\t\t{\r\n\t\t\t\tarray.splice(i, 1);\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\t// Since the user will expect it to happen in forward order...\r\n\t\tvar found:number[] = []; // indexes;\r\n\t\tfor(let i = 0, len = array.length; i=0;i--) {\r\n\t\t\tarray.splice(found[i], 1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\treturn count;\r\n}\r\n\r\n/**\r\n * Simply repeats a value the number of times specified.\r\n * @param element\r\n * @param count\r\n * @returns {T[]}\r\n */\r\nexport function repeat(element:T, count:number):T[]\r\n{\r\n\tInteger.assert(count, 'count');\r\n\tif(count<0) throw new ArgumentOutOfRangeException('count', count, CBL0);\r\n\r\n\tvar result = initialize(count);\r\n\tfor(let i = 0; i(count);\r\n\tfor(let i = 0; i0) x = flatten(x, recurseDepth - 1);\r\n\t\t\tfor(var n = 0; n", "description": "A JavaScript-Friendly .NET Based TypeScript Library.", diff --git a/source/System/Collections/Array/Compare.js b/source/System/Collections/Array/Compare.js index 2e98b90b..a6b003c8 100644 --- a/source/System/Collections/Array/Compare.js +++ b/source/System/Collections/Array/Compare.js @@ -51,11 +51,9 @@ return true; } exports.areEqual = areEqual; - function copyAndSort(a, comparer) { - if (!a) - return null; - if (Array.isArray(a)) - return a.slice(); + function sort(a, comparer) { + if (!a || a.length < 2) + return a; var len = a.length, b; if (len > 65536) b = new Array(len); @@ -73,8 +71,8 @@ var len = validateSize(a, b); if (Types_1.default.isBoolean(len)) return len; - a = copyAndSort(a, comparer); - b = copyAndSort(b, comparer); + a = sort(a, comparer); + b = sort(b, comparer); for (var i = 0; i < len; i++) { if (comparer(a[i], b[i]) !== 0) return false; diff --git a/source/System/Collections/Array/Compare.js.map b/source/System/Collections/Array/Compare.js.map index 500e514c..331775ad 100644 --- a/source/System/Collections/Array/Compare.js.map +++ b/source/System/Collections/Array/Compare.js.map @@ -1 +1 @@ -{"version":3,"file":"Compare.js","sourceRoot":"","sources":["Compare.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Compare.js","sourceRoot":"","sources":["Compare.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/Array/Compare.ts b/source/System/Collections/Array/Compare.ts index 83838bc0..98cca9e6 100644 --- a/source/System/Collections/Array/Compare.ts +++ b/source/System/Collections/Array/Compare.ts @@ -71,18 +71,20 @@ export function areEqual( } -function copyAndSort(a:IArray, comparer:Comparison):T[] +function sort(a:IArray, comparer:Comparison):IArray { - if(!a) return null; - if(Array.isArray(a)) return (>a).slice(); + if(!a || a.length<2) return a; + var len = a.length, b:T[]; - if(len>65536) b = new Array(len); - else - { + if(len>65536) + b = new Array(len); + else { b = []; b.length = len; } - for(let i = 0; i( // There might be a better more performant way to do this, but for the moment, this // works quite well. - a = copyAndSort(a, comparer); - b = copyAndSort(b, comparer); + a = sort(a, comparer); + b = sort(b, comparer); for(let i = 0; i( { result[i] = fn // Ignore null refs. ? fn(payload) - : undefined; + : VOID0; } catch(ex) { - result[i] = undefined; + result[i] = VOID0; if(!trap) throw ex; else if(Type.isFunction(trap)) @@ -111,9 +113,11 @@ export function mapped( * @param payload * @param trap */ -export default function dispatch( +export function dispatch( listeners:IArray<(payload:T)=>any>, payload:T, trap?:boolean|DispatchErrorHandler):void { unsafe(copy(listeners), payload, trap); -} \ No newline at end of file +} + +export default dispatch; \ No newline at end of file diff --git a/source/System/Collections/Array/Utility.js b/source/System/Collections/Array/Utility.js index 3ab120fa..1c30a875 100644 --- a/source/System/Collections/Array/Utility.js +++ b/source/System/Collections/Array/Utility.js @@ -49,6 +49,8 @@ if (sourceIndex < 0) throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, CBL0); var sourceLength = source.length; + if (!sourceLength) + return destination; if (sourceIndex >= sourceLength) throw new ArgumentOutOfRangeException_1.default('sourceIndex', sourceIndex, 'Must be less than the length of the source array.'); if (destination.length < 0) @@ -159,7 +161,7 @@ function forEach(source, action) { if (source && action) { for (var i = 0; i < source.length; i++) { - if (action(source[i]) === false) + if (action(source[i], i) === false) break; } } diff --git a/source/System/Collections/Array/Utility.js.map b/source/System/Collections/Array/Utility.js.map index 11928b02..b361d256 100644 --- a/source/System/Collections/Array/Utility.js.map +++ b/source/System/Collections/Array/Utility.js.map @@ -1 +1 @@ -{"version":3,"file":"Utility.js","sourceRoot":"","sources":["Utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Utility.js","sourceRoot":"","sources":["Utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Collections/Array/Utility.ts b/source/System/Collections/Array/Utility.ts index 348af0ae..34c009bd 100644 --- a/source/System/Collections/Array/Utility.ts +++ b/source/System/Collections/Array/Utility.ts @@ -84,6 +84,8 @@ export function copyTo>( throw new ArgumentOutOfRangeException('sourceIndex', sourceIndex, CBL0); var sourceLength = source.length; + if(!sourceLength) + return destination; if(sourceIndex>=sourceLength) throw new ArgumentOutOfRangeException('sourceIndex', sourceIndex, 'Must be less than the length of the source array.'); @@ -294,7 +296,7 @@ export function forEach( // Don't cache the length since it is possible that the underlying array changed. for(let i = 0; i -import * as ArrayCompare from '../../../../../source/System/Collections/Array/Compare'; +import * as ArrayCompare from "../../../../../source/System/Collections/Array/Compare"; var assert = require('../../../../../node_modules/assert/assert'); + +const a1 = [1,2,3]; +const a2 = [1,2,3]; +const b = [4,5,6]; +const c = [7,8,9,10]; +const d = b.slice(); +const e = c.slice(); +d.length = e.length = 200000; + +describe(".areEqual()",()=>{ + + it("should be equal",()=>{ + assert.ok(ArrayCompare.areEqual([],[])); + assert.ok(ArrayCompare.areEqual(a1,a1)); + assert.ok(ArrayCompare.areEqual(a1,a2)); + }); + + it("should not be equal",()=>{ + assert.ok(!ArrayCompare.areEqual(null,a1)); + assert.ok(!ArrayCompare.areEqual(a1,null)); + assert.ok(!ArrayCompare.areEqual(a1,b)); + assert.ok(!ArrayCompare.areEqual(b,c)); + }); + +}); + +describe(".areAllEqual()",()=>{ + + it("should be equal",()=>{ + assert.ok(ArrayCompare.areAllEqual([[],[],[]])); + assert.ok(ArrayCompare.areAllEqual([a1,a1,a2])); + }); + + it("should not be equal",()=>{ + assert.ok(!ArrayCompare.areAllEqual([a1,null])); + assert.ok(!ArrayCompare.areAllEqual([a1,b,c])); + assert.ok(!ArrayCompare.areAllEqual([a1,b],true,()=>false)); + }); + + it("should error for invalid",()=>{ + assert.throws(()=>ArrayCompare.areAllEqual(null)); + assert.throws(()=>ArrayCompare.areAllEqual([])); + assert.throws(()=>ArrayCompare.areAllEqual([a1])); + }); + +}); + +describe(".areEquivalent()",()=>{ + + it("should be equivalent",()=>{ + assert.ok(ArrayCompare.areEquivalent([1],[1])); + assert.ok(ArrayCompare.areEquivalent(a1,a1)); + assert.ok(ArrayCompare.areEquivalent(a1,a2)); + assert.ok(ArrayCompare.areEquivalent(a1,a1.slice().reverse())); + }); + + it("should not be equivalent",()=>{ + assert.ok(!ArrayCompare.areEquivalent([1],[2])); + assert.ok(!ArrayCompare.areEquivalent(a1,b,()=>1)); + assert.ok(!ArrayCompare.areEquivalent(a1,b)); + assert.ok(!ArrayCompare.areEquivalent(d,e)); + }); + +}); \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Dispatch.js b/tests/mocha/System/Collections/Arrays/Dispatch.js index 7887d973..2db7717d 100644 --- a/tests/mocha/System/Collections/Arrays/Dispatch.js +++ b/tests/mocha/System/Collections/Arrays/Dispatch.js @@ -17,12 +17,39 @@ }, function (p) { result *= p; - } + }, + null ]; - Dispatch_1.default(a, 10); + Dispatch_1.dispatch(a, 10); assert.equal(result, 100); - Dispatch_1.default(a, 20); + assert.equal(Dispatch_1.mapped(null, 20), null); + assert.equal(Dispatch_1.mapped([], 20).length, 0); + assert.equal(Dispatch_1.mapped(a, 20).length, 3); + Dispatch_1.unsafe(null, 10); assert.equal(result, 2400); }); + var b = [ + function (p) { + throw "error"; + } + ]; + it("should propagate errors", function () { + assert.throws(function () { + Dispatch_1.dispatch(b, 10); + }); + assert.throws(function () { + Dispatch_1.mapped(b, 10); + }); + }); + it("should trap errors", function () { + assert.doesNotThrow(function () { + Dispatch_1.dispatch(b, 10, true); + Dispatch_1.dispatch(b, 10, function (err) { return assert.equal(err, 'error'); }); + }); + assert.doesNotThrow(function () { + Dispatch_1.mapped(b, 10, true); + Dispatch_1.mapped(b, 10, function (err) { return assert.equal(err, 'error'); }); + }); + }); }); //# sourceMappingURL=Dispatch.js.map \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Dispatch.js.map b/tests/mocha/System/Collections/Arrays/Dispatch.js.map index 9c6d7f8a..0902eba6 100644 --- a/tests/mocha/System/Collections/Arrays/Dispatch.js.map +++ b/tests/mocha/System/Collections/Arrays/Dispatch.js.map @@ -1 +1 @@ -{"version":3,"file":"Dispatch.js","sourceRoot":"","sources":["Dispatch.ts"],"names":[],"mappings":";;;;;;;;;IAEA,yBAAqB,yDAAyD,CAAC,CAAA;IAC/E,IAAI,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAElE,EAAE,CAAC,gCAAgC,EAAE;QAEpC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG;YACP,UAAC,CAAQ;gBAER,MAAM,IAAI,CAAC,CAAC;YACb,CAAC;YACD,UAAC,CAAQ;gBAER,MAAM,IAAI,CAAC,CAAC;YACb,CAAC;SACD,CAAC;QAEF,kBAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE1B,kBAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"Dispatch.js","sourceRoot":"","sources":["Dispatch.ts"],"names":[],"mappings":";;;;;;;;;IAEA,yBAAuC,yDAAyD,CAAC,CAAA;IACjG,IAAI,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAElE,EAAE,CAAC,gCAAgC,EAAE;QAEpC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG;YACP,UAAC,CAAQ;gBAER,MAAM,IAAI,CAAC,CAAC;YACb,CAAC;YACD,UAAC,CAAQ;gBAER,MAAM,IAAI,CAAC,CAAC;YACb,CAAC;YACD,IAAI;SACJ,CAAC;QAGF,mBAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE1B,MAAM,CAAC,KAAK,CAAC,iBAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,iBAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,iBAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,iBAAM,CAAC,IAAI,EAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG;QACP,UAAC,CAAQ;YAER,MAAM,OAAO,CAAC;QACf,CAAC;KACD,CAAC;IAEF,EAAE,CAAC,yBAAyB,EAAC;QAC5B,MAAM,CAAC,MAAM,CAAC;YAEb,mBAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC;YAEb,iBAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,oBAAoB,EAAC;QACvB,MAAM,CAAC,YAAY,CAAC;YAEnB,mBAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACtB,mBAAQ,CAAC,CAAC,EAAE,EAAE,EAAC,UAAA,GAAG,IAAE,OAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAC,OAAO,CAAC,EAAzB,CAAyB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC;YAEnB,iBAAM,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACpB,iBAAM,CAAC,CAAC,EAAE,EAAE,EAAC,UAAA,GAAG,IAAE,OAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAC,OAAO,CAAC,EAAzB,CAAyB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Dispatch.ts b/tests/mocha/System/Collections/Arrays/Dispatch.ts index 0b5e72c9..e7208fcf 100644 --- a/tests/mocha/System/Collections/Arrays/Dispatch.ts +++ b/tests/mocha/System/Collections/Arrays/Dispatch.ts @@ -1,6 +1,6 @@ /// -import dispatch from "../../../../../source/System/Collections/Array/Dispatch"; +import {dispatch, mapped, unsafe} from "../../../../../source/System/Collections/Array/Dispatch"; var assert = require('../../../../../node_modules/assert/assert'); it("should apply closures in order", ()=> @@ -14,12 +14,51 @@ it("should apply closures in order", ()=> (p:number)=> { result *= p; - } + }, + null ]; + dispatch(a, 10); assert.equal(result, 100); - dispatch(a, 20); + assert.equal(mapped(null, 20), null); + assert.equal(mapped([], 20).length, 0); + assert.equal(mapped(a, 20).length, 3); + unsafe(null,10); assert.equal(result, 2400); +}); + +var b = [ + (p:number)=> + { + throw "error"; + } +]; + +it("should propagate errors",()=>{ + assert.throws(()=> + { + dispatch(b, 10); + }); + + assert.throws(()=> + { + mapped(b, 10); + }); +}); + + +it("should trap errors",()=>{ + assert.doesNotThrow(()=> + { + dispatch(b, 10, true); + dispatch(b, 10,err=>assert.equal(err,'error')); + }); + + assert.doesNotThrow(()=> + { + mapped(b, 10, true); + mapped(b, 10,err=>assert.equal(err,'error')); + }); }); \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Procedure.js b/tests/mocha/System/Collections/Arrays/Procedure.js index 5fd4ad65..eac2421e 100644 --- a/tests/mocha/System/Collections/Arrays/Procedure.js +++ b/tests/mocha/System/Collections/Arrays/Procedure.js @@ -3,16 +3,16 @@ var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["require", "exports", '../../../../../source/System/Collections/Array/Procedure'], factory); + define(["require", "exports", "../../../../../source/System/Collections/Array/Procedure"], factory); } })(function (require, exports) { "use strict"; - var ArrayProcedure = require('../../../../../source/System/Collections/Array/Procedure'); + var ArrayProcedure = require("../../../../../source/System/Collections/Array/Procedure"); var assert = require('../../../../../node_modules/assert/assert'); - var minA = -10, maxA = 2000, minB = -Infinity, maxB = Infinity, a = [5, minA, -1, maxA, -2, NaN, 20], b = [5, 2000, maxB, -1, NaN, -10, minB, -2, 20], sum = 5 + minA + (-1) + maxA + (-2) + 20, average = sum / 6, product = 5 * minA * (-1) * maxA * (-2) * 20; + var minA = -10, maxA = 2000, minB = -Infinity, maxB = Infinity, a = [5, minA, -1, maxA, -2, NaN, 20], b = [5, 2000, maxB, -1, NaN, -10, minB, -2, 20], sum = 5 + minA + (-1) + maxA + (-2) + 20, average = sum / 6, product = 5 * minA * (-1) * maxA * (-2) * 20, quotient = 5 / minA / (-1) / maxA / (-2) / 20; function procedureShouldBe(source, value, p) { it('should be NaN', function () { - assert.ok(isNaN(p(source, false))); + assert.ok(isNaN(p(source))); }); it('should be ' + value, function () { assert.equal(p(source, true), value); @@ -20,12 +20,32 @@ } describe(".sum(source)", function () { procedureShouldBe(a, sum, ArrayProcedure.sum); + it('should be 0', function () { + assert.equal(ArrayProcedure.sum([]), 0); + }); }); describe(".average(source)", function () { procedureShouldBe(a, average, ArrayProcedure.average); + it('should be NaN', function () { + assert.ok(isNaN(ArrayProcedure.average([]))); + }); }); describe(".product(source)", function () { procedureShouldBe(a, product, ArrayProcedure.product); + it('should be NaN', function () { + assert.ok(isNaN(ArrayProcedure.product([]))); + assert.ok(isNaN(ArrayProcedure.product([NaN], true))); + }); + }); + describe(".quotient(source)", function () { + procedureShouldBe(a, quotient, ArrayProcedure.quotient); + it('should be NaN', function () { + assert.ok(isNaN(ArrayProcedure.quotient([]))); + assert.ok(isNaN(ArrayProcedure.quotient([1]))); + assert.ok(isNaN(ArrayProcedure.quotient([3, 2, 1, 0]))); + assert.ok(isNaN(ArrayProcedure.quotient([NaN], true))); + assert.ok(isNaN(ArrayProcedure.quotient([NaN, NaN, NaN]))); + }); }); describe(".min(source)", function () { describe("a", function () { @@ -34,6 +54,10 @@ describe("b", function () { procedureShouldBe(b, minB, ArrayProcedure.min); }); + it("should be NaN", function () { + assert.ok(isNaN(ArrayProcedure.min(null))); + assert.ok(isNaN(ArrayProcedure.min([NaN], true))); + }); }); describe(".max(source)", function () { describe("a", function () { @@ -42,6 +66,10 @@ describe("b", function () { procedureShouldBe(b, maxB, ArrayProcedure.max); }); + it("should be NaN", function () { + assert.ok(isNaN(ArrayProcedure.max(null))); + assert.ok(isNaN(ArrayProcedure.max([NaN], true))); + }); }); }); //# sourceMappingURL=Procedure.js.map \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Procedure.js.map b/tests/mocha/System/Collections/Arrays/Procedure.js.map index c3c53800..6418b59a 100644 --- a/tests/mocha/System/Collections/Arrays/Procedure.js.map +++ b/tests/mocha/System/Collections/Arrays/Procedure.js.map @@ -1 +1 @@ -{"version":3,"file":"Procedure.js","sourceRoot":"","sources":["Procedure.ts"],"names":[],"mappings":";;;;;;;;;IAEA,IAAY,cAAc,WAAM,0DAA0D,CAAC,CAAA;IAC3F,IAAI,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAGlE,IACA,IAAI,GAAM,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAC7D,CAAC,GAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAC1C,CAAC,GAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EACrD,GAAG,GAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAC5C,OAAO,GAAG,GAAG,GAAC,CAAC,EACf,OAAO,GAAG,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC;IAGnC,2BACC,MAAe,EACf,KAAY,EACZ,CAA6C;QAE7C,EAAE,CAAC,eAAe,EAAE;YAEnB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,YAAY,GAAG,KAAK,EAAE;YAExB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,cAAc,EAAE;QAExB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE;QAE5B,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAGH,QAAQ,CAAC,kBAAkB,EAAE;QAE5B,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAGH,QAAQ,CAAC,cAAc,EAAE;QAExB,QAAQ,CAAC,GAAG,EAAE;YAEb,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,EAAE;YAEb,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE;QAExB,QAAQ,CAAC,GAAG,EAAE;YAEb,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,EAAE;YAEb,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"Procedure.js","sourceRoot":"","sources":["Procedure.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Procedure.ts b/tests/mocha/System/Collections/Arrays/Procedure.ts index e8d98c4c..1c08a91c 100644 --- a/tests/mocha/System/Collections/Arrays/Procedure.ts +++ b/tests/mocha/System/Collections/Arrays/Procedure.ts @@ -1,26 +1,30 @@ /// -import * as ArrayProcedure from '../../../../../source/System/Collections/Array/Procedure'; +import * as ArrayProcedure from "../../../../../source/System/Collections/Array/Procedure"; var assert = require('../../../../../node_modules/assert/assert'); const -minA = -10, maxA = 2000, minB = -Infinity, maxB = Infinity, -a = [5, minA, -1, maxA, -2, NaN, 20], -b = [5, 2000, maxB, -1, NaN, -10, minB, -2, 20], -sum = 5 + minA + (-1) + maxA + (-2) + 20, -average = sum/6, // Not including NaN -product = 5*minA*(-1)*maxA*(-2)*20; + minA = -10, + maxA = 2000, + minB = -Infinity, + maxB = Infinity, + a = [5, minA, -1, maxA, -2, NaN, 20], + b = [5, 2000, maxB, -1, NaN, -10, minB, -2, 20], + sum = 5 + minA + (-1) + maxA + (-2) + 20, + average = sum/6, // Not including NaN + product = 5*minA*(-1)*maxA*(-2)*20, + quotient = 5/minA/(-1)/maxA/(-2)/20; function procedureShouldBe( source:number[], value:number, - p:(array:number[], ignoreNaN:boolean)=>number) + p:(array:number[], ignoreNaN?:boolean)=>number) { it('should be NaN', ()=> { - assert.ok(isNaN(p(source, false))); + assert.ok(isNaN(p(source))); }); it('should be ' + value, ()=> { @@ -31,17 +35,46 @@ function procedureShouldBe( describe(".sum(source)", ()=> { procedureShouldBe(a, sum, ArrayProcedure.sum); + it('should be 0', ()=> + { + assert.equal(ArrayProcedure.sum([]), 0); + }); }); describe(".average(source)", ()=> { procedureShouldBe(a, average, ArrayProcedure.average); + it('should be NaN', ()=> + { + assert.ok(isNaN(ArrayProcedure.average([]))); + }); + }); describe(".product(source)", ()=> { procedureShouldBe(a, product, ArrayProcedure.product); + it('should be NaN', ()=> + { + assert.ok(isNaN(ArrayProcedure.product([]))); + assert.ok(isNaN(ArrayProcedure.product([NaN], true))); + }); + +}); + +describe(".quotient(source)", ()=> +{ + procedureShouldBe(a, quotient, ArrayProcedure.quotient); + it('should be NaN', ()=> + { + assert.ok(isNaN(ArrayProcedure.quotient([]))); + assert.ok(isNaN(ArrayProcedure.quotient([1]))); + assert.ok(isNaN(ArrayProcedure.quotient([3,2,1,0]))); + assert.ok(isNaN(ArrayProcedure.quotient([NaN], true))); + assert.ok(isNaN(ArrayProcedure.quotient([NaN,NaN,NaN]))); + }); + }); @@ -56,6 +89,12 @@ describe(".min(source)", ()=> { procedureShouldBe(b, minB, ArrayProcedure.min); }); + + it("should be NaN",()=>{ + assert.ok(isNaN(ArrayProcedure.min(null))); + assert.ok(isNaN(ArrayProcedure.min([NaN],true))); + }); + }); describe(".max(source)", ()=> @@ -69,4 +108,9 @@ describe(".max(source)", ()=> { procedureShouldBe(b, maxB, ArrayProcedure.max); }); + + it("should be NaN",()=>{ + assert.ok(isNaN(ArrayProcedure.max(null))); + assert.ok(isNaN(ArrayProcedure.max([NaN],true))); + }); }); diff --git a/tests/mocha/System/Collections/Arrays/Utility.js b/tests/mocha/System/Collections/Arrays/Utility.js index a68af3df..24660b25 100644 --- a/tests/mocha/System/Collections/Arrays/Utility.js +++ b/tests/mocha/System/Collections/Arrays/Utility.js @@ -18,7 +18,6 @@ describe(".initialize(length)", function () { function testLength(len) { it("should be length " + len, function () { - len = 100; var a = ArrayUtility.initialize(len); assert.equal(a.length, len, ".length should be " + len); }); @@ -28,9 +27,25 @@ }); describe(".copy(source) & .equals(old,new)", function () { it("should equal", function () { - var s1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3]; - var s2 = ArrayUtility.copy(s1); + var s1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3], s2 = ArrayUtility.copy(s1), s3 = ArrayUtility.copy(s1, 1), s4 = ArrayUtility.copy(s1, 1, 3), s5 = ArrayUtility.copy(null); assert.ok(Arrays.areEqual(s1, s2)); + assert.equal(s5, null); + }); + }); + describe(".copyTo(source,destination)", function () { + it("should throw for invalid parameter", function () { + assert.throws(function () { ArrayUtility.copyTo(null, null); }); + assert.throws(function () { ArrayUtility.copyTo([], null); }); + assert.throws(function () { ArrayUtility.copyTo([1], [], -1); }); + assert.throws(function () { ArrayUtility.copyTo([1], [], 2); }); + assert.throws(function () { ArrayUtility.copyTo([1], { length: -1 }); }); + assert.throws(function () { ArrayUtility.copyTo([1], [], 0, 0, 5); }); + }); + }); + describe(".indexOf(source,value)", function () { + var a = initTestArray(); + it("should return true for a value contained", function () { + assert.notEqual(ArrayUtility.indexOf(a, -1), -1); }); }); describe(".contains(source,value)", function () { @@ -42,14 +57,37 @@ assert.ok(!ArrayUtility.contains(a, -9876)); }); }); - describe(".findIndex(source,of)", function () { + describe(".replace(source,oldValue,newValue)", function () { var a = initTestArray(); + a.push(5); + it("should properly replace items with max", function () { + assert.equal(ArrayUtility.replace(null, 5, 6), 0); + assert.equal(ArrayUtility.replace([], 5, 6), 0); + assert.equal(ArrayUtility.replace(a, 5, 6), 2); + assert.ok(ArrayUtility.contains(a, 6)); + assert.equal(ArrayUtility.replace(a, 6, 5, 1), 1); + assert.ok(ArrayUtility.contains(a, 6)); + assert.ok(ArrayUtility.contains(a, 5)); + }); + it("should throw for invalid parameter", function () { + assert.throws(function () { ArrayUtility.replace([4, 5, 6], 5, 6, -5); }); + }); + }); + describe(".findIndex(source,of)", function () { + var a = initTestArray(), b = { 0: 3, 1: 1, 2: 2, length: 3 }; it("should find and return the correct index", function () { assert.equal(ArrayUtility.findIndex(a, function (v) { return v == -1; }), 2); }); + it("should find and return the correct index", function () { + assert.equal(ArrayUtility.findIndex(b, function (v) { return v == 1; }), 1); + }); it("should return -1 when the value is not present", function () { assert.equal(ArrayUtility.findIndex(a, function (v) { return v == -9876; }), -1); }); + it("should throw for invalid parameter", function () { + assert.throws(function () { ArrayUtility.findIndex(null, function () { return true; }); }); + assert.throws(function () { ArrayUtility.findIndex(a, null); }); + }); }); describe(".register(target,value)", function () { it("should add a value that isn't present", function () { @@ -64,13 +102,17 @@ assert.ok(!ArrayUtility.register(a, -1)); assert.equal(a.length, len); }); + it("should throw for invalid parameter", function () { + assert.throws(function () { ArrayUtility.register(null, -1, function () { return true; }); }); + }); }); describe(".remove(target,value)", function () { it("should remove the item/value request and return the number of instances removed", function () { - var s = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3]; + var s = [10, 9, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 3]; var len = s.length; - assert.equal(ArrayUtility.remove(s, 9), 1, "Only 9 removed once"); + assert.equal(ArrayUtility.remove(s, 9, 1), 1, "Only 9 removed once"); assert.equal(s.length, len - 1, ".length should be less by one"); + assert.equal(ArrayUtility.remove(s, 9, 3), 2, "Remaining 9s removed."); assert.equal(s[1], 8, "Index [1] is now 8"); len = s.length; assert.equal(ArrayUtility.remove(s, 2), 2, "2 removed twice"); @@ -84,19 +126,109 @@ assert.ok(ArrayUtility.removeIndex(s, 5), "Index [5] removed"); assert.equal(s.length, len - 1, ".length should be less by one"); len = s.length; + assert.equal(ArrayUtility.remove(s, 3, null), 3, "All 3s removed."); + assert.equal(s.length, len - 3, ".length should be the same"); + len = s.length; assert.ok(!ArrayUtility.removeIndex(s, 15), "Index [15] doesn't exist"); assert.equal(s.length, len, ".length should be the same"); }); + it("should assert invalid parameters", function () { + assert.throws(function () { + ArrayUtility.removeIndex(null, 0); + }); + assert.throws(function () { + ArrayUtility.removeIndex([1, 2], -1); + }); + assert.throws(function () { + ArrayUtility.remove([1, 2], 1, -2); + }); + }); + }); + describe(".updateRange(value,count)", function () { + it("should correctly overwrite the value requested", function () { + var value = 10, count = 3, r = [1, 2, 3]; + assert.doesNotThrow(function () { ArrayUtility.updateRange(null, value); }); + ArrayUtility.updateRange(r, value); + assert.equal(r.length, count, ".length should be 3"); + for (var i = 0; i < count; i++) { + assert.equal(r[i], value); + } + ArrayUtility.clear(r); + for (var i = 0; i < count; i++) { + assert.equal(r[i], null); + } + }); + it("should throw for invalid parameter stop less than start", function () { + assert.throws(function () { ArrayUtility.updateRange([1, 2, 3], 4, 2, 1); }); + }); + }); + describe(".applyTo(source,action)", function () { + it("should correctly overwrite the values", function () { + var value = 10, count = 3, r = [1, 2, 3]; + assert.doesNotThrow(function () { ArrayUtility.applyTo(null, function () { return null; }); }); + ArrayUtility.applyTo(r, function () { return null; }); + assert.equal(r.length, count, ".length should be 3"); + for (var i = 0; i < count; i++) { + assert.equal(r[i], null); + } + }); + }); + describe(".applyTo(source,action)", function () { + it("should correctly overwrite the values", function () { + var count = 0, r = [1, 2, 3]; + assert.doesNotThrow(function () { ArrayUtility.forEach(null, function () { return true; }); }); + ArrayUtility.forEach(r, function (n, i) { + assert.equal(count, i, "count should be " + i); + count++; + return i ? false : true; + }); + assert.equal(count, 2, "count should be 2"); + }); }); describe(".repeat(value,count)", function () { it("should correctly repeat the value requested", function () { var value = 10, count = 3; var r = ArrayUtility.repeat(value, count); - assert.ok(r.length == count, ".length should be 3"); + assert.equal(r.length, count, ".length should be 3"); for (var i = 0; i < count; i++) { assert.equal(r[i], value); } }); + it("should throw for invalid parameter", function () { + assert.throws(function () { ArrayUtility.repeat(1, -2); }); + }); + }); + describe(".rangeUntil(first,until,step)", function () { + it("should correctly increase the value requested", function () { + var first = 10, count = 3, step = 2, until = first + count * step; + var r = ArrayUtility.rangeUntil(first, until, 2); + assert.equal(r.length, count, ".length should be 3"); + for (var i = 0; i < count; i++) { + assert.equal(r[i], first + i * 2); + } + }); + it("should throw for invalid parameter", function () { + assert.throws(function () { ArrayUtility.rangeUntil(Infinity, 10); }); + assert.throws(function () { ArrayUtility.rangeUntil(NaN, 10); }); + assert.throws(function () { ArrayUtility.rangeUntil(1, NaN); }); + assert.throws(function () { ArrayUtility.rangeUntil(1, Infinity); }); + assert.throws(function () { ArrayUtility.range(1, -1); }); + assert.throws(function () { ArrayUtility.rangeUntil(1, 5, 0); }); + }); + }); + describe(".flatten(source,recurseDepth)", function () { + it("should convert multi dimensional array tree to a flat one", function () { + var len = initTestArray().length; + var a = [[initTestArray(), initTestArray()], initTestArray()]; + var b = ArrayUtility.flatten(a, 3); + assert.equal(b.length, len * 3); + }); + it("should reduce multi dimensional array tree", function () { + var len = initTestArray().length; + var a = [[initTestArray(), initTestArray()], initTestArray()]; + var b = ArrayUtility.flatten(a); + assert.equal(b.length, len + 2); + }); }); function measureRepeated(closure) { var repeat = 50; diff --git a/tests/mocha/System/Collections/Arrays/Utility.js.map b/tests/mocha/System/Collections/Arrays/Utility.js.map index 8e7641e1..d4029217 100644 --- a/tests/mocha/System/Collections/Arrays/Utility.js.map +++ b/tests/mocha/System/Collections/Arrays/Utility.js.map @@ -1 +1 @@ -{"version":3,"file":"Utility.js","sourceRoot":"","sources":["Utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Utility.js","sourceRoot":"","sources":["Utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tests/mocha/System/Collections/Arrays/Utility.ts b/tests/mocha/System/Collections/Arrays/Utility.ts index dfa92465..24acef9c 100644 --- a/tests/mocha/System/Collections/Arrays/Utility.ts +++ b/tests/mocha/System/Collections/Arrays/Utility.ts @@ -20,7 +20,6 @@ describe(".initialize(length)", ()=> { it("should be length " + len, ()=> { - len = 100; var a = ArrayUtility.initialize(len); assert.equal(a.length, len, ".length should be " + len); }); @@ -35,13 +34,40 @@ describe(".copy(source) & .equals(old,new)", ()=> { it("should equal", ()=> { - var s1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3]; - var s2 = ArrayUtility.copy(s1); + var s1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3], + s2 = ArrayUtility.copy(s1), + s3 = ArrayUtility.copy(s1, 1), + s4 = ArrayUtility.copy(s1, 1, 3), + s5 = ArrayUtility.copy(null); assert.ok(Arrays.areEqual(s1, s2)); + assert.equal(s5, null); }); }); +describe(".copyTo(source,destination)", ()=> +{ + it("should throw for invalid parameter", ()=> + { + assert.throws(()=> {ArrayUtility.copyTo(null, null);}); + assert.throws(()=> {ArrayUtility.copyTo([], null);}); + assert.throws(()=> {ArrayUtility.copyTo([1], [], -1);}); + assert.throws(()=> {ArrayUtility.copyTo([1], [], 2);}); + assert.throws(()=> {ArrayUtility.copyTo([1], {length: -1});}); + assert.throws(()=> {ArrayUtility.copyTo([1], [], 0, 0, 5);}); + }); +}); + +describe(".indexOf(source,value)", ()=> +{ + var a = initTestArray(); + it("should return true for a value contained", ()=> + { + assert.notEqual(ArrayUtility.indexOf(a, -1), -1); + }); +}); + + describe(".contains(source,value)", ()=> { var a = initTestArray(); @@ -55,17 +81,49 @@ describe(".contains(source,value)", ()=> }); }); -describe(".findIndex(source,of)", ()=> + +describe(".replace(source,oldValue,newValue)", ()=> { var a = initTestArray(); + a.push(5); + it("should properly replace items with max", ()=> + { + assert.equal(ArrayUtility.replace(null, 5, 6), 0); + assert.equal(ArrayUtility.replace([], 5, 6), 0); + assert.equal(ArrayUtility.replace(a, 5, 6), 2); + assert.ok(ArrayUtility.contains(a, 6)); + assert.equal(ArrayUtility.replace(a, 6, 5, 1), 1); + assert.ok(ArrayUtility.contains(a, 6)); + assert.ok(ArrayUtility.contains(a, 5)); + + }); + it("should throw for invalid parameter", ()=> + { + assert.throws(()=> {ArrayUtility.replace([4, 5, 6], 5, 6, -5);}); + }); +}); + +describe(".findIndex(source,of)", ()=> +{ + var a = initTestArray(), b:IArray = {0: 3, 1: 1, 2: 2, length: 3}; it("should find and return the correct index", ()=> { assert.equal(ArrayUtility.findIndex(a, (v:number)=>v== -1), 2); }); + it("should find and return the correct index", ()=> + { + assert.equal(ArrayUtility.findIndex(b, (v:number)=>v==1), 1); + }); it("should return -1 when the value is not present", ()=> { assert.equal(ArrayUtility.findIndex(a, (v:number)=> v== -9876), -1); }); + + it("should throw for invalid parameter", ()=> + { + assert.throws(()=> {ArrayUtility.findIndex(null, ()=>true)}); + assert.throws(()=> {ArrayUtility.findIndex(a, null)}); + }); }); describe(".register(target,value)", ()=> @@ -85,6 +143,12 @@ describe(".register(target,value)", ()=> assert.ok(!ArrayUtility.register(a, -1)); assert.equal(a.length, len); }); + + it("should throw for invalid parameter", ()=> + { + assert.throws(()=> {ArrayUtility.register(null, -1, ()=>true)}); + }); + }); @@ -92,11 +156,12 @@ describe(".remove(target,value)", ()=> { it("should remove the item/value request and return the number of instances removed", ()=> { - var s = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3]; + var s = [10, 9, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 3]; var len = s.length; - assert.equal(ArrayUtility.remove(s, 9), 1, "Only 9 removed once"); + assert.equal(ArrayUtility.remove(s, 9, 1), 1, "Only 9 removed once"); assert.equal(s.length, len - 1, ".length should be less by one"); + assert.equal(ArrayUtility.remove(s, 9, 3), 2, "Remaining 9s removed."); assert.equal(s[1], 8, "Index [1] is now 8"); len = s.length; @@ -114,43 +179,175 @@ describe(".remove(target,value)", ()=> assert.equal(s.length, len - 1, ".length should be less by one"); len = s.length; + assert.equal(ArrayUtility.remove(s, 3, null), 3, "All 3s removed."); + assert.equal(s.length, len - 3, ".length should be the same"); + len = s.length; + assert.ok(!ArrayUtility.removeIndex(s, 15), "Index [15] doesn't exist"); assert.equal(s.length, len, ".length should be the same"); }); + it("should assert invalid parameters", ()=> + { + assert.throws(()=> + { + ArrayUtility.removeIndex(null, 0); + }); + assert.throws(()=> + { + ArrayUtility.removeIndex([1, 2], -1); + }); + assert.throws(()=> + { + ArrayUtility.remove([1, 2], 1, -2); + }); + }); + }); /* Utility.applyTo skipped. It has too many permutations while being a straight forward function. */ +describe(".updateRange(value,count)", ()=> +{ + it("should correctly overwrite the value requested", ()=> + { + + var value = 10, count = 3, r = [1, 2, 3]; + assert.doesNotThrow(()=> {ArrayUtility.updateRange(null, value)}); + ArrayUtility.updateRange(r, value); + + assert.equal(r.length, count, ".length should be 3"); + for(let i = 0; i + { + assert.throws(()=> {ArrayUtility.updateRange([1, 2, 3], 4, 2, 1);}) + }) +}); + +describe(".applyTo(source,action)", ()=> +{ + it("should correctly overwrite the values", ()=> + { + + var value = 10, count = 3, r = [1, 2, 3]; + assert.doesNotThrow(()=> {ArrayUtility.applyTo(null, ()=>null)}); + ArrayUtility.applyTo(r, ()=>null); + assert.equal(r.length, count, ".length should be 3"); + for(let i = 0; i +{ + it("should correctly overwrite the values", ()=> + { + + var count = 0, r = [1, 2, 3]; + assert.doesNotThrow(()=> {ArrayUtility.forEach(null, ()=>true)}); + ArrayUtility.forEach(r, (n, i)=> + { + assert.equal(count, i, "count should be " + i); + count++; + return i ? false : true; + }); + assert.equal(count, 2, "count should be 2"); + }); +}); + describe(".repeat(value,count)", ()=> { it("should correctly repeat the value requested", ()=> { var value = 10, count = 3; var r = ArrayUtility.repeat(value, count); - assert.ok(r.length==count, ".length should be 3"); + assert.equal(r.length, count, ".length should be 3"); for(let i = 0; i + { + assert.throws(()=> {ArrayUtility.repeat(1, -2);}) + }) }); -function measureRepeated(closure:()=>void):number { +describe(".rangeUntil(first,until,step)", ()=> +{ + it("should correctly increase the value requested", ()=> + { + var first = 10, count = 3, step = 2, until = first + count*step; + var r = ArrayUtility.rangeUntil(first, until, 2); + assert.equal(r.length, count, ".length should be 3"); + for(let i = 0; i + { + assert.throws(()=> {ArrayUtility.rangeUntil(Infinity, 10);}); + assert.throws(()=> {ArrayUtility.rangeUntil(NaN, 10);}); + assert.throws(()=> {ArrayUtility.rangeUntil(1, NaN);}); + assert.throws(()=> {ArrayUtility.rangeUntil(1, Infinity);}); + assert.throws(()=> {ArrayUtility.range(1, -1);}); + assert.throws(()=> {ArrayUtility.rangeUntil(1, 5, 0);}); + }); +}); + +describe(".flatten(source,recurseDepth)",()=>{ + it("should convert multi dimensional array tree to a flat one",()=>{ + var len = initTestArray().length; + var a = [[initTestArray(),initTestArray()],initTestArray()]; + var b = ArrayUtility.flatten(a,3); + assert.equal(b.length,len*3); + }); + + it("should reduce multi dimensional array tree",()=>{ + var len = initTestArray().length; + var a = [[initTestArray(),initTestArray()],initTestArray()]; + var b = ArrayUtility.flatten(a); + assert.equal(b.length,len+2); + }) + +}); + +function measureRepeated(closure:()=>void):number +{ const repeat = 50; var ms = 0; - for(let i=0;ivoid):void { - it(measureRepeated(closure)+" milliseconds: "+suffix, ()=>{ +function outputMeasured(suffix:string, closure:()=>void):void +{ + it(measureRepeated(closure) + " milliseconds: " + suffix, ()=> + { assert.ok(true); }); } diff --git a/tests/mocha/import-tests.js b/tests/mocha/import-tests.js index 5a32d098..44d42fe9 100644 --- a/tests/mocha/import-tests.js +++ b/tests/mocha/import-tests.js @@ -57,5 +57,4 @@ console.log("Importing Tests:"); importRecursive(); }); - -//# sourceMappingURL=import-tests.js.map +//# sourceMappingURL=import-tests.js.map \ No newline at end of file diff --git a/tests/mocha/import-tests.js.map b/tests/mocha/import-tests.js.map index c849e2e6..36bc1dea 100644 --- a/tests/mocha/import-tests.js.map +++ b/tests/mocha/import-tests.js.map @@ -1 +1 @@ -{"version":3,"sources":["import-tests.ts"],"names":[],"mappings":";;;;;;;;;IAEA,IAAY,EAAE,WAAM,IAAI,CAAC,CAAA;IAEzB,IAAM,IAAI,GAAG,gBAAgB,CAAC;IAE9B,oBAAoB,IAAW,EAAE,GAAW;QAE3C,MAAM,CAAC,EAAE;aACP,WAAW,CAAC,IAAI,CAAC;aACjB,MAAM,CAAC,UAAC,IAAI;YACb,OAAA,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;mBACtD,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE;QAD1C,CAC0C,CAAC,CAAC;IAC9C,CAAC;IAED,0BAA0B,IAAW;QAEpC,MAAM,CAAC,EAAE;aACP,WAAW,CAAC,IAAI,CAAC;aACjB,MAAM,CAAC,UAAC,IAAI,IAAG,OAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAA5C,CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,yBAAyB,IAAgB,EAAE,WAA2B,EAAE,IAAgB;QAA/D,oBAAgB,GAAhB,SAAgB;QAAE,2BAA2B,GAA3B,mBAA2B;QAAE,oBAAgB,GAAhB,SAAgB;QAEvF,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1B,EAAE,CAAA,CAAC,WAAW,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,gBAAgB,CAAC,IAAI,GAAG,OAAO,CAAC;aAC9B,IAAI,EAAE;aACN,OAAO,CAAC,UAAC,OAAO;YAEhB,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;gBAEvB,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEJ,EAAE,CAAA,CAAC,WAAW,CAAC,CACf,CAAC;YACA,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAEpE,KAAK;iBACH,IAAI,EAAE;iBACN,OAAO,CAAC,UAAC,QAAQ;gBAEjB,IAAI,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAE3B,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAEzC,IAAI,CAAC,GAAG;oBAEP,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;gBAC1B,CAAC,CAAC;gBAGF,EAAE,CAAA,CAAC,KAAK,IAAE,CAAC,IAAI,IAAI,IAAE,IAAI,CAAC;oBAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI;oBAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAExB,CAAC,CAAC,CAAC;QACL,CAAC;IAEF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC","file":"import-tests.js","sourcesContent":["///\r\n\r\nimport * as fs from \"fs\";\r\n\r\nconst root = \"./tests/mocha/\";\r\n\r\nfunction getFilesAt(path:string, ext?:string):string[]\r\n{\r\n\treturn fs\r\n\t\t.readdirSync(path)\r\n\t\t.filter((name)=>\r\n\t\t(!ext || name.lastIndexOf(ext)==name.length - ext.length)\r\n\t\t&& fs.statSync(path + '/' + name).isFile());\r\n}\r\n\r\nfunction getDirectoriesAt(path:string):string[]\r\n{\r\n\treturn fs\r\n\t\t.readdirSync(path)\r\n\t\t.filter((name)=>fs.statSync(path + '/' + name).isDirectory());\r\n}\r\n\r\nfunction importRecursive(path:string = \"\", importFiles:boolean = false, base:string = \"\")\r\n{\r\n\tvar dirPath = base + path;\r\n\tif(importFiles) console.log(dirPath);\r\n\tgetDirectoriesAt(root + dirPath)\r\n\t\t.sort()\r\n\t\t.forEach((dirname)=>\r\n\t\t{\r\n\t\t\tdescribe(dirname + '/', ()=>\r\n\t\t\t{\r\n\t\t\t\timportRecursive(dirname, true, dirPath + '/');\r\n\t\t\t});\r\n\t\t});\r\n\r\n\tif(importFiles)\r\n\t{\r\n\t\tvar files = getFilesAt(root + dirPath, '.js'), count = files.length;\r\n\r\n\t\tfiles\r\n\t\t\t.sort()\r\n\t\t\t.forEach((filename)=>\r\n\t\t\t{\r\n\t\t\t\tvar filePath = dirPath + '/' + filename;\r\n\t\t\t\tconsole.log(\" \", filename);\r\n\r\n\t\t\t\tvar name = filename.replace(/\\.js$/, '');\r\n\r\n\t\t\t\tvar i = ()=>\r\n\t\t\t\t{\r\n\t\t\t\t\trequire('./' + filePath);\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Allows for simple default instead of recursive.\r\n\t\t\t\tif(count==1 && name==path) i();\r\n\t\t\t\telse describe(name, i);\r\n\r\n\t\t\t});\r\n\t}\r\n\r\n}\r\nconsole.log(\"Importing Tests:\");\r\nimportRecursive();\r\n"]} \ No newline at end of file +{"version":3,"file":"import-tests.js","sourceRoot":"","sources":["import-tests.ts"],"names":[],"mappings":";;;;;;;;;IAEA,IAAY,EAAE,WAAM,IAAI,CAAC,CAAA;IAEzB,IAAM,IAAI,GAAG,gBAAgB,CAAC;IAE9B,oBAAoB,IAAW,EAAE,GAAW;QAE3C,MAAM,CAAC,EAAE;aACP,WAAW,CAAC,IAAI,CAAC;aACjB,MAAM,CAAC,UAAC,IAAI;YACb,OAAA,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;mBACtD,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE;QAD1C,CAC0C,CAAC,CAAC;IAC9C,CAAC;IAED,0BAA0B,IAAW;QAEpC,MAAM,CAAC,EAAE;aACP,WAAW,CAAC,IAAI,CAAC;aACjB,MAAM,CAAC,UAAC,IAAI,IAAG,OAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAA5C,CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,yBAAyB,IAAgB,EAAE,WAA2B,EAAE,IAAgB;QAA/D,oBAAgB,GAAhB,SAAgB;QAAE,2BAA2B,GAA3B,mBAA2B;QAAE,oBAAgB,GAAhB,SAAgB;QAEvF,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1B,EAAE,CAAA,CAAC,WAAW,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,gBAAgB,CAAC,IAAI,GAAG,OAAO,CAAC;aAC9B,IAAI,EAAE;aACN,OAAO,CAAC,UAAC,OAAO;YAEhB,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;gBAEvB,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEJ,EAAE,CAAA,CAAC,WAAW,CAAC,CACf,CAAC;YACA,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAEpE,KAAK;iBACH,IAAI,EAAE;iBACN,OAAO,CAAC,UAAC,QAAQ;gBAEjB,IAAI,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAE3B,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAEzC,IAAI,CAAC,GAAG;oBAEP,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;gBAC1B,CAAC,CAAC;gBAGF,EAAE,CAAA,CAAC,KAAK,IAAE,CAAC,IAAI,IAAI,IAAE,IAAI,CAAC;oBAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI;oBAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAExB,CAAC,CAAC,CAAC;QACL,CAAC;IAEF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC"} \ No newline at end of file