diff --git a/.gitignore b/.gitignore
index 83e84d7a..cfc0b9b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -148,7 +148,6 @@ ClientBin/
*.dbproj.schemaview
*.pfx
*.publishsettings
-node_modules/
# RIA/Silverlight projects
Generated_Code/
@@ -185,6 +184,7 @@ Desktop.ini
# Nodejs
node_modules
bower_components
+coverage
# IntelliJ
diff --git a/.idea/TypeScript.NET.iml b/.idea/TypeScript.NET.iml
index d51d764e..9a8d8a3c 100644
--- a/.idea/TypeScript.NET.iml
+++ b/.idea/TypeScript.NET.iml
@@ -5,6 +5,7 @@
+
diff --git a/coverage.bat b/coverage.bat
new file mode 100644
index 00000000..17e05045
--- /dev/null
+++ b/coverage.bat
@@ -0,0 +1 @@
+istanbul cover node_modules/mocha/bin/_mocha -- -R spec
diff --git a/test.js b/test.js
new file mode 100644
index 00000000..2f39e9a4
--- /dev/null
+++ b/test.js
@@ -0,0 +1 @@
+var tests = require('./tests/mocha/import-tests');
\ No newline at end of file
diff --git a/tests/mocha/System.Linq/Enumerable.js b/tests/mocha/System.Linq/Enumerable.js
index 96ffa1e0..fca435da 100644
--- a/tests/mocha/System.Linq/Enumerable.js
+++ b/tests/mocha/System.Linq/Enumerable.js
@@ -156,5 +156,4 @@
assert.equal(group_B.sum(function (x) { return x.Salary; }), 1000000000.00, "Expected sum to be correct.");
});
});
-
-//# sourceMappingURL=Enumerable.js.map
+//# sourceMappingURL=Enumerable.js.map
\ No newline at end of file
diff --git a/tests/mocha/System.Linq/Enumerable.js.map b/tests/mocha/System.Linq/Enumerable.js.map
index 52452c57..8634c392 100644
--- a/tests/mocha/System.Linq/Enumerable.js.map
+++ b/tests/mocha/System.Linq/Enumerable.js.map
@@ -1 +1 @@
-{"version":3,"sources":["System.Linq/Enumerable.ts"],"names":[],"mappings":";;;;;;;;;IAEA,wBAAuB,kDAAkD,CAAC,CAAA;IAC1E,qBAAuB,kCAAkC,CAAC,CAAA;IAC1D,IAAI,MAAM,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;IAW5D,IAAM,MAAM,GAAc,MAAM,CAAC,MAAM,CAAC;QACvC;YACC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,GAAG;SACN;QACD;YACC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,GAAG;SACN;QACD;YACC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,GAAG;SACN;QACD;YACC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,GAAG;SACN;QACD;YACC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,GAAG;SACN;QACD;YACC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,GAAG;SACN;KACD,CAAC,CAAC;IAEH,IAAI,gBAAgB,GAAG,cAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEpD,EAAE,CAAC,YAAY,EAAE;QAGhB,IAAI,MAAM,GAAG,gBAAgB,CAAC;QAC9B,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAEzB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QAExB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,EAAE,4CAA4C,CAAC,CAAC;QAEpF,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,EAAE,4CAA4C,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE;QAEjC,IAAI,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,IAAE,CAAC,EAAN,CAAM,CAAC,CAAC;QAEjD,IAAI,GAAU,EAAE,CAAC,GAAG,MAAM,CAAC;QAE3B,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QAEpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,EAAE,0CAA0C,CAAC,CAAC;QAElF,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,EAAE,0CAA0C,CAAC,CAAC;QAGlF,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAErB,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QAEpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,EAAE,4CAA4C,CAAC,CAAC;QAEpF,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,EAAE,4CAA4C,CAAC,CAAC;IAErF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE;QAGxB,IAAI,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAExC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,yDAAyD,CAAC,CAAC;QACpF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC,IAAG,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1C,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,uDAAuD,CAAC,CAAC;QAClF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACnF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,sDAAsD,CAAC,CAAC;QACjF,CAAC;IAEF,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,8BAA8B,EAAE;QAGlC,IAAI,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAExC,IAAI,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAC,CAAU,IAAI,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/D,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,yDAAyD,CAAC,CAAC;QACpF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAC,CAAU,IAAI,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/D,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,uDAAuD,CAAC,CAAC;QAClF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACnF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,sDAAsD,CAAC,CAAC;QACjF,CAAC;IAEF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE;QAGzC,IAAI,CAAC,GAAG,gBAAgB;aACtB,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC;aACjB,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC;aAChB,OAAO,EAAE,CAAC;QAEZ,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,uDAAuD,CAAC,CAAC;QAClF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,wDAAwD,CAAC,CAAC;QACnF,CAAC;QACD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EACvB,CAAC;YACA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,sDAAsD,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAG3B,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,oBAAoB,EAAE;QAExB,IAAI,UAAU,GAAG,gBAAgB;aAC/B,MAAM,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,gBAAgB;aACtB,OAAO,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QAElB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,gDAAgD,CAAC,CAAC;QAE9F,IAAI,CAAC,GAAG,gBAAgB;aACtB,OAAO,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,gBAAgB;aAC/B,MAAM,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE5B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,gDAAgD,CAAC,CAAC;QAG9F,IAAM,SAAS,GAAG,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;QACxD,IAAI,QAAQ,GAAG;YACd,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;YAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;YAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;YAC7D,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE;SAChE,CAAC;QACF,IAAI,MAAM,GAAG,cAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAT,CAAS,CAAC,CAAC;QAC/D,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,EAAL,CAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAEpD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,kBAAQ,CAAC,SAAS,EAAC,SAAS,CAAC,EAAE,SAAS,GAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,kBAAQ,CAAC,SAAS,EAAC,SAAS,CAAC,EAAE,SAAS,GAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,GAAG,IAAE,SAAS,EAAhB,CAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;QACzD,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,UAAA,CAAC,IAAE,OAAA,CAAC,CAAC,GAAG,IAAE,SAAS,EAAhB,CAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,EAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,EAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC;IAEvF,CAAC,CAAC,CAAC","file":"System.Linq/Enumerable.js","sourcesContent":["///\r\n\r\nimport {contains} from \"../../../source/System/Collections/Array/Utility\";\r\nimport Enumerable from \"../../../source/System.Linq/Linq\";\r\nvar assert = require('../../../node_modules/assert/assert');\r\n\r\n\r\ninterface TestItem\r\n{\r\n\ta:number;\r\n\tb:number;\r\n\tc:string;\r\n}\r\n\r\n\r\nconst source:TestItem[] = Object.freeze([\r\n\t{\r\n\t\ta: 1,\r\n\t\tb: 2,\r\n\t\tc: \"a\"\r\n\t},\r\n\t{\r\n\t\ta: 1,\r\n\t\tb: 1,\r\n\t\tc: \"b\"\r\n\t},\r\n\t{\r\n\t\ta: 1,\r\n\t\tb: 3,\r\n\t\tc: \"c\"\r\n\t},\r\n\t{\r\n\t\ta: 2,\r\n\t\tb: 2,\r\n\t\tc: \"d\"\r\n\t},\r\n\t{\r\n\t\ta: 2,\r\n\t\tb: 1,\r\n\t\tc: \"e\"\r\n\t},\r\n\t{\r\n\t\ta: 2,\r\n\t\tb: 3,\r\n\t\tc: \"f\"\r\n\t}\r\n]);\r\n\r\nvar sourceEnumerable = Enumerable.fromArray(source);\r\n\r\nit(\".memoize()\", ()=>\r\n{\r\n\r\n\tvar source = sourceEnumerable;\r\n\tvar A = source.memoize();\r\n\r\n\tvar sum = A.sum(o=>o.a);\r\n\r\n\tassert.equal(sum, source.sum(o=>o.a), \"Values must be equal after memoize pass 1.\");\r\n\r\n\tsum = A.sum(o=>o.b);\r\n\tassert.equal(sum, source.sum(o=>o.b), \"Values must be equal after memoize pass 2.\");\r\n});\r\n\r\nit(\".where(predicate).memoize()\", ()=>\r\n{\r\n\tvar source = sourceEnumerable.where(i => i.a==1);\r\n\r\n\tvar sum:number, A = source;\r\n\r\n\tsum = A.sum(o=>o.a);\r\n\r\n\tassert.equal(sum, source.sum(o=>o.a), \"Values must be equal after where pass 1.\");\r\n\r\n\tsum = A.sum(o=>o.b);\r\n\tassert.equal(sum, source.sum(o=>o.b), \"Values must be equal after where pass 2.\");\r\n\r\n\r\n\tA = source.memoize();\r\n\r\n\tsum = A.sum(o=>o.a);\r\n\r\n\tassert.equal(sum, source.sum(o=>o.a), \"Values must be equal after memoize pass 1.\");\r\n\r\n\tsum = A.sum(o=>o.b);\r\n\tassert.equal(sum, source.sum(o=>o.b), \"Values must be equal after memoize pass 2.\");\r\n\r\n});\r\n\r\nit(\".orderBy(selector)\", ()=>\r\n{\r\n\r\n\tvar source = sourceEnumerable.reverse();\r\n\r\n\tvar A = source.orderBy(o=>o.a).toArray();\r\n\tfor(let i = 0; i<3; i++)\r\n\t{\r\n\t\tassert.equal(A[i].a, 1, \"First three 'a' values should be 1 when ordered by 'a'.\");\r\n\t}\r\n\tfor(let i = 3; i<6; i++)\r\n\t{\r\n\t\tassert.equal(A[i].a, 2, \"Last three 'a' values should be 2 when ordered by 'a'.\");\r\n\t}\r\n\r\n\tvar B = source.orderBy(o=> o.b).toArray();\r\n\tfor(let i = 0; i<2; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 1, \"First two 'b' values should be 1 when ordered by 'b'.\");\r\n\t}\r\n\tfor(let i = 2; i<4; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 2, \"Second two 'b' values should be 2 when ordered by 'b'.\");\r\n\t}\r\n\tfor(let i = 4; i<6; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 3, \"Last two 'b' values should be 3 when ordered by 'b'.\");\r\n\t}\r\n\r\n});\r\n\r\n\r\nit(\".orderByDescending(selector)\", ()=>\r\n{\r\n\r\n\tvar source = sourceEnumerable.reverse();\r\n\r\n\tvar A = source.orderByDescending((o:TestItem)=> o.a).toArray();\r\n\tfor(let i = 0; i<3; i++)\r\n\t{\r\n\t\tassert.equal(A[i].a, 2, \"First three 'a' values should be 2 when ordered by 'a'.\");\r\n\t}\r\n\tfor(let i = 3; i<6; i++)\r\n\t{\r\n\t\tassert.equal(A[i].a, 1, \"Last three 'a' values should be 1 when ordered by 'a'.\");\r\n\t}\r\n\r\n\tvar B = source.orderByDescending((o:TestItem)=> o.b).toArray();\r\n\tfor(let i = 0; i<2; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 3, \"First two 'b' values should be 3 when ordered by 'b'.\");\r\n\t}\r\n\tfor(let i = 2; i<4; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 2, \"Second two 'b' values should be 2 when ordered by 'b'.\");\r\n\t}\r\n\tfor(let i = 4; i<6; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 1, \"Last two 'b' values should be 1 when ordered by 'b'.\");\r\n\t}\r\n\r\n});\r\n\r\nit(\".orderBy(selector).thenBy(selector)\", ()=>\r\n{\r\n\r\n\tvar B = sourceEnumerable\r\n\t\t.orderBy(o => o.b)\r\n\t\t.thenBy(o => o.c)\r\n\t\t.toArray();\r\n\r\n\tfor(let i = 0; i<2; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 1, \"First two 'b' values should be 1 when ordered by 'b'.\");\r\n\t}\r\n\tfor(let i = 2; i<4; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 2, \"Second two 'b' values should be 2 when ordered by 'b'.\");\r\n\t}\r\n\tfor(let i = 4; i<6; i++)\r\n\t{\r\n\t\tassert.equal(B[i].b, 3, \"Last two 'b' values should be 3 when ordered by 'b'.\");\r\n\t}\r\n\r\n\tassert.equal(B[0].c, \"b\");\r\n\tassert.equal(B[1].c, \"e\");\r\n\r\n\tassert.equal(B[2].c, \"a\");\r\n\tassert.equal(B[3].c, \"d\");\r\n\r\n\tassert.equal(B[4].c, \"c\");\r\n\tassert.equal(B[5].c, \"f\");\r\n\r\n\r\n});\r\n\r\n\r\nit(\".groupBy(selector)\", ()=>\r\n{\r\n\tvar A_distinct = sourceEnumerable\r\n\t\t.select(o=>o.a).distinct();\r\n\tvar A = sourceEnumerable\r\n\t\t.groupBy(o=>o.a);\r\n\r\n\tassert.equal(A_distinct.count(), A.count(), \"Number of groups should match distinct values.\");\r\n\r\n\tvar B = sourceEnumerable\r\n\t\t.groupBy(o=>o.b);\r\n\tvar B_distinct = sourceEnumerable\r\n\t\t.select(o=>o.b).distinct();\r\n\r\n\tassert.equal(B_distinct.count(), B.count(), \"Number of groups should match distinct values.\");\r\n\r\n\r\n\tconst COMPANY_A = \"Microsoft\", COMPANY_B = \"Hell Corp.\";\r\n\tvar objArray = [\r\n\t\t{ Name: \"John\", Id: 0, Salary: 1300.00, Company: COMPANY_A },\r\n\t\t{ Name: \"Peter\", Id: 1, Salary: 4800.50, Company: COMPANY_A },\r\n\t\t{ Name: \"Sandra\", Id: 2, Salary: 999.99, Company: COMPANY_A },\r\n\t\t{ Name: \"Me\", Id: 3, Salary: 1000000000.00, Company: COMPANY_B }\r\n\t];\r\n\tvar groups = Enumerable.from(objArray).groupBy(x => x.Company);\r\n\tvar companies = groups.select(x => x.key).toArray();\r\n\r\n\tassert.equal(companies.length,2, \"2 groups expected.\");\r\n\tassert.ok(contains(companies,COMPANY_A), \"Expect \"+COMPANY_A);\r\n\tassert.ok(contains(companies,COMPANY_B), \"Expect \"+COMPANY_B);\r\n\tvar group_A = groups.where(g=>g.key==COMPANY_A).single();\r\n\tvar group_B = groups.where(g=>g.key==COMPANY_B).single();\r\n\tassert.equal(group_A.count(),3, \"Expected count of 3.\");\r\n\tassert.equal(group_A.sum(x => x.Salary),7100.49, \"Expected sum to be correct.\");\r\n\tassert.equal(group_B.count(),1, \"Expected count of 1.\");\r\n\tassert.equal(group_B.sum(x => x.Salary),1000000000.00, \"Expected sum to be correct.\");\r\n\r\n});\r\n"]}
\ No newline at end of file
+{"version":3,"file":"Enumerable.js","sourceRoot":"","sources":["Enumerable.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/tests/mocha/System/Collections/Arrays/Compare.js b/tests/mocha/System/Collections/Arrays/Compare.js
index b64c8829..b7350abe 100644
--- a/tests/mocha/System/Collections/Arrays/Compare.js
+++ b/tests/mocha/System/Collections/Arrays/Compare.js
@@ -9,5 +9,4 @@
"use strict";
var assert = require('../../../../../node_modules/assert/assert');
});
-
-//# sourceMappingURL=Compare.js.map
+//# sourceMappingURL=Compare.js.map
\ No newline at end of file
diff --git a/tests/mocha/System/Collections/Arrays/Compare.js.map b/tests/mocha/System/Collections/Arrays/Compare.js.map
index 304fc78e..a60db0e3 100644
--- a/tests/mocha/System/Collections/Arrays/Compare.js.map
+++ b/tests/mocha/System/Collections/Arrays/Compare.js.map
@@ -1 +1 @@
-{"version":3,"sources":["System/Collections/Arrays/Compare.ts"],"names":[],"mappings":";;;;;;;;;IAGA,IAAI,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC","file":"System/Collections/Arrays/Compare.js","sourcesContent":["///\r\n\r\nimport * as ArrayCompare from '../../../../../source/System/Collections/Array/Compare';\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n"]}
\ No newline at end of file
+{"version":3,"file":"Compare.js","sourceRoot":"","sources":["Compare.ts"],"names":[],"mappings":";;;;;;;;;IAGA,IAAI,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC"}
\ 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 22f09991..7887d973 100644
--- a/tests/mocha/System/Collections/Arrays/Dispatch.js
+++ b/tests/mocha/System/Collections/Arrays/Dispatch.js
@@ -25,5 +25,4 @@
assert.equal(result, 2400);
});
});
-
-//# sourceMappingURL=Dispatch.js.map
+//# 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 ff5657b4..9c6d7f8a 100644
--- a/tests/mocha/System/Collections/Arrays/Dispatch.js.map
+++ b/tests/mocha/System/Collections/Arrays/Dispatch.js.map
@@ -1 +1 @@
-{"version":3,"sources":["System/Collections/Arrays/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","file":"System/Collections/Arrays/Dispatch.js","sourcesContent":["///\r\n\r\nimport dispatch from \"../../../../../source/System/Collections/Array/Dispatch\";\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n\r\nit(\"should apply closures in order\", ()=>\r\n{\r\n\tvar result = 0;\r\n\tvar a = [\r\n\t\t(p:number)=>\r\n\t\t{\r\n\t\t\tresult += p;\r\n\t\t},\r\n\t\t(p:number)=>\r\n\t\t{\r\n\t\t\tresult *= p;\r\n\t\t}\r\n\t];\r\n\r\n\tdispatch(a, 10);\r\n\tassert.equal(result, 100);\r\n\r\n\tdispatch(a, 20);\r\n\tassert.equal(result, 2400);\r\n});"]}
\ No newline at end of file
+{"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
diff --git a/tests/mocha/System/Collections/Arrays/Procedure.js b/tests/mocha/System/Collections/Arrays/Procedure.js
index 62148c97..5fd4ad65 100644
--- a/tests/mocha/System/Collections/Arrays/Procedure.js
+++ b/tests/mocha/System/Collections/Arrays/Procedure.js
@@ -44,5 +44,4 @@
});
});
});
-
-//# sourceMappingURL=Procedure.js.map
+//# 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 35f5f9ff..c3c53800 100644
--- a/tests/mocha/System/Collections/Arrays/Procedure.js.map
+++ b/tests/mocha/System/Collections/Arrays/Procedure.js.map
@@ -1 +1 @@
-{"version":3,"sources":["System/Collections/Arrays/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","file":"System/Collections/Arrays/Procedure.js","sourcesContent":["///\r\n\r\nimport * as ArrayProcedure from '../../../../../source/System/Collections/Array/Procedure';\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n\r\n\r\nconst\r\nminA = -10, maxA = 2000, minB = -Infinity, maxB = Infinity,\r\na = [5, minA, -1, maxA, -2, NaN, 20],\r\nb = [5, 2000, maxB, -1, NaN, -10, minB, -2, 20],\r\nsum = 5 + minA + (-1) + maxA + (-2) + 20,\r\naverage = sum/6, // Not including NaN\r\nproduct = 5*minA*(-1)*maxA*(-2)*20;\r\n\r\n\r\nfunction procedureShouldBe(\r\n\tsource:number[],\r\n\tvalue:number,\r\n\tp:(array:number[], ignoreNaN:boolean)=>number)\r\n{\r\n\tit('should be NaN', ()=>\r\n\t{\r\n\t\tassert.ok(isNaN(p(source, false)));\r\n\t});\r\n\tit('should be ' + value, ()=>\r\n\t{\r\n\t\tassert.equal(p(source, true), value);\r\n\t});\r\n}\r\n\r\ndescribe(\".sum(source)\", ()=>\r\n{\r\n\tprocedureShouldBe(a, sum, ArrayProcedure.sum);\r\n});\r\n\r\ndescribe(\".average(source)\", ()=>\r\n{\r\n\tprocedureShouldBe(a, average, ArrayProcedure.average);\r\n});\r\n\r\n\r\ndescribe(\".product(source)\", ()=>\r\n{\r\n\tprocedureShouldBe(a, product, ArrayProcedure.product);\r\n});\r\n\r\n\r\ndescribe(\".min(source)\", ()=>\r\n{\r\n\tdescribe(\"a\", ()=>\r\n\t{\r\n\t\tprocedureShouldBe(a, minA, ArrayProcedure.min);\r\n\t});\r\n\r\n\tdescribe(\"b\", ()=>\r\n\t{\r\n\t\tprocedureShouldBe(b, minB, ArrayProcedure.min);\r\n\t});\r\n});\r\n\r\ndescribe(\".max(source)\", ()=>\r\n{\r\n\tdescribe(\"a\", ()=>\r\n\t{\r\n\t\tprocedureShouldBe(a, maxA, ArrayProcedure.max);\r\n\t});\r\n\r\n\tdescribe(\"b\", ()=>\r\n\t{\r\n\t\tprocedureShouldBe(b, maxB, ArrayProcedure.max);\r\n\t});\r\n});\r\n"]}
\ No newline at end of file
+{"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
diff --git a/tests/mocha/System/Collections/Arrays/Utility.js b/tests/mocha/System/Collections/Arrays/Utility.js
index ca6490a5..a68af3df 100644
--- a/tests/mocha/System/Collections/Arrays/Utility.js
+++ b/tests/mocha/System/Collections/Arrays/Utility.js
@@ -112,5 +112,4 @@
});
}
});
-
-//# sourceMappingURL=Utility.js.map
+//# sourceMappingURL=Utility.js.map
\ No newline at end of file
diff --git a/tests/mocha/System/Collections/Arrays/Utility.js.map b/tests/mocha/System/Collections/Arrays/Utility.js.map
index e647bf7e..8e7641e1 100644
--- a/tests/mocha/System/Collections/Arrays/Utility.js.map
+++ b/tests/mocha/System/Collections/Arrays/Utility.js.map
@@ -1 +1 @@
-{"version":3,"sources":["System/Collections/Arrays/Utility.ts"],"names":[],"mappings":"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","file":"System/Collections/Arrays/Utility.js","sourcesContent":["///\r\n\r\nimport * as Arrays from \"../../../../../source/System/Collections/Array/Compare\";\r\nimport * as ArrayUtility from \"../../../../../source/System/Collections/Array/Utility\";\r\nimport Stopwatch from \"../../../../../source/System/Diagnostics/Stopwatch\";\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n\r\n\r\n// Min/Max tests...\r\nconst minA = -10, maxA = 2000;\r\n\r\nfunction initTestArray()\r\n{\r\n\treturn [5, minA, -1, maxA, -2, NaN, 20]\r\n}\r\n\r\ndescribe(\".initialize(length)\", ()=>\r\n{\r\n\tfunction testLength(len:number):void\r\n\t{\r\n\t\tit(\"should be length \" + len, ()=>\r\n\t\t{\r\n\t\t\tlen = 100;\r\n\t\t\tvar a = ArrayUtility.initialize(len);\r\n\t\t\tassert.equal(a.length, len, \".length should be \" + len);\r\n\t\t});\r\n\t}\r\n\r\n\ttestLength(100);\r\n\ttestLength(100000);\r\n});\r\n\r\n\r\ndescribe(\".copy(source) & .equals(old,new)\", ()=>\r\n{\r\n\tit(\"should equal\", ()=>\r\n\t{\r\n\t\tvar s1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3];\r\n\t\tvar s2 = ArrayUtility.copy(s1);\r\n\t\tassert.ok(Arrays.areEqual(s1, s2));\r\n\t});\r\n\r\n});\r\n\r\ndescribe(\".contains(source,value)\", ()=>\r\n{\r\n\tvar a = initTestArray();\r\n\tit(\"should return true for a value contained\", ()=>\r\n\t{\r\n\t\tassert.ok(ArrayUtility.contains(a, -1));\r\n\t});\r\n\tit(\"should return false for a value that is not present\", ()=>\r\n\t{\r\n\t\tassert.ok(!ArrayUtility.contains(a, -9876));\r\n\t});\r\n});\r\n\r\ndescribe(\".findIndex(source,of)\", ()=>\r\n{\r\n\tvar a = initTestArray();\r\n\tit(\"should find and return the correct index\", ()=>\r\n\t{\r\n\t\tassert.equal(ArrayUtility.findIndex(a, (v:number)=>v== -1), 2);\r\n\t});\r\n\tit(\"should return -1 when the value is not present\", ()=>\r\n\t{\r\n\t\tassert.equal(ArrayUtility.findIndex(a, (v:number)=> v== -9876), -1);\r\n\t});\r\n});\r\n\r\ndescribe(\".register(target,value)\", ()=>\r\n{\r\n\tit(\"should add a value that isn't present\", ()=>\r\n\t{\r\n\t\tvar a = initTestArray();\r\n\t\tvar len = a.length;\r\n\t\tassert.ok(ArrayUtility.register(a, -9876));\r\n\t\tassert.equal(a.length, len + 1);\r\n\t});\r\n\r\n\tit(\"should not add a value that is present\", ()=>\r\n\t{\r\n\t\tvar a = initTestArray();\r\n\t\tvar len = a.length;\r\n\t\tassert.ok(!ArrayUtility.register(a, -1));\r\n\t\tassert.equal(a.length, len);\r\n\t});\r\n});\r\n\r\n\r\ndescribe(\".remove(target,value)\", ()=>\r\n{\r\n\tit(\"should remove the item/value request and return the number of instances removed\", ()=>\r\n\t{\r\n\t\tvar s = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3];\r\n\t\tvar len = s.length;\r\n\r\n\t\tassert.equal(ArrayUtility.remove(s, 9), 1, \"Only 9 removed once\");\r\n\t\tassert.equal(s.length, len - 1, \".length should be less by one\");\r\n\t\tassert.equal(s[1], 8, \"Index [1] is now 8\");\r\n\t\tlen = s.length;\r\n\r\n\t\tassert.equal(ArrayUtility.remove(s, 2), 2, \"2 removed twice\");\r\n\t\tassert.equal(s.length, len - 2, \".length should be less by two\");\r\n\t\tassert.equal(s[7], 1, \"Index [7] is now 1\");\r\n\t\tassert.equal(s[10], 3, \"Index [10] is now 3\");\r\n\t\tlen = s.length;\r\n\r\n\t\tassert.equal(ArrayUtility.remove(s, 15), 0, \"15 does not exist\");\r\n\t\tassert.equal(s.length, len, \".length should be the same\");\r\n\t\tlen = s.length;\r\n\r\n\t\tassert.ok(ArrayUtility.removeIndex(s, 5), \"Index [5] removed\");\r\n\t\tassert.equal(s.length, len - 1, \".length should be less by one\");\r\n\t\tlen = s.length;\r\n\r\n\t\tassert.ok(!ArrayUtility.removeIndex(s, 15), \"Index [15] doesn't exist\");\r\n\t\tassert.equal(s.length, len, \".length should be the same\");\r\n\t});\r\n\r\n});\r\n\r\n/*\tUtility.applyTo skipped.\r\n It has too many permutations while being a straight forward function. */\r\n\r\n\r\ndescribe(\".repeat(value,count)\", ()=>\r\n{\r\n\tit(\"should correctly repeat the value requested\", ()=>\r\n\t{\r\n\t\tvar value = 10, count = 3;\r\n\t\tvar r = ArrayUtility.repeat(value, count);\r\n\t\tassert.ok(r.length==count, \".length should be 3\");\r\n\t\tfor(let i = 0; ivoid):number {\r\n\tconst repeat = 50;\r\n\tvar ms = 0;\r\n\r\n\tfor(let i=0;ivoid):void {\r\n\tit(measureRepeated(closure)+\" milliseconds: \"+suffix, ()=>{\r\n\t\tassert.ok(true);\r\n\t});\r\n}\r\n\r\n/*\r\n * The below code proves (for Node.js and Mocha) that best practice with arrays is:\r\n * 1) Initialize them. Set their capacity when constructed or set the length before iterating.\r\n * 2) Standard for loops are typically compiler optimized well and i++ may be compiler optimized as well (better than ++i).\r\n */\r\n//\r\n// describe(\"Array Performance\", ()=>\r\n// {\r\n// \tconst max = 1000000;\r\n// \toutputMeasured(\"Array.push(i)\", ()=>\r\n// \t{\r\n// \t\tlet a:number[] = [];\r\n// \t\tfor(let i = 0; i\r\n// \t{\r\n// \t\tlet a:number[] = [];\r\n// \t\tfor(let i = 0; i\r\n// \t{\r\n// \t\tlet a:number[] = [];\r\n// \t\ta.length = max;\r\n// \t\ta.forEach((v,i)=>{\r\n// \t\t\ta[i] = v;\r\n// \t\t});\r\n// \t\t// To ensure compiler doesn't dismiss the array, must consume the array at least once.\r\n// \t\treturn a[max-1];\r\n// \t});*/\r\n//\r\n// \toutputMeasured(\"Array[i] = i (preset capacity i++)\", ()=>\r\n// \t{\r\n// \t\tlet a:number[] = new Array(max);\r\n// \t\tfor(let i = 0; i\r\n// \t{\r\n// \t\tlet a:number[] = [];\r\n// \t\ta.length = max;\r\n// \t\tfor(let i = 0; i\r\n// \t{\r\n// \t\tlet a:number[] = [];\r\n// \t\tfor(let i=max-1;i>=0; i--) {\r\n// \t\t\ta[i] = i;\r\n// \t\t}\r\n// \t\t// To ensure compiler doesn't dismiss the array, must consume the array at least once.\r\n// \t\treturn a[max-1];\r\n// \t});\r\n//\r\n// \toutputMeasured(\"Array[i] = i (for reverse)\", ()=>\r\n// \t{\r\n// \t\tlet a:number[] = new Array(max);\r\n// \t\tfor(let i=max-1;i>=0; i--) {\r\n// \t\t\ta[i] = i;\r\n// \t\t}\r\n// \t\t// To ensure compiler doesn't dismiss the array, must consume the array at least once.\r\n// \t\treturn a[max-1];\r\n// \t});\r\n//\r\n// \toutputMeasured(\"Array[m] = m (while reverse)\", ()=>\r\n// \t{\r\n// \t\tlet a:number[] = new Array(max);\r\n// \t\tlet m = max;\r\n// \t\twhile(m--) {\r\n// \t\t\ta[m] = m;\r\n// \t\t}\r\n// \t\t// To ensure compiler doesn't dismiss the array, must consume the array at least once.\r\n// \t\treturn a[max-1];\r\n// \t});\r\n//\r\n// \toutputMeasured(\"LinkedList.add(i)\", ()=>\r\n// \t{\r\n// \t\tlet a = new LinkedList();\r\n// \t\tfor(let i = 0; i\r\n// \t{\r\n// \t\tlet root:LinkedNextNode = { value: -1, next:null };\r\n// \t\tlet next = root;\r\n// \t\tfor(let i = 0; i\r\n\r\nimport {TypeInfo} from '../../../../../source/System/Types';\r\nimport Queue from '../../../../../source/System/Collections/Queue';\r\nimport * as Enumerator from '../../../../../source/System/Collections/Enumeration/Enumerator';\r\nvar assert = require('../../../../../node_modules/assert/assert');\r\n\r\nit(\".from(IEnumerable)\",()=>{\r\n\tvar a = [0,1,2,3,4];\r\n\tvar len = a.length, count = 0;\r\n\tvar q = new Queue(a);\r\n\tvar type = new TypeInfo(q);\r\n\ttype.member(\"getEnumerator\");\r\n\tvar test = Enumerator.from(q);\r\n\twhile(test.moveNext()) {\r\n\t\tcount++;\r\n\t}\r\n\tassert.equal(count,len);\r\n});\r\n\r\nit(\".from(Array)\",()=>{\r\n\tvar a = [0,1,2,3,4];\r\n\tvar type = new TypeInfo(a);\r\n\ttype.member(\"length\");\r\n\tvar len = a.length, count = 0;\r\n\tvar test = Enumerator.from({getEnumerator:()=>Enumerator.from(a)});\r\n\twhile(test.moveNext()) {\r\n\t\tcount++;\r\n\t}\r\n\tassert.equal(count,len);\r\n});\r\n\r\nit(\".from(IArray)\",()=>{\r\n\tvar a:IArray = {0:0,1:1,2:2,3:3,4:4,length:5};\r\n\tvar type = new TypeInfo(a);\r\n\ttype.member(\"length\");\r\n\tvar len = a.length, count = 0;\r\n\tvar test = Enumerator.from(a);\r\n\twhile(test.moveNext()) {\r\n\t\tcount++;\r\n\t}\r\n\tassert.equal(count,len);\r\n});\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"Enumerator.js","sourceRoot":"","sources":["Enumerator.ts"],"names":[],"mappings":";;;;;;;;;IAEA,sBAAuB,oCAAoC,CAAC,CAAA;IAC5D,sBAAkB,gDAAgD,CAAC,CAAA;IACnE,IAAY,UAAU,WAAM,iEAAiE,CAAC,CAAA;IAC9F,IAAI,MAAM,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAElE,EAAE,CAAC,oBAAoB,EAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,IAAI,eAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,GAAG,IAAI,gBAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7B,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAC;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,GAAG,IAAI,gBAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,cAAI,OAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAlB,CAAkB,EAAC,CAAC,CAAC;QACnE,OAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAC;QAClB,IAAI,CAAC,GAAkB,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,CAAC;QACtD,IAAI,IAAI,GAAG,IAAI,gBAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/tests/mocha/System/Collections/ICollection.js b/tests/mocha/System/Collections/ICollection.js
index 395ec89c..fb57bb2a 100644
--- a/tests/mocha/System/Collections/ICollection.js
+++ b/tests/mocha/System/Collections/ICollection.js
@@ -140,5 +140,4 @@
}
exports.InstanceCollection = InstanceCollection;
});
-
-//# sourceMappingURL=ICollection.js.map
+//# sourceMappingURL=ICollection.js.map
\ No newline at end of file
diff --git a/tests/mocha/System/Collections/ICollection.js.map b/tests/mocha/System/Collections/ICollection.js.map
index f1d7a5ee..a8d743f1 100644
--- a/tests/mocha/System/Collections/ICollection.js.map
+++ b/tests/mocha/System/Collections/ICollection.js.map
@@ -1 +1 @@
-{"version":3,"sources":["System/Collections/ICollection.ts"],"names":[],"mappings":"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","file":"System/Collections/ICollection.js","sourcesContent":["///\r\n///\r\n\r\nimport * as AU from \"../../../../source/System/Collections/Array/Utility\";\r\nimport NotImplementedException from \"../../../../source/System/Exceptions/NotImplementedException\";\r\nvar assert = require('../../../../node_modules/assert/assert');\r\n\r\n/*\r\n * This is a reusable set of unit test for use with any ICollection to ensure all features of that ICollection function properly.\r\n */\r\n\r\nexport function General(\r\n\tcollection:ICollection):void\r\n{\r\n\tvar count = collection.count;\r\n\r\n\tdescribe(\".count\", ()=>\r\n\t{\r\n\t\tassertIsNumber(count);\r\n\t});\r\n}\r\n\r\nfunction assertIsNumber(value:any, message:string = \"should be a real number\")\r\n{\r\n\tassert.ok(!isNaN(value), message);\r\n}\r\n\r\nfunction assertAdding(c:ICollection, a:T[])\r\n{\r\n\tit(\".add(value)\", ()=>\r\n\t{\r\n\t\tvar count:number;\r\n\t\tfor(let v of a)\r\n\t\t{\r\n\t\t\tassertIsNumber(count = c.count, \"before adding\");\r\n\t\t\tc.add(v);\r\n\t\t\tassertIsNumber(c.count, \"after adding\");\r\n\t\t\tassert.equal(c.count, count + 1, \"count should have incremented\");\r\n\t\t\tassert.ok(c.contains(v), \"'value' must exist after adding\");\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction assertCopyToClear(c:ICollection)\r\n{\r\n\tit(\".copyTo(other) & .clear()\", ()=>\r\n\t{\r\n\t\tvar count:number = c.count;\r\n\t\tassertIsNumber(count);\r\n\t\tif(count<2) throw \"Can't assert '.copyTo()' or '.clear()' without at least (2) entries.\";\r\n\r\n\t\tvar a:T[] = [];\r\n\r\n\t\tc.copyTo(a);\r\n\t\tassertIsNumber(c.count, 'count');\r\n\t\tassert.equal(a.length, count, \"An empty array's length should match the count if copied to.\");\r\n\t\tc.clear();\r\n\t\tassert.equal(c.count, 0, \"A collection's count should be zero after calling '.clear()'.\");\r\n\r\n\t\t// Restore contents.\r\n\t\tfor(let v of a) c.add(v);\r\n\r\n\t\tvar extraSize = 10;\r\n\t\tvar b = AU.initialize(count + extraSize);\r\n\r\n\t\tc.copyTo(b, 1);\r\n\t\tassert.equal(b.length, count + extraSize, \"An array's length should be equal to it's original length if the count added does not exceed the length.\");\r\n\t\tc.copyTo(b, count + extraSize - 1);\r\n\t\tassert.equal(b.length, 2*count + extraSize - 1, \"An array's length should be equal to index+count if the count exceeds the length.\");\r\n\t\tc.clear();\r\n\t\tassert.equal(c.count, 0, \"A collection's count should be zero after calling '.clear()'.\");\r\n\r\n\t\t// Restore contents.\r\n\t\tfor(let v of a) c.add(v);\r\n\t\tassert.equal(c.count, a.length, \"A collection's count should be equal to the number of items added.\");\r\n\t});\r\n\r\n}\r\n\r\nfunction assertRemoving(c:ICollection)\r\n{\r\n\tit(\".remove(values)\", ()=>\r\n\t{\r\n\r\n\t\tvar count:number;\r\n\t\tassertIsNumber(count = c.count);\r\n\t\tif(c.count<2) throw \"Can't assert '.remove()' without at least (2) entries.\";\r\n\r\n\t\tvar a:T[] = [];\r\n\t\tc.copyTo(a);\r\n\t\tassertIsNumber(c.count);\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tfor(let v of a)\r\n\t\t\t{\r\n\t\t\t\tcount -= c.remove(v); // More than one instance can exist and it should remove both.\r\n\t\t\t\tassertIsNumber(c.count, \"after removing\");\r\n\t\t\t\tassert.equal(c.count, count, \"'count' should increment after removing.\");\r\n\t\t\t\tassert.ok(!c.contains(v), \"'value' must not exist after removing.\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\tif((ex)instanceof(NotImplementedException))\r\n\t\t\t{\r\n\t\t\t\t//console.log(ex);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthrow ex;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n}\r\n\r\nexport function Collection(\r\n\tname:string,\r\n\tcollection:ICollection,\r\n\tsourceValues:T[]):void\r\n{\r\n\tif(sourceValues.indexOf(null)!= -1)\r\n\t\tthrow \"Source values should not contain null as checking against null is one of the tests.\";\r\n\r\n\t/* The following tests inherently test:\r\n\t - count\r\n\t - contains\r\n\t */\r\n\tdescribe(name, ()=>\r\n\t{\r\n\t\tassertAdding(collection, sourceValues);\r\n\t\tassertCopyToClear(collection);\r\n\t\tassertRemoving(collection);\r\n\t\tit(\"equality comparison should be strict\", ()=>\r\n\t\t{\r\n\t\t\tassert.ok(!collection.contains(null));\r\n\t\t})\r\n\r\n\t});\r\n\r\n}\r\n\r\nexport function StringCollection(\r\n\tname:string,\r\n\tcollection:ICollection):void\r\n{\r\n\r\n\t//noinspection SpellCheckingInspection\r\n\tCollection(name + '<' + 'string>', collection, [\r\n\t\t\"\",\r\n\t\t\"lorem\",\r\n\t\t\"ipsum\",\r\n\t\t\"dolem\",\r\n\t\t\"ipsum\" // Have a repeated entry to test removing multiple.\r\n\t])\r\n\r\n\r\n}\r\n\r\nexport function NumberCollection(\r\n\tname:string,\r\n\tcollection:ICollection):void\r\n{\r\n\t//noinspection SpellCheckingInspection\r\n\tCollection(name + '<' + 'number>', collection, [\r\n\t\t0,\r\n\t\t1,\r\n\t\t1, // Have a repeated entry to test removing multiple.\r\n\t\t2,\r\n\t\t3,\r\n\t\t5,\r\n\t\t8,\r\n\t\tNaN // Must be able to reconginze NaN\r\n\t]);\r\n\r\n\r\n}\r\n\r\nexport function InstanceCollection(\r\n\tname:string,\r\n\tcollection:ICollection