/* * (c) Copyright Ascensio System SIA 2010-2024 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ QUnit.config.autostart = false; $(function () { Asc.spreadsheet_api.prototype._init = function () { this._loadModules(); }; Asc.spreadsheet_api.prototype._loadFonts = function (fonts, callback) { callback(); }; Asc.spreadsheet_api.prototype.onEndLoadFile = function (fonts, callback) { openDocument(); }; AscCommonExcel.WorkbookView.prototype._calcMaxDigitWidth = function () { }; AscCommonExcel.WorkbookView.prototype._canResize = function () { }; AscCommonExcel.WorkbookView.prototype._onWSSelectionChanged = function () { }; AscCommonExcel.WorkbookView.prototype.showWorksheet = function () { }; AscCommonExcel.WorksheetView.prototype._init = function () { }; AscCommonExcel.WorksheetView.prototype.updateRanges = function () { }; AscCommonExcel.WorksheetView.prototype._autoFitColumnsWidth = function () { }; AscCommonExcel.WorksheetView.prototype.setSelection = function () { }; AscCommonExcel.WorksheetView.prototype.draw = function () { }; AscCommonExcel.WorksheetView.prototype._prepareDrawingObjects = function () { }; AscCommonExcel.WorksheetView.prototype.getZoom = function () { }; AscCommonExcel.WorksheetView.prototype._getPPIY = function () { }; AscCommonExcel.WorksheetView.prototype._getPPIX = function () { }; AscCommonExcel.asc_CEventsController.prototype.init = function () { }; AscCommon.InitBrowserInputContext = function () { }; AscCommon.baseEditorsApi.prototype._onEndLoadSdk = function () { this.ImageLoader = AscCommon.g_image_loader; }; var api = new Asc.spreadsheet_api({ 'id-view': 'editor_sdk' }); api.FontLoader = { LoadDocumentFonts: function () { setTimeout(startTests, 0) } }; window["Asc"]["editor"] = api; var wb, ws, wsData, wsView; function openDocument() { AscCommon.g_oTableId.init(); api._onEndLoadSdk(); AscFormat.initStyleManager(); api.isOpenOOXInBrowser = false; api.OpenDocumentFromBin(null, AscCommon.getEmpty()); api.initCollaborativeEditing({}); api.wb = new AscCommonExcel.WorkbookView(api.wbModel, api.controller, api.handlers, api.HtmlElement, api.topLineEditorElement, api, api.collaborativeEditing, api.fontRenderingMode); api.wb._init(); wb = api.wbModel; wb.handlers.add("getSelectionState", function () { return null; }); ws = api.wbModel.aWorksheets[0]; api.asc_insertWorksheet(["Data"]); wsData = wb.getWorksheetByName(["Data"], 0); wsView = api.wb.getWorksheet(0); wsView.handlers = api.handlers; wsView.objectRender = new AscFormat.DrawingObjects(); wsView.objectRender.init(wsView); //wsView.objectRender.controller = new AscFormat.DrawingObjectsController(wsView.objectRender); } function fillData(ws, data, range) { range = ws.getRange4(range.r1, range.c1); range.fillData(data); } var gTypes = ["bar", "barStacked", "barStackedPercent", "barStacked3D", "barStackedPercent3D", "barStackedPercent3DPerspective", "horizontalBar", "horizontalBarStacked", "horizontalBarStackedPercent", "horizontalBar3D", "horizontalBarStacked3D", "horizontalBarStackedPercent3D", "lineNormal", "lineStacked", "lineStackedPercent", "line3D", "pie", "pie3D", "doughnut", "scatter", "stock", "area", "areaStacked", "areaStackedPercent"]; var gMapPaths = { "bar": "15,0,3.1750000000000003,66.29583333333333,1,96.29583333333335,66.29583333333333,1,96.29583333333335,3.1749999999999985,1,3.1750000000000003,3.1749999999999985,1,3.1750000000000003,66.29583333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,3.439583333333333,66.56041666666668,1,96.5604166666667,66.56041666666668,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,180,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,58.14430555555557,1,96.5604166666667,58.14430555555557,0,3.439583333333333,60.24833333333335,1,96.5604166666667,60.24833333333335,0,3.439583333333333,62.352361111111115,1,96.5604166666667,62.352361111111115,0,3.439583333333333,64.4563888888889,1,96.5604166666667,64.4563888888889,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,47.624166666666675,1,96.5604166666667,47.624166666666675,0,3.439583333333333,49.72819444444446,1,96.5604166666667,49.72819444444446,0,3.439583333333333,51.83222222222223,1,96.5604166666667,51.83222222222223,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,37.10402777777778,1,96.5604166666667,37.10402777777778,0,3.439583333333333,39.20805555555556,1,96.5604166666667,39.20805555555556,0,3.439583333333333,41.312083333333334,1,96.5604166666667,41.312083333333334,0,3.439583333333333,43.41611111111111,1,96.5604166666667,43.41611111111111,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,26.583888888888893,1,96.5604166666667,26.583888888888893,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,30.79194444444445,1,96.5604166666667,30.79194444444445,0,3.439583333333333,32.89597222222223,1,96.5604166666667,32.89597222222223,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,16.063750000000002,1,96.5604166666667,16.063750000000002,0,3.439583333333333,18.16777777777778,1,96.5604166666667,18.16777777777778,0,3.439583333333333,20.271805555555563,1,96.5604166666667,20.271805555555563,0,3.439583333333333,22.375833333333336,1,96.5604166666667,22.375833333333336,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,0,3.439583333333333,5.543611111111109,1,96.5604166666667,5.543611111111109,0,3.439583333333333,7.647638888888886,1,96.5604166666667,7.647638888888886,0,3.439583333333333,9.751666666666665,1,96.5604166666667,9.751666666666665,0,3.439583333333333,11.855694444444444,1,96.5604166666667,11.855694444444444,15,0,10.091071428571432,66.56041666666668,1,10.091071428571432,24.479861111111116,1,18.95972222222223,24.479861111111116,1,18.95972222222223,66.56041666666668,1,10.091071428571432,66.56041666666668,15,0,41.131349206349206,66.56041666666668,1,41.131349206349206,16.06375,1,50,16.06375,1,50,66.56041666666668,1,41.131349206349206,66.56041666666668,15,0,72.171626984127,66.56041666666668,1,72.171626984127,7.647638888888893,1,81.0402777777778,7.647638888888893,1,81.0402777777778,66.56041666666668,1,72.171626984127,66.56041666666668,15,0,18.95972222222223,66.56041666666668,1,18.95972222222223,13.959722222222226,1,27.82837301587303,13.959722222222226,1,27.82837301587303,66.56041666666668,1,18.95972222222223,66.56041666666668,15,0,50,66.56041666666668,1,50,11.85569444444444,1,58.86865079365081,11.85569444444444,1,58.86865079365081,66.56041666666668,1,50,66.56041666666668,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "barStacked": "15,0,3.1750000000000003,66.29583333333333,1,96.29583333333335,66.29583333333333,1,96.29583333333335,3.1749999999999985,1,3.1750000000000003,3.1749999999999985,1,3.1750000000000003,66.29583333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,3.439583333333333,66.56041666666668,1,96.5604166666667,66.56041666666668,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,180,0,3.439583333333333,56.04027777777778,1,96.5604166666667,56.04027777777778,0,3.439583333333333,58.14430555555557,1,96.5604166666667,58.14430555555557,0,3.439583333333333,60.24833333333335,1,96.5604166666667,60.24833333333335,0,3.439583333333333,62.352361111111115,1,96.5604166666667,62.352361111111115,0,3.439583333333333,64.4563888888889,1,96.5604166666667,64.4563888888889,0,3.439583333333333,45.520138888888894,1,96.5604166666667,45.520138888888894,0,3.439583333333333,47.624166666666675,1,96.5604166666667,47.624166666666675,0,3.439583333333333,49.72819444444446,1,96.5604166666667,49.72819444444446,0,3.439583333333333,51.83222222222223,1,96.5604166666667,51.83222222222223,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,37.10402777777778,1,96.5604166666667,37.10402777777778,0,3.439583333333333,39.20805555555556,1,96.5604166666667,39.20805555555556,0,3.439583333333333,41.312083333333334,1,96.5604166666667,41.312083333333334,0,3.439583333333333,43.41611111111111,1,96.5604166666667,43.41611111111111,0,3.439583333333333,24.479861111111116,1,96.5604166666667,24.479861111111116,0,3.439583333333333,26.583888888888893,1,96.5604166666667,26.583888888888893,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,30.79194444444445,1,96.5604166666667,30.79194444444445,0,3.439583333333333,32.89597222222223,1,96.5604166666667,32.89597222222223,0,3.439583333333333,13.959722222222226,1,96.5604166666667,13.959722222222226,0,3.439583333333333,16.063750000000002,1,96.5604166666667,16.063750000000002,0,3.439583333333333,18.16777777777778,1,96.5604166666667,18.16777777777778,0,3.439583333333333,20.271805555555563,1,96.5604166666667,20.271805555555563,0,3.439583333333333,22.375833333333336,1,96.5604166666667,22.375833333333336,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,0,3.439583333333333,5.543611111111109,1,96.5604166666667,5.543611111111109,0,3.439583333333333,7.647638888888886,1,96.5604166666667,7.647638888888886,0,3.439583333333333,9.751666666666665,1,96.5604166666667,9.751666666666665,0,3.439583333333333,11.855694444444444,1,96.5604166666667,11.855694444444444,15,0,12.751666666666669,66.56041666666668,1,12.751666666666669,45.520138888888894,1,25.167777777777783,45.520138888888894,1,25.167777777777783,66.56041666666668,1,12.751666666666669,66.56041666666668,15,0,43.79194444444445,66.56041666666668,1,43.79194444444445,41.31208333333334,1,56.20805555555556,41.31208333333334,1,56.20805555555556,66.56041666666668,1,43.79194444444445,66.56041666666668,15,0,74.83222222222224,66.56041666666668,1,74.83222222222224,37.10402777777777,1,87.24833333333336,37.10402777777777,1,87.24833333333336,66.56041666666668,1,74.83222222222224,66.56041666666668,15,0,12.751666666666669,45.520138888888894,1,12.751666666666669,19.21979166666667,1,25.167777777777783,19.21979166666667,1,25.167777777777783,45.520138888888894,1,12.751666666666669,45.520138888888894,15,0,43.79194444444445,41.31208333333334,1,43.79194444444445,13.959722222222222,1,56.20805555555556,13.959722222222222,1,56.20805555555556,41.31208333333334,1,43.79194444444445,41.31208333333334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "barStackedPercent": "15,0,3.1750000000000003,66.29583333333333,1,96.29583333333335,66.29583333333333,1,96.29583333333335,3.1749999999999985,1,3.1750000000000003,3.1749999999999985,1,3.1750000000000003,66.29583333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,66,0,3.439583333333333,66.56041666666668,1,96.5604166666667,66.56041666666668,0,3.439583333333333,60.24833333333334,1,96.5604166666667,60.24833333333334,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,47.62416666666667,1,96.5604166666667,47.62416666666667,0,3.439583333333333,41.31208333333334,1,96.5604166666667,41.31208333333334,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,22.375833333333333,1,96.5604166666667,22.375833333333333,0,3.439583333333333,16.06375,1,96.5604166666667,16.06375,0,3.439583333333333,9.751666666666667,1,96.5604166666667,9.751666666666667,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,300,0,3.439583333333333,60.24833333333334,1,96.5604166666667,60.24833333333334,0,3.439583333333333,61.51075,1,96.5604166666667,61.51075,0,3.439583333333333,62.77316666666667,1,96.5604166666667,62.77316666666667,0,3.439583333333333,64.03558333333334,1,96.5604166666667,64.03558333333334,0,3.439583333333333,65.298,1,96.5604166666667,65.298,0,3.439583333333333,53.93625,1,96.5604166666667,53.93625,0,3.439583333333333,55.198666666666675,1,96.5604166666667,55.198666666666675,0,3.439583333333333,56.46108333333334,1,96.5604166666667,56.46108333333334,0,3.439583333333333,57.7235,1,96.5604166666667,57.7235,0,3.439583333333333,58.985916666666675,1,96.5604166666667,58.985916666666675,0,3.439583333333333,47.62416666666667,1,96.5604166666667,47.62416666666667,0,3.439583333333333,48.88658333333334,1,96.5604166666667,48.88658333333334,0,3.439583333333333,50.148999999999994,1,96.5604166666667,50.148999999999994,0,3.439583333333333,51.41141666666667,1,96.5604166666667,51.41141666666667,0,3.439583333333333,52.67383333333334,1,96.5604166666667,52.67383333333334,0,3.439583333333333,41.31208333333334,1,96.5604166666667,41.31208333333334,0,3.439583333333333,42.57450000000001,1,96.5604166666667,42.57450000000001,0,3.439583333333333,43.83691666666667,1,96.5604166666667,43.83691666666667,0,3.439583333333333,45.09933333333334,1,96.5604166666667,45.09933333333334,0,3.439583333333333,46.36175000000001,1,96.5604166666667,46.36175000000001,0,3.439583333333333,35,1,96.5604166666667,35,0,3.439583333333333,36.26241666666667,1,96.5604166666667,36.26241666666667,0,3.439583333333333,37.52483333333333,1,96.5604166666667,37.52483333333333,0,3.439583333333333,38.78725,1,96.5604166666667,38.78725,0,3.439583333333333,40.04966666666667,1,96.5604166666667,40.04966666666667,0,3.439583333333333,28.68791666666667,1,96.5604166666667,28.68791666666667,0,3.439583333333333,29.95033333333333,1,96.5604166666667,29.95033333333333,0,3.439583333333333,31.212750000000003,1,96.5604166666667,31.212750000000003,0,3.439583333333333,32.47516666666667,1,96.5604166666667,32.47516666666667,0,3.439583333333333,33.737583333333326,1,96.5604166666667,33.737583333333326,0,3.439583333333333,22.375833333333333,1,96.5604166666667,22.375833333333333,0,3.439583333333333,23.63825,1,96.5604166666667,23.63825,0,3.439583333333333,24.90066666666667,1,96.5604166666667,24.90066666666667,0,3.439583333333333,26.16308333333333,1,96.5604166666667,26.16308333333333,0,3.439583333333333,27.425500000000003,1,96.5604166666667,27.425500000000003,0,3.439583333333333,16.06375,1,96.5604166666667,16.06375,0,3.439583333333333,17.326166666666666,1,96.5604166666667,17.326166666666666,0,3.439583333333333,18.588583333333332,1,96.5604166666667,18.588583333333332,0,3.439583333333333,19.851000000000003,1,96.5604166666667,19.851000000000003,0,3.439583333333333,21.113416666666666,1,96.5604166666667,21.113416666666666,0,3.439583333333333,9.751666666666667,1,96.5604166666667,9.751666666666667,0,3.439583333333333,11.014083333333332,1,96.5604166666667,11.014083333333332,0,3.439583333333333,12.276499999999997,1,96.5604166666667,12.276499999999997,0,3.439583333333333,13.538916666666667,1,96.5604166666667,13.538916666666667,0,3.439583333333333,14.801333333333332,1,96.5604166666667,14.801333333333332,0,3.439583333333333,3.439583333333332,1,96.5604166666667,3.439583333333332,0,3.439583333333333,4.701999999999999,1,96.5604166666667,4.701999999999999,0,3.439583333333333,5.964416666666666,1,96.5604166666667,5.964416666666666,0,3.439583333333333,7.226833333333332,1,96.5604166666667,7.226833333333332,0,3.439583333333333,8.489249999999998,1,96.5604166666667,8.489249999999998,15,0,12.751666666666669,66.56041666666668,1,12.751666666666669,38.506712962962965,1,25.167777777777783,38.506712962962965,1,25.167777777777783,66.56041666666668,1,12.751666666666669,66.56041666666668,15,0,43.79194444444445,66.56041666666668,1,43.79194444444445,36.26241666666667,1,56.20805555555556,36.26241666666667,1,56.20805555555556,66.56041666666668,1,43.79194444444445,66.56041666666668,15,0,74.83222222222224,66.56041666666668,1,74.83222222222224,3.439583333333332,1,87.24833333333336,3.439583333333332,1,87.24833333333336,66.56041666666668,1,74.83222222222224,66.56041666666668,15,0,12.751666666666669,38.50671296296297,1,12.751666666666669,3.439583333333339,1,25.167777777777783,3.439583333333339,1,25.167777777777783,38.50671296296297,1,12.751666666666669,38.50671296296297,15,0,43.79194444444445,36.26241666666667,1,43.79194444444445,3.439583333333332,1,56.20805555555556,3.439583333333332,1,56.20805555555556,36.26241666666667,1,43.79194444444445,36.26241666666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "barStackedPercent3D": "15,0,13.828511365401235,58.533493220018336,1,94.95101892367906,58.533493220018336,1,94.95101892367906,3.9988432008701813,1,13.828511365401235,3.9988432008701813,0,13.828511365401235,58.533493220018336,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,99,0,4.8144909438577885,65.76666666666667,1,14.0630014978644,58.7679833524815,1,95.18550905614221,58.7679833524815,0,4.8144909438577885,60.31320166475185,1,14.0630014978644,53.31451835056669,1,95.18550905614221,53.31451835056669,0,4.8144909438577885,54.85973666283704,1,14.0630014978644,47.86105334865187,1,95.18550905614221,47.86105334865187,0,4.8144909438577885,49.406271660922215,1,14.0630014978644,42.40758834673706,1,95.18550905614221,42.40758834673706,0,4.8144909438577885,43.95280665900739,1,14.0630014978644,36.954123344822236,1,95.18550905614221,36.954123344822236,0,4.8144909438577885,38.49934165709258,1,14.0630014978644,31.500658342907425,1,95.18550905614221,31.500658342907425,0,4.8144909438577885,33.045876655177764,1,14.0630014978644,26.047193340992607,1,95.18550905614221,26.047193340992607,0,4.8144909438577885,27.59241165326295,1,14.0630014978644,20.59372833907779,1,95.18550905614221,20.59372833907779,0,4.8144909438577885,22.138946651348128,1,14.0630014978644,15.140263337162965,1,95.18550905614221,15.140263337162965,0,4.8144909438577885,16.68548164943331,1,14.0630014978644,9.68679833524815,1,95.18550905614221,9.68679833524815,0,4.8144909438577885,11.232016647518504,1,14.0630014978644,4.233333333333337,1,95.18550905614221,4.233333333333337,459,0,4.8144909438577885,65.76666666666667,1,14.0630014978644,58.7679833524815,1,95.18550905614221,58.7679833524815,0,4.8144909438577885,60.31320166475185,1,14.0630014978644,53.31451835056669,1,95.18550905614221,53.31451835056669,0,4.8144909438577885,61.403894665134814,1,14.0630014978644,54.40521135094965,1,95.18550905614221,54.40521135094965,0,4.8144909438577885,62.49458766551778,1,14.0630014978644,55.49590435133262,1,95.18550905614221,55.49590435133262,0,4.8144909438577885,63.58528066590074,1,14.0630014978644,56.586597351715575,1,95.18550905614221,56.586597351715575,0,4.8144909438577885,64.67597366628371,1,14.0630014978644,57.677290352098545,1,95.18550905614221,57.677290352098545,0,4.8144909438577885,54.85973666283704,1,14.0630014978644,47.86105334865187,1,95.18550905614221,47.86105334865187,0,4.8144909438577885,55.95042966322,1,14.0630014978644,48.95174634903484,1,95.18550905614221,48.95174634903484,0,4.8144909438577885,57.04112266360296,1,14.0630014978644,50.042439349417805,1,95.18550905614221,50.042439349417805,0,4.8144909438577885,58.131815663985925,1,14.0630014978644,51.13313234980076,1,95.18550905614221,51.13313234980076,0,4.8144909438577885,59.22250866436889,1,14.0630014978644,52.22382535018372,1,95.18550905614221,52.22382535018372,0,4.8144909438577885,49.406271660922215,1,14.0630014978644,42.40758834673706,1,95.18550905614221,42.40758834673706,0,4.8144909438577885,50.49696466130517,1,14.0630014978644,43.49828134712001,1,95.18550905614221,43.49828134712001,0,4.8144909438577885,51.587657661688134,1,14.0630014978644,44.588974347502976,1,95.18550905614221,44.588974347502976,0,4.8144909438577885,52.67835066207111,1,14.0630014978644,45.679667347885946,1,95.18550905614221,45.679667347885946,0,4.8144909438577885,53.76904366245407,1,14.0630014978644,46.77036034826891,1,95.18550905614221,46.77036034826891,0,4.8144909438577885,43.95280665900739,1,14.0630014978644,36.954123344822236,1,95.18550905614221,36.954123344822236,0,4.8144909438577885,45.04349965939037,1,14.0630014978644,38.04481634520521,1,95.18550905614221,38.04481634520521,0,4.8144909438577885,46.134192659773326,1,14.0630014978644,39.13550934558817,1,95.18550905614221,39.13550934558817,0,4.8144909438577885,47.22488566015629,1,14.0630014978644,40.22620234597113,1,95.18550905614221,40.22620234597113,0,4.8144909438577885,48.315578660539266,1,14.0630014978644,41.31689534635411,1,95.18550905614221,41.31689534635411,0,4.8144909438577885,38.49934165709258,1,14.0630014978644,31.500658342907425,1,95.18550905614221,31.500658342907425,0,4.8144909438577885,39.59003465747554,1,14.0630014978644,32.591351343290384,1,95.18550905614221,32.591351343290384,0,4.8144909438577885,40.680727657858505,1,14.0630014978644,33.68204434367335,1,95.18550905614221,33.68204434367335,0,4.8144909438577885,41.771420658241475,1,14.0630014978644,34.77273734405632,1,95.18550905614221,34.77273734405632,0,4.8144909438577885,42.86211365862444,1,14.0630014978644,35.86343034443928,1,95.18550905614221,35.86343034443928,0,4.8144909438577885,33.045876655177764,1,14.0630014978644,26.047193340992607,1,95.18550905614221,26.047193340992607,0,4.8144909438577885,34.13656965556073,1,14.0630014978644,27.137886341375562,1,95.18550905614221,27.137886341375562,0,4.8144909438577885,35.22726265594369,1,14.0630014978644,28.22857934175853,1,95.18550905614221,28.22857934175853,0,4.8144909438577885,36.31795565632665,1,14.0630014978644,29.319272342141492,1,95.18550905614221,29.319272342141492,0,4.8144909438577885,37.40864865670962,1,14.0630014978644,30.409965342524455,1,95.18550905614221,30.409965342524455,0,4.8144909438577885,27.59241165326295,1,14.0630014978644,20.59372833907779,1,95.18550905614221,20.59372833907779,0,4.8144909438577885,28.683104653645913,1,14.0630014978644,21.68442133946075,1,95.18550905614221,21.68442133946075,0,4.8144909438577885,29.77379765402888,1,14.0630014978644,22.775114339843718,1,95.18550905614221,22.775114339843718,0,4.8144909438577885,30.864490654411846,1,14.0630014978644,23.865807340226677,1,95.18550905614221,23.865807340226677,0,4.8144909438577885,31.95518365479481,1,14.0630014978644,24.956500340609644,1,95.18550905614221,24.956500340609644,0,4.8144909438577885,22.138946651348128,1,14.0630014978644,15.140263337162965,1,95.18550905614221,15.140263337162965,0,4.8144909438577885,23.22963965173109,1,14.0630014978644,16.23095633754593,1,95.18550905614221,16.23095633754593,0,4.8144909438577885,24.320332652114057,1,14.0630014978644,17.3216493379289,1,95.18550905614221,17.3216493379289,0,4.8144909438577885,25.411025652497027,1,14.0630014978644,18.412342338311863,1,95.18550905614221,18.412342338311863,0,4.8144909438577885,26.50171865287998,1,14.0630014978644,19.503035338694822,1,95.18550905614221,19.503035338694822,0,4.8144909438577885,16.68548164943331,1,14.0630014978644,9.68679833524815,1,95.18550905614221,9.68679833524815,0,4.8144909438577885,17.776174649816273,1,14.0630014978644,10.777491335631117,1,95.18550905614221,10.777491335631117,0,4.8144909438577885,18.86686765019924,1,14.0630014978644,11.868184336014075,1,95.18550905614221,11.868184336014075,0,4.8144909438577885,19.95756065058221,1,14.0630014978644,12.958877336397043,1,95.18550905614221,12.958877336397043,0,4.8144909438577885,21.048253650965165,1,14.0630014978644,14.049570336780008,1,95.18550905614221,14.049570336780008,0,4.8144909438577885,11.232016647518504,1,14.0630014978644,4.233333333333337,1,95.18550905614221,4.233333333333337,0,4.8144909438577885,12.322709647901462,1,14.0630014978644,5.324026333716303,1,95.18550905614221,5.324026333716303,0,4.8144909438577885,13.413402648284427,1,14.0630014978644,6.414719334099262,1,95.18550905614221,6.414719334099262,0,4.8144909438577885,14.504095648667391,1,14.0630014978644,7.5054123344822266,1,95.18550905614221,7.5054123344822266,0,4.8144909438577885,15.59478864905036,1,14.0630014978644,8.596105334865193,1,95.18550905614221,8.596105334865193,15,0,4.8144909438577885,65.76666666666667,1,14.0630014978644,58.7679833524815,1,95.18550905614221,58.7679833524815,1,85.9369985021356,65.76666666666667,1,4.8144909438577885,65.76666666666667,15,0,4.8144909438577885,65.76666666666667,1,4.8144909438577885,11.232016647518504,1,14.0630014978644,4.233333333333337,1,14.0630014978644,58.7679833524815,1,4.8144909438577885,65.76666666666667,15,0,14.0630014978644,58.7679833524815,1,14.0630014978644,4.233333333333337,1,95.18550905614221,4.233333333333337,1,95.18550905614221,58.7679833524815,1,14.0630014978644,58.7679833524815,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,26.51762920699126,39.429439441678596,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,19.400699087490192,60.86758834673705,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,19.400699087490192,60.86758834673705,1,15.701294865887546,63.667061672411116,15,0,26.51762920699126,63.667061672411116,1,26.51762920699126,39.429439441678596,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,19.400699087490192,60.86758834673705,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,19.400699087490192,60.86758834673705,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,26.51762920699126,39.429439441678596,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,19.400699087490192,60.86758834673705,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,1,15.701294865887546,63.667061672411116,15,0,15.701294865887546,63.667061672411116,1,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,19.400699087490192,60.86758834673705,1,15.701294865887546,63.667061672411116,15,0,26.51762920699126,63.667061672411116,1,26.51762920699126,39.429439441678596,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,26.51762920699126,63.667061672411116,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,19.400699087490192,60.86758834673705,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,30.2170334285939,60.86758834673705,1,19.400699087490192,60.86758834673705,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,53.558465059750525,37.490429663220006,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,46.441534940249454,60.86758834673705,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,46.441534940249454,60.86758834673705,1,42.74213071864682,63.667061672411116,15,0,53.558465059750525,63.667061672411116,1,53.558465059750525,37.490429663220006,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,46.441534940249454,60.86758834673705,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,46.441534940249454,60.86758834673705,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,53.558465059750525,37.490429663220006,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,46.441534940249454,60.86758834673705,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,1,42.74213071864682,63.667061672411116,15,0,42.74213071864682,63.667061672411116,1,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,46.441534940249454,60.86758834673705,1,42.74213071864682,63.667061672411116,15,0,53.558465059750525,63.667061672411116,1,53.558465059750525,37.490429663220006,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,53.558465059750525,63.667061672411116,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,46.441534940249454,60.86758834673705,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,57.257869281353166,60.86758834673705,1,46.441534940249454,60.86758834673705,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,80.59930091250982,9.132411653262949,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,73.48237079300874,60.86758834673705,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,73.48237079300874,60.86758834673705,1,69.7829665714061,63.667061672411116,15,0,80.59930091250982,63.667061672411116,1,80.59930091250982,9.132411653262949,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,15,0,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,80.59930091250982,9.132411653262949,1,69.7829665714061,9.132411653262949,15,0,73.48237079300874,60.86758834673705,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,73.48237079300874,60.86758834673705,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,80.59930091250982,9.132411653262949,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,73.48237079300874,60.86758834673705,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,1,69.7829665714061,63.667061672411116,15,0,69.7829665714061,63.667061672411116,1,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,73.48237079300874,60.86758834673705,1,69.7829665714061,63.667061672411116,15,0,80.59930091250982,63.667061672411116,1,80.59930091250982,9.132411653262949,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,80.59930091250982,63.667061672411116,15,0,69.7829665714061,9.132411653262949,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,80.59930091250982,9.132411653262949,1,69.7829665714061,9.132411653262949,15,0,73.48237079300874,60.86758834673705,1,73.48237079300874,6.3329383275888835,1,84.29870513411248,6.3329383275888835,1,84.29870513411248,60.86758834673705,1,73.48237079300874,60.86758834673705,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,26.51762920699126,9.132411653262949,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,19.400699087490192,36.62996611600453,1,15.701294865887546,39.429439441678596,15,0,26.51762920699126,39.429439441678596,1,26.51762920699126,9.132411653262949,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,15,0,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,26.51762920699126,9.132411653262949,1,15.701294865887546,9.132411653262949,15,0,19.400699087490192,36.62996611600453,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,19.400699087490192,36.62996611600453,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,26.51762920699126,9.132411653262949,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,19.400699087490192,36.62996611600453,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,1,15.701294865887546,39.429439441678596,15,0,15.701294865887546,39.429439441678596,1,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,19.400699087490192,36.62996611600453,1,15.701294865887546,39.429439441678596,15,0,26.51762920699126,39.429439441678596,1,26.51762920699126,9.132411653262949,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,26.51762920699126,39.429439441678596,15,0,15.701294865887546,9.132411653262949,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,26.51762920699126,9.132411653262949,1,15.701294865887546,9.132411653262949,15,0,19.400699087490192,36.62996611600453,1,19.400699087490192,6.3329383275888835,1,30.2170334285939,6.3329383275888835,1,30.2170334285939,36.62996611600453,1,19.400699087490192,36.62996611600453,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,53.558465059750525,9.132411653262949,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,46.441534940249454,34.69095633754594,1,42.74213071864682,37.490429663220006,15,0,53.558465059750525,37.490429663220006,1,53.558465059750525,9.132411653262949,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,15,0,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,53.558465059750525,9.132411653262949,1,42.74213071864682,9.132411653262949,15,0,46.441534940249454,34.69095633754594,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,46.441534940249454,34.69095633754594,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,53.558465059750525,9.132411653262949,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,46.441534940249454,34.69095633754594,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,1,42.74213071864682,37.490429663220006,15,0,42.74213071864682,37.490429663220006,1,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,46.441534940249454,34.69095633754594,1,42.74213071864682,37.490429663220006,15,0,53.558465059750525,37.490429663220006,1,53.558465059750525,9.132411653262949,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,53.558465059750525,37.490429663220006,15,0,42.74213071864682,9.132411653262949,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,53.558465059750525,9.132411653262949,1,42.74213071864682,9.132411653262949,15,0,46.441534940249454,34.69095633754594,1,46.441534940249454,6.3329383275888835,1,57.257869281353166,6.3329383275888835,1,57.257869281353166,34.69095633754594,1,46.441534940249454,34.69095633754594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "barStackedPercent3DPerspective": "15,0,21.013480335383846,45.12844427176431,1,95.55121028230624,45.12844427176431,1,95.55121028230624,11.723091156440482,1,21.013480335383846,11.723091156440482,0,21.013480335383846,45.12844427176431,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,63,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,279,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,53.679224171942735,1,21.22893671974426,40.818034779294734,1,95.76666666666668,40.818034779294734,0,4.233333333333333,54.79273594245353,1,21.22893671974426,41.93154654980553,1,95.76666666666668,41.93154654980553,0,4.233333333333333,55.90624771296434,1,21.22893671974426,43.045058320316315,1,95.76666666666668,43.045058320316315,0,4.233333333333333,57.01975948347513,1,21.22893671974426,44.15857009082711,1,95.76666666666668,44.15857009082711,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,48.11166531938878,1,21.22893671974426,35.25047592674076,1,95.76666666666668,35.25047592674076,0,4.233333333333333,49.22517708989957,1,21.22893671974426,36.36398769725155,1,95.76666666666668,36.36398769725155,0,4.233333333333333,50.33868886041036,1,21.22893671974426,37.47749946776236,1,95.76666666666668,37.47749946776236,0,4.233333333333333,51.452200630921155,1,21.22893671974426,38.59101123827314,1,95.76666666666668,38.59101123827314,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,42.544106466834805,1,21.22893671974426,29.68291707418679,1,95.76666666666668,29.68291707418679,0,4.233333333333333,43.6576182373456,1,21.22893671974426,30.796428844697584,1,95.76666666666668,30.796428844697584,0,4.233333333333333,44.771130007856385,1,21.22893671974426,31.909940615208377,1,95.76666666666668,31.909940615208377,0,4.233333333333333,45.884641778367175,1,21.22893671974426,33.02345238571917,1,95.76666666666668,33.02345238571917,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,36.97654761428084,1,21.22893671974426,24.11535822163282,1,95.76666666666668,24.11535822163282,0,4.233333333333333,38.09005938479163,1,21.22893671974426,25.22886999214362,1,95.76666666666668,25.22886999214362,0,4.233333333333333,39.203571155302434,1,21.22893671974426,26.34238176265441,1,95.76666666666668,26.34238176265441,0,4.233333333333333,40.31708292581322,1,21.22893671974426,27.455893533165206,1,95.76666666666668,27.455893533165206,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,31.408988761726867,1,21.22893671974426,18.54779936907886,1,95.76666666666668,18.54779936907886,0,4.233333333333333,32.522500532237665,1,21.22893671974426,19.66131113958965,1,95.76666666666668,19.66131113958965,0,4.233333333333333,33.63601230274846,1,21.22893671974426,20.77482291010045,1,95.76666666666668,20.77482291010045,0,4.233333333333333,34.74952407325926,1,21.22893671974426,21.888334680611234,1,95.76666666666668,21.888334680611234,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,0,4.233333333333333,25.841429909172902,1,21.22893671974426,12.980240516524882,1,95.76666666666668,12.980240516524882,0,4.233333333333333,26.954941679683692,1,21.22893671974426,14.093752287035672,1,95.76666666666668,14.093752287035672,0,4.233333333333333,28.06845345019448,1,21.22893671974426,15.20726405754647,1,95.76666666666668,15.20726405754647,0,4.233333333333333,29.18196522070528,1,21.22893671974426,16.320775828057265,1,95.76666666666668,16.320775828057265,15,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,1,78.77106328025575,58.13327125398591,1,4.233333333333333,58.13327125398591,15,0,4.233333333333333,58.13327125398591,1,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,21.22893671974426,45.27208186133791,1,4.233333333333333,58.13327125398591,15,0,21.22893671974426,45.27208186133791,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,1,95.76666666666668,45.27208186133791,1,21.22893671974426,45.27208186133791,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,24.1748108289102,33.933857434872834,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,17.635567513269404,53.63185496655912,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,17.635567513269404,53.63185496655912,1,14.236446835987218,56.20409284508871,15,0,24.1748108289102,56.20409284508871,1,24.1748108289102,33.933857434872834,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,15,0,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,24.1748108289102,33.933857434872834,1,14.236446835987218,33.933857434872834,15,0,17.635567513269404,53.63185496655912,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,17.635567513269404,53.63185496655912,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,24.1748108289102,33.933857434872834,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,17.635567513269404,53.63185496655912,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,1,14.236446835987218,56.20409284508871,15,0,14.236446835987218,56.20409284508871,1,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,17.635567513269404,53.63185496655912,1,14.236446835987218,56.20409284508871,15,0,24.1748108289102,56.20409284508871,1,24.1748108289102,33.933857434872834,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,24.1748108289102,56.20409284508871,15,0,14.236446835987218,33.933857434872834,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,24.1748108289102,33.933857434872834,1,14.236446835987218,33.933857434872834,15,0,17.635567513269404,53.63185496655912,1,17.635567513269404,31.361619556343232,1,27.573931506192384,31.361619556343232,1,27.573931506192384,53.63185496655912,1,17.635567513269404,53.63185496655912,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,49.020720811217664,29.479810352829663,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,42.48147749557686,53.63185496655912,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,42.48147749557686,53.63185496655912,1,39.08235681829468,56.20409284508871,15,0,49.020720811217664,56.20409284508871,1,49.020720811217664,29.479810352829663,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,15,0,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,49.020720811217664,29.479810352829663,1,39.08235681829468,29.479810352829663,15,0,42.48147749557686,53.63185496655912,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,42.48147749557686,53.63185496655912,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,49.020720811217664,29.479810352829663,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,42.48147749557686,53.63185496655912,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,1,39.08235681829468,56.20409284508871,15,0,39.08235681829468,56.20409284508871,1,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,42.48147749557686,53.63185496655912,1,39.08235681829468,56.20409284508871,15,0,49.020720811217664,56.20409284508871,1,49.020720811217664,29.479810352829663,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,49.020720811217664,56.20409284508871,15,0,39.08235681829468,29.479810352829663,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,49.020720811217664,29.479810352829663,1,39.08235681829468,29.479810352829663,15,0,42.48147749557686,53.63185496655912,1,42.48147749557686,26.90757247430006,1,52.41984148849984,26.90757247430006,1,52.41984148849984,53.63185496655912,1,42.48147749557686,53.63185496655912,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,73.86663079352513,25.025763270786484,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,67.32738747788434,53.63185496655912,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,67.32738747788434,53.63185496655912,1,63.92826680060216,56.20409284508871,15,0,73.86663079352513,56.20409284508871,1,73.86663079352513,25.025763270786484,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,15,0,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,73.86663079352513,25.025763270786484,1,63.92826680060216,25.025763270786484,15,0,67.32738747788434,53.63185496655912,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,67.32738747788434,53.63185496655912,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,73.86663079352513,25.025763270786484,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,67.32738747788434,53.63185496655912,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,1,63.92826680060216,56.20409284508871,15,0,63.92826680060216,56.20409284508871,1,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,67.32738747788434,53.63185496655912,1,63.92826680060216,56.20409284508871,15,0,73.86663079352513,56.20409284508871,1,73.86663079352513,25.025763270786484,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,73.86663079352513,56.20409284508871,15,0,63.92826680060216,25.025763270786484,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,73.86663079352513,25.025763270786484,1,63.92826680060216,25.025763270786484,15,0,67.32738747788434,53.63185496655912,1,67.32738747788434,22.453525392256882,1,77.26575147080733,22.453525392256882,1,77.26575147080733,53.63185496655912,1,67.32738747788434,53.63185496655912,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,32.67261252211567,21.935703885994865,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,26.133369206474867,47.2012602702351,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,26.133369206474867,47.2012602702351,1,22.734248529192683,49.7734981487647,15,0,32.67261252211567,49.7734981487647,1,32.67261252211567,21.935703885994865,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,15,0,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,32.67261252211567,21.935703885994865,1,22.734248529192683,21.935703885994865,15,0,26.133369206474867,47.2012602702351,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,26.133369206474867,47.2012602702351,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,32.67261252211567,21.935703885994865,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,26.133369206474867,47.2012602702351,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,1,22.734248529192683,49.7734981487647,15,0,22.734248529192683,49.7734981487647,1,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,26.133369206474867,47.2012602702351,1,22.734248529192683,49.7734981487647,15,0,32.67261252211567,49.7734981487647,1,32.67261252211567,21.935703885994865,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,32.67261252211567,49.7734981487647,15,0,22.734248529192683,21.935703885994865,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,32.67261252211567,21.935703885994865,1,22.734248529192683,21.935703885994865,15,0,26.133369206474867,47.2012602702351,1,26.133369206474867,19.363466007465263,1,36.071733199397855,19.363466007465263,1,36.071733199397855,47.2012602702351,1,26.133369206474867,47.2012602702351,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,57.51852250442313,20.82219211548407,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,50.97927918878233,47.2012602702351,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,50.97927918878233,47.2012602702351,1,47.580158511500144,49.7734981487647,15,0,57.51852250442313,49.7734981487647,1,57.51852250442313,20.82219211548407,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,15,0,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,57.51852250442313,20.82219211548407,1,47.580158511500144,20.82219211548407,15,0,50.97927918878233,47.2012602702351,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,50.97927918878233,47.2012602702351,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,57.51852250442313,20.82219211548407,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,50.97927918878233,47.2012602702351,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,1,47.580158511500144,49.7734981487647,15,0,47.580158511500144,49.7734981487647,1,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,50.97927918878233,47.2012602702351,1,47.580158511500144,49.7734981487647,15,0,57.51852250442313,49.7734981487647,1,57.51852250442313,20.82219211548407,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,57.51852250442313,49.7734981487647,15,0,47.580158511500144,20.82219211548407,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,57.51852250442313,20.82219211548407,1,47.580158511500144,20.82219211548407,15,0,50.97927918878233,47.2012602702351,1,50.97927918878233,18.24995423695447,1,60.91764318170531,18.24995423695447,1,60.91764318170531,47.2012602702351,1,50.97927918878233,47.2012602702351,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "horizontalBar": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.23333333333333,1,4.233333333333333,4.23333333333333,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,222,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,7.5313888888888885,4.497916666666663,1,7.5313888888888885,65.50208333333333,0,10.564861111111112,4.497916666666663,1,10.564861111111112,65.50208333333333,0,13.598333333333333,4.497916666666663,1,13.598333333333333,65.50208333333333,0,16.631805555555555,4.497916666666663,1,16.631805555555555,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,22.69875,4.497916666666663,1,22.69875,65.50208333333333,0,25.732222222222223,4.497916666666663,1,25.732222222222223,65.50208333333333,0,28.765694444444446,4.497916666666663,1,28.765694444444446,65.50208333333333,0,31.799166666666665,4.497916666666663,1,31.799166666666665,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,37.86611111111112,4.497916666666663,1,37.86611111111112,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,43.933055555555555,4.497916666666663,1,43.933055555555555,65.50208333333333,0,46.966527777777785,4.497916666666663,1,46.966527777777785,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,53.03347222222222,4.497916666666663,1,53.03347222222222,65.50208333333333,0,56.066944444444445,4.497916666666663,1,56.066944444444445,65.50208333333333,0,59.100416666666675,4.497916666666663,1,59.100416666666675,65.50208333333333,0,62.1338888888889,4.497916666666663,1,62.1338888888889,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,68.20083333333332,4.497916666666663,1,68.20083333333332,65.50208333333333,0,71.23430555555558,4.497916666666663,1,71.23430555555558,65.50208333333333,0,74.2677777777778,4.497916666666663,1,74.2677777777778,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,80.33472222222223,4.497916666666663,1,80.33472222222223,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,83.36819444444447,4.497916666666663,1,83.36819444444447,65.50208333333333,0,86.4016666666667,4.497916666666663,1,86.4016666666667,65.50208333333333,0,89.4351388888889,4.497916666666663,1,89.4351388888889,65.50208333333333,0,92.46861111111112,4.497916666666663,1,92.46861111111112,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,15,0,4.497916666666668,61.144642857142856,1,4.497916666666668,55.334722222222226,1,65.1673611111111,55.334722222222226,1,65.1673611111111,61.144642857142856,1,4.497916666666668,61.144642857142856,15,0,4.497916666666668,40.80992063492064,1,4.497916666666668,34.99999999999999,1,77.30125000000001,34.99999999999999,1,77.30125000000001,40.80992063492064,1,4.497916666666668,40.80992063492064,15,0,4.497916666666668,20.47519841269841,1,4.497916666666668,14.66527777777778,1,89.43513888888889,14.66527777777778,1,89.43513888888889,20.47519841269841,1,4.497916666666668,20.47519841269841,15,0,4.497916666666668,55.33472222222222,1,4.497916666666668,49.524801587301575,1,80.33472222222224,49.524801587301575,1,80.33472222222224,55.33472222222222,1,4.497916666666668,55.33472222222222,15,0,4.497916666666668,34.99999999999999,1,4.497916666666668,29.190079365079363,1,83.36819444444444,29.190079365079363,1,83.36819444444444,34.99999999999999,1,4.497916666666668,34.99999999999999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "horizontalBarStacked": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.23333333333333,1,4.233333333333333,4.23333333333333,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,222,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,7.5313888888888885,4.497916666666663,1,7.5313888888888885,65.50208333333333,0,10.564861111111112,4.497916666666663,1,10.564861111111112,65.50208333333333,0,13.598333333333333,4.497916666666663,1,13.598333333333333,65.50208333333333,0,16.631805555555555,4.497916666666663,1,16.631805555555555,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,19.66527777777778,4.497916666666663,1,19.66527777777778,65.50208333333333,0,22.69875,4.497916666666663,1,22.69875,65.50208333333333,0,25.732222222222223,4.497916666666663,1,25.732222222222223,65.50208333333333,0,28.765694444444446,4.497916666666663,1,28.765694444444446,65.50208333333333,0,31.799166666666665,4.497916666666663,1,31.799166666666665,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,34.83263888888889,4.497916666666663,1,34.83263888888889,65.50208333333333,0,37.86611111111112,4.497916666666663,1,37.86611111111112,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,43.933055555555555,4.497916666666663,1,43.933055555555555,65.50208333333333,0,46.966527777777785,4.497916666666663,1,46.966527777777785,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,50,4.497916666666663,1,50,65.50208333333333,0,53.03347222222222,4.497916666666663,1,53.03347222222222,65.50208333333333,0,56.066944444444445,4.497916666666663,1,56.066944444444445,65.50208333333333,0,59.100416666666675,4.497916666666663,1,59.100416666666675,65.50208333333333,0,62.1338888888889,4.497916666666663,1,62.1338888888889,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,65.1673611111111,4.497916666666663,1,65.1673611111111,65.50208333333333,0,68.20083333333332,4.497916666666663,1,68.20083333333332,65.50208333333333,0,71.23430555555558,4.497916666666663,1,71.23430555555558,65.50208333333333,0,74.2677777777778,4.497916666666663,1,74.2677777777778,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,80.33472222222223,4.497916666666663,1,80.33472222222223,65.50208333333333,0,80.33472222222224,4.497916666666663,1,80.33472222222224,65.50208333333333,0,83.36819444444447,4.497916666666663,1,83.36819444444447,65.50208333333333,0,86.4016666666667,4.497916666666663,1,86.4016666666667,65.50208333333333,0,89.4351388888889,4.497916666666663,1,89.4351388888889,65.50208333333333,0,92.46861111111112,4.497916666666663,1,92.46861111111112,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,15,0,4.497916666666668,59.40166666666667,1,4.497916666666668,51.26777777777777,1,34.83263888888889,51.26777777777777,1,34.83263888888889,59.40166666666667,1,4.497916666666668,59.40166666666667,15,0,4.497916666666668,39.06694444444444,1,4.497916666666668,30.93305555555555,1,40.89958333333334,30.93305555555555,1,40.89958333333334,39.06694444444444,1,4.497916666666668,39.06694444444444,15,0,4.497916666666668,18.732222222222223,1,4.497916666666668,10.598333333333334,1,46.966527777777785,10.598333333333334,1,46.966527777777785,18.732222222222223,1,4.497916666666668,18.732222222222223,15,0,34.83263888888889,59.40166666666667,1,34.83263888888889,51.26777777777777,1,72.75104166666668,51.26777777777777,1,72.75104166666668,59.40166666666667,1,34.83263888888889,59.40166666666667,15,0,40.89958333333334,39.06694444444444,1,40.89958333333334,30.93305555555555,1,80.33472222222225,30.93305555555555,1,80.33472222222225,39.06694444444444,1,40.89958333333334,39.06694444444444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "horizontalBarStackedPercent": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.23333333333333,1,4.233333333333333,4.23333333333333,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,36,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,22.698749999999997,4.497916666666663,1,22.698749999999997,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,59.10041666666667,4.497916666666663,1,59.10041666666667,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,186,0,4.497916666666668,4.497916666666663,1,4.497916666666668,65.50208333333333,0,8.138083333333332,4.497916666666663,1,8.138083333333332,65.50208333333333,0,11.778249999999998,4.497916666666663,1,11.778249999999998,65.50208333333333,0,15.418416666666667,4.497916666666663,1,15.418416666666667,65.50208333333333,0,19.058583333333328,4.497916666666663,1,19.058583333333328,65.50208333333333,0,22.698749999999997,4.497916666666663,1,22.698749999999997,65.50208333333333,0,22.698749999999997,4.497916666666663,1,22.698749999999997,65.50208333333333,0,26.338916666666666,4.497916666666663,1,26.338916666666666,65.50208333333333,0,29.97908333333333,4.497916666666663,1,29.97908333333333,65.50208333333333,0,33.619249999999994,4.497916666666663,1,33.619249999999994,65.50208333333333,0,37.25941666666666,4.497916666666663,1,37.25941666666666,65.50208333333333,0,40.89958333333333,4.497916666666663,1,40.89958333333333,65.50208333333333,0,40.89958333333334,4.497916666666663,1,40.89958333333334,65.50208333333333,0,44.539750000000005,4.497916666666663,1,44.539750000000005,65.50208333333333,0,48.179916666666664,4.497916666666663,1,48.179916666666664,65.50208333333333,0,51.82008333333333,4.497916666666663,1,51.82008333333333,65.50208333333333,0,55.460249999999995,4.497916666666663,1,55.460249999999995,65.50208333333333,0,59.10041666666667,4.497916666666663,1,59.10041666666667,65.50208333333333,0,59.10041666666667,4.497916666666663,1,59.10041666666667,65.50208333333333,0,62.740583333333326,4.497916666666663,1,62.740583333333326,65.50208333333333,0,66.38074999999999,4.497916666666663,1,66.38074999999999,65.50208333333333,0,70.02091666666666,4.497916666666663,1,70.02091666666666,65.50208333333333,0,73.66108333333334,4.497916666666663,1,73.66108333333334,65.50208333333333,0,77.30125,4.497916666666663,1,77.30125,65.50208333333333,0,77.30125000000001,4.497916666666663,1,77.30125000000001,65.50208333333333,0,80.94141666666668,4.497916666666663,1,80.94141666666668,65.50208333333333,0,84.58158333333333,4.497916666666663,1,84.58158333333333,65.50208333333333,0,88.22175,4.497916666666663,1,88.22175,65.50208333333333,0,91.86191666666667,4.497916666666663,1,91.86191666666667,65.50208333333333,0,95.50208333333332,4.497916666666663,1,95.50208333333332,65.50208333333333,0,95.50208333333333,4.497916666666663,1,95.50208333333333,65.50208333333333,15,0,4.497916666666668,59.40166666666667,1,4.497916666666668,51.26777777777777,1,44.944212962962965,51.26777777777777,1,44.944212962962965,59.40166666666667,1,4.497916666666668,59.40166666666667,15,0,4.497916666666668,39.06694444444444,1,4.497916666666668,30.93305555555555,1,48.17991666666668,30.93305555555555,1,48.17991666666668,39.06694444444444,1,4.497916666666668,39.06694444444444,15,0,4.497916666666668,18.732222222222223,1,4.497916666666668,10.598333333333334,1,95.50208333333335,10.598333333333334,1,95.50208333333335,18.732222222222223,1,4.497916666666668,18.732222222222223,15,0,44.944212962962965,59.40166666666667,1,44.944212962962965,51.26777777777777,1,95.50208333333333,51.26777777777777,1,95.50208333333333,59.40166666666667,1,44.944212962962965,59.40166666666667,15,0,48.179916666666664,39.06694444444444,1,48.179916666666664,30.93305555555555,1,95.50208333333333,30.93305555555555,1,95.50208333333333,39.06694444444444,1,48.179916666666664,39.06694444444444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "horizontalBar3D": "15,0,9.000706597903596,61.945644014038095,1,95.22084608130814,61.945644014038095,1,95.22084608130814,3.9841081486467,1,9.000706597903596,3.9841081486467,0,9.000706597903596,61.945644014038095,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,63,0,9.249931782590238,4.233333333333345,1,9.249931782590238,62.194869198724746,1,4.529928734005227,65.76666666666667,0,23.619955029824325,4.233333333333345,1,23.619955029824325,62.194869198724746,1,18.89995198123931,65.76666666666667,0,37.98997827705841,4.233333333333345,1,37.98997827705841,62.194869198724746,1,33.2699752284734,65.76666666666667,0,52.36000152429251,4.233333333333345,1,52.36000152429251,62.194869198724746,1,47.6399984757075,65.76666666666667,0,66.73002477152659,4.233333333333345,1,66.73002477152659,62.194869198724746,1,62.01002172294159,65.76666666666667,0,81.10004801876069,4.233333333333345,1,81.10004801876069,62.194869198724746,1,76.38004497017567,65.76666666666667,0,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,333,0,9.249931782590238,4.233333333333345,1,9.249931782590238,62.194869198724746,1,4.529928734005227,65.76666666666667,0,12.123936432037054,4.233333333333345,1,12.123936432037054,62.194869198724746,1,7.403933383452044,65.76666666666667,0,14.99794108148387,4.233333333333345,1,14.99794108148387,62.194869198724746,1,10.27793803289886,65.76666666666667,0,17.87194573093069,4.233333333333345,1,17.87194573093069,62.194869198724746,1,13.151942682345686,65.76666666666667,0,20.745950380377508,4.233333333333345,1,20.745950380377508,62.194869198724746,1,16.0259473317925,65.76666666666667,0,23.619955029824325,4.233333333333345,1,23.619955029824325,62.194869198724746,1,18.89995198123931,65.76666666666667,0,23.619955029824325,4.233333333333345,1,23.619955029824325,62.194869198724746,1,18.89995198123931,65.76666666666667,0,26.493959679271146,4.233333333333345,1,26.493959679271146,62.194869198724746,1,21.773956630686136,65.76666666666667,0,29.367964328717964,4.233333333333345,1,29.367964328717964,62.194869198724746,1,24.64796128013295,65.76666666666667,0,32.24196897816478,4.233333333333345,1,32.24196897816478,62.194869198724746,1,27.52196592957977,65.76666666666667,0,35.115973627611595,4.233333333333345,1,35.115973627611595,62.194869198724746,1,30.395970579026585,65.76666666666667,0,37.98997827705841,4.233333333333345,1,37.98997827705841,62.194869198724746,1,33.2699752284734,65.76666666666667,0,37.98997827705841,4.233333333333345,1,37.98997827705841,62.194869198724746,1,33.2699752284734,65.76666666666667,0,40.86398292650523,4.233333333333345,1,40.86398292650523,62.194869198724746,1,36.14397987792023,65.76666666666667,0,43.737987575952054,4.233333333333345,1,43.737987575952054,62.194869198724746,1,39.01798452736705,65.76666666666667,0,46.611992225398886,4.233333333333345,1,46.611992225398886,62.194869198724746,1,41.89198917681386,65.76666666666667,0,49.48599687484568,4.233333333333345,1,49.48599687484568,62.194869198724746,1,44.76599382626067,65.76666666666667,0,52.36000152429251,4.233333333333345,1,52.36000152429251,62.194869198724746,1,47.6399984757075,65.76666666666667,0,52.36000152429251,4.233333333333345,1,52.36000152429251,62.194869198724746,1,47.6399984757075,65.76666666666667,0,55.23400617373933,4.233333333333345,1,55.23400617373933,62.194869198724746,1,50.514003125154325,65.76666666666667,0,58.10801082318615,4.233333333333345,1,58.10801082318615,62.194869198724746,1,53.388007774601135,65.76666666666667,0,60.982015472632966,4.233333333333345,1,60.982015472632966,62.194869198724746,1,56.26201242404796,65.76666666666667,0,63.85602012207978,4.233333333333345,1,63.85602012207978,62.194869198724746,1,59.13601707349478,65.76666666666667,0,66.7300247715266,4.233333333333345,1,66.7300247715266,62.194869198724746,1,62.010021722941595,65.76666666666667,0,66.73002477152659,4.233333333333345,1,66.73002477152659,62.194869198724746,1,62.01002172294159,65.76666666666667,0,69.60402942097339,4.233333333333345,1,69.60402942097339,62.194869198724746,1,64.88402637238839,65.76666666666667,0,72.47803407042025,4.233333333333345,1,72.47803407042025,62.194869198724746,1,67.75803102183522,65.76666666666667,0,75.35203871986705,4.233333333333345,1,75.35203871986705,62.194869198724746,1,70.63203567128205,65.76666666666667,0,78.22604336931389,4.233333333333345,1,78.22604336931389,62.194869198724746,1,73.50604032072886,65.76666666666667,0,81.10004801876067,4.233333333333345,1,81.10004801876067,62.194869198724746,1,76.38004497017565,65.76666666666667,0,81.10004801876069,4.233333333333345,1,81.10004801876069,62.194869198724746,1,76.38004497017567,65.76666666666667,0,83.9740526682075,4.233333333333345,1,83.9740526682075,62.194869198724746,1,79.2540496196225,65.76666666666667,0,86.84805731765434,4.233333333333345,1,86.84805731765434,62.194869198724746,1,82.12805426906931,65.76666666666667,0,89.72206196710114,4.233333333333345,1,89.72206196710114,62.194869198724746,1,85.00205891851613,65.76666666666667,0,92.59606661654796,4.233333333333345,1,92.59606661654796,62.194869198724746,1,87.87606356796294,65.76666666666667,0,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,0,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,15,0,4.529928734005227,65.76666666666667,1,4.529928734005227,7.805130801275273,1,9.249931782590238,4.233333333333345,1,9.249931782590238,62.194869198724746,1,4.529928734005227,65.76666666666667,15,0,4.529928734005227,65.76666666666667,1,9.249931782590238,62.194869198724746,1,95.47007126599479,62.194869198724746,1,90.75006821740975,65.76666666666667,1,4.529928734005227,65.76666666666667,15,0,9.249931782590238,62.194869198724746,1,9.249931782590238,4.233333333333345,1,95.47007126599479,4.233333333333345,1,95.47007126599479,62.194869198724746,1,9.249931782590238,62.194869198724746,15,0,5.945929648580728,55.03487144871886,1,5.945929648580728,60.55501772161327,1,63.426022637517086,60.55501772161327,1,63.426022637517086,55.03487144871886,1,5.945929648580728,55.03487144871886,15,0,5.945929648580728,55.03487144871886,1,7.833930868014729,53.60615246154208,1,65.3140238569511,53.60615246154208,1,63.426022637517086,55.03487144871886,1,5.945929648580728,55.03487144871886,15,0,5.945929648580728,55.03487144871886,1,5.945929648580728,60.55501772161327,1,7.833930868014729,59.1262987344365,1,7.833930868014729,53.60615246154208,1,5.945929648580728,55.03487144871886,15,0,63.426022637517086,55.03487144871886,1,63.426022637517086,60.55501772161327,1,65.3140238569511,59.1262987344365,1,65.3140238569511,53.60615246154208,1,63.426022637517086,55.03487144871886,15,0,5.945929648580728,60.55501772161327,1,7.833930868014729,59.1262987344365,1,65.3140238569511,59.1262987344365,1,63.426022637517086,60.55501772161327,1,5.945929648580728,60.55501772161327,15,0,7.833930868014729,53.60615246154208,1,7.833930868014729,59.1262987344365,1,65.3140238569511,59.1262987344365,1,65.3140238569511,53.60615246154208,1,7.833930868014729,53.60615246154208,15,0,5.945929648580728,35.7143594935884,1,5.945929648580728,41.234505766482805,1,74.92204123530438,41.234505766482805,1,74.92204123530438,35.7143594935884,1,5.945929648580728,35.7143594935884,15,0,5.945929648580728,35.7143594935884,1,7.833930868014729,34.285640506411625,1,76.81004245473838,34.285640506411625,1,74.92204123530438,35.7143594935884,1,5.945929648580728,35.7143594935884,15,0,5.945929648580728,35.7143594935884,1,5.945929648580728,41.234505766482805,1,7.833930868014729,39.80578677930604,1,7.833930868014729,34.285640506411625,1,5.945929648580728,35.7143594935884,15,0,74.92204123530438,35.7143594935884,1,74.92204123530438,41.234505766482805,1,76.81004245473838,39.80578677930604,1,76.81004245473838,34.285640506411625,1,74.92204123530438,35.7143594935884,15,0,5.945929648580728,41.234505766482805,1,7.833930868014729,39.80578677930604,1,76.81004245473838,39.80578677930604,1,74.92204123530438,41.234505766482805,1,5.945929648580728,41.234505766482805,15,0,7.833930868014729,34.285640506411625,1,7.833930868014729,39.80578677930604,1,76.81004245473838,39.80578677930604,1,76.81004245473838,34.285640506411625,1,7.833930868014729,34.285640506411625,15,0,5.945929648580728,16.393847538457923,1,5.945929648580728,21.913993811352345,1,86.41805983309163,21.913993811352345,1,86.41805983309163,16.393847538457923,1,5.945929648580728,16.393847538457923,15,0,5.945929648580728,16.393847538457923,1,7.833930868014729,14.965128551281156,1,88.30606105252564,14.965128551281156,1,86.41805983309163,16.393847538457923,1,5.945929648580728,16.393847538457923,15,0,5.945929648580728,16.393847538457923,1,5.945929648580728,21.913993811352345,1,7.833930868014729,20.485274824175576,1,7.833930868014729,14.965128551281156,1,5.945929648580728,16.393847538457923,15,0,86.41805983309163,16.393847538457923,1,86.41805983309163,21.913993811352345,1,88.30606105252564,20.485274824175576,1,88.30606105252564,14.965128551281156,1,86.41805983309163,16.393847538457923,15,0,5.945929648580728,21.913993811352345,1,7.833930868014729,20.485274824175576,1,88.30606105252564,20.485274824175576,1,86.41805983309163,21.913993811352345,1,5.945929648580728,21.913993811352345,15,0,7.833930868014729,14.965128551281156,1,7.833930868014729,20.485274824175576,1,88.30606105252564,20.485274824175576,1,88.30606105252564,14.965128551281156,1,7.833930868014729,14.965128551281156,15,0,5.945929648580728,49.514725175824445,1,5.945929648580728,55.03487144871886,1,77.79604588475118,55.03487144871886,1,77.79604588475118,49.514725175824445,1,5.945929648580728,49.514725175824445,15,0,5.945929648580728,49.514725175824445,1,7.833930868014729,48.08600618864767,1,79.68404710418518,48.08600618864767,1,77.79604588475118,49.514725175824445,1,5.945929648580728,49.514725175824445,15,0,5.945929648580728,49.514725175824445,1,5.945929648580728,55.03487144871886,1,7.833930868014729,53.60615246154208,1,7.833930868014729,48.08600618864767,1,5.945929648580728,49.514725175824445,15,0,77.79604588475118,49.514725175824445,1,77.79604588475118,55.03487144871886,1,79.68404710418518,53.60615246154208,1,79.68404710418518,48.08600618864767,1,77.79604588475118,49.514725175824445,15,0,5.945929648580728,55.03487144871886,1,7.833930868014729,53.60615246154208,1,79.68404710418518,53.60615246154208,1,77.79604588475118,55.03487144871886,1,5.945929648580728,55.03487144871886,15,0,7.833930868014729,48.08600618864767,1,7.833930868014729,53.60615246154208,1,79.68404710418518,53.60615246154208,1,79.68404710418518,48.08600618864767,1,7.833930868014729,48.08600618864767,15,0,5.945929648580728,30.19421322069398,1,5.945929648580728,35.7143594935884,1,80.670050534198,35.7143594935884,1,80.670050534198,30.19421322069398,1,5.945929648580728,30.19421322069398,15,0,5.945929648580728,30.19421322069398,1,7.833930868014729,28.765494233517202,1,82.55805175363201,28.765494233517202,1,80.670050534198,30.19421322069398,1,5.945929648580728,30.19421322069398,15,0,5.945929648580728,30.19421322069398,1,5.945929648580728,35.7143594935884,1,7.833930868014729,34.285640506411625,1,7.833930868014729,28.765494233517202,1,5.945929648580728,30.19421322069398,15,0,80.670050534198,30.19421322069398,1,80.670050534198,35.7143594935884,1,82.55805175363201,34.285640506411625,1,82.55805175363201,28.765494233517202,1,80.670050534198,30.19421322069398,15,0,5.945929648580728,35.7143594935884,1,7.833930868014729,34.285640506411625,1,82.55805175363201,34.285640506411625,1,80.670050534198,35.7143594935884,1,5.945929648580728,35.7143594935884,15,0,7.833930868014729,28.765494233517202,1,7.833930868014729,34.285640506411625,1,82.55805175363201,34.285640506411625,1,82.55805175363201,28.765494233517202,1,7.833930868014729,28.765494233517202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "horizontalBarStacked3D": "15,0,10.853631793783668,60.636050838078226,1,95.11728565105432,60.636050838078226,1,95.11728565105432,3.98976350358385,1,10.853631793783668,3.98976350358385,0,10.853631793783668,60.636050838078226,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,54,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,279,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,14.467747777823972,4.233333333333337,1,14.467747777823972,60.879620667827716,1,8.009690673487047,65.76666666666667,0,17.8382939321148,4.233333333333337,1,17.8382939321148,60.879620667827716,1,11.380236827777873,65.76666666666667,0,21.20884008640562,4.233333333333337,1,21.20884008640562,60.879620667827716,1,14.750782982068692,65.76666666666667,0,24.57938624069645,4.233333333333337,1,24.57938624069645,60.879620667827716,1,18.121329136359524,65.76666666666667,0,27.94993239498727,4.233333333333337,1,27.94993239498727,60.879620667827716,1,21.491875290650345,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,31.320478549278103,4.233333333333337,1,31.320478549278103,60.879620667827716,1,24.86242144494118,65.76666666666667,0,34.691024703568935,4.233333333333337,1,34.691024703568935,60.879620667827716,1,28.23296759923201,65.76666666666667,0,38.06157085785975,4.233333333333337,1,38.06157085785975,60.879620667827716,1,31.603513753522826,65.76666666666667,0,41.432117012150584,4.233333333333337,1,41.432117012150584,60.879620667827716,1,34.974059907813654,65.76666666666667,0,44.80266316644141,4.233333333333337,1,44.80266316644141,60.879620667827716,1,38.34460606210449,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,48.17320932073223,4.233333333333337,1,48.17320932073223,60.879620667827716,1,41.7151522163953,65.76666666666667,0,51.54375547502306,4.233333333333337,1,51.54375547502306,60.879620667827716,1,45.08569837068613,65.76666666666667,0,54.91430162931387,4.233333333333337,1,54.91430162931387,60.879620667827716,1,48.456244524976945,65.76666666666667,0,58.2848477836047,4.233333333333337,1,58.2848477836047,60.879620667827716,1,51.82679067926777,65.76666666666667,0,61.65539393789552,4.233333333333337,1,61.65539393789552,60.879620667827716,1,55.19733683355859,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,65.02594009218635,4.233333333333337,1,65.02594009218635,60.879620667827716,1,58.56788298784943,65.76666666666667,0,68.39648624647718,4.233333333333337,1,68.39648624647718,60.879620667827716,1,61.93842914214026,65.76666666666667,0,71.76703240076799,4.233333333333337,1,71.76703240076799,60.879620667827716,1,65.30897529643107,65.76666666666667,0,75.1375785550588,4.233333333333337,1,75.1375785550588,60.879620667827716,1,68.67952145072188,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,81.87867086364048,4.233333333333337,1,81.87867086364048,60.879620667827716,1,75.42061375930354,65.76666666666667,0,85.24921701793131,4.233333333333337,1,85.24921701793131,60.879620667827716,1,78.79115991359438,65.76666666666667,0,88.61976317222211,4.233333333333337,1,88.61976317222211,60.879620667827716,1,82.16170606788522,65.76666666666667,0,91.99030932651293,4.233333333333337,1,91.99030932651293,60.879620667827716,1,85.53225222217603,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646683,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,4.639144519196221,9.120379332172286,1,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,11.097201623533147,60.879620667827716,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,1,4.639144519196221,65.76666666666667,15,0,11.097201623533147,60.879620667827716,1,11.097201623533147,4.233333333333337,1,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,11.097201623533147,60.879620667827716,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,40.28202319340555,58.635924133565545,1,40.28202319340555,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,9.159784492232072,49.12826742276405,1,42.86524603514032,49.12826742276405,1,40.28202319340555,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,9.159784492232072,49.12826742276405,1,6.576561650497303,51.08308582229963,15,0,40.28202319340555,51.08308582229963,1,40.28202319340555,58.635924133565545,1,42.86524603514032,56.68110573402997,1,42.86524603514032,49.12826742276405,1,40.28202319340555,51.08308582229963,15,0,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,42.86524603514032,56.68110573402997,1,40.28202319340555,58.635924133565545,1,6.576561650497303,58.635924133565545,15,0,9.159784492232072,49.12826742276405,1,9.159784492232072,56.68110573402997,1,42.86524603514032,56.68110573402997,1,42.86524603514032,49.12826742276405,1,9.159784492232072,49.12826742276405,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,47.0231155019872,39.75382835540075,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,9.159784492232072,30.24617164459926,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,9.159784492232072,30.24617164459926,1,6.576561650497303,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,47.0231155019872,39.75382835540075,1,6.576561650497303,39.75382835540075,15,0,9.159784492232072,30.24617164459926,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,9.159784492232072,30.24617164459926,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,53.76420781056885,20.87173257723596,1,53.76420781056885,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,9.159784492232072,11.36407586643446,1,56.347430652303615,11.36407586643446,1,53.76420781056885,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,9.159784492232072,11.36407586643446,1,6.576561650497303,13.31889426597004,15,0,53.76420781056885,13.31889426597004,1,53.76420781056885,20.87173257723596,1,56.347430652303615,18.916914177700384,1,56.347430652303615,11.36407586643446,1,53.76420781056885,13.31889426597004,15,0,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,56.347430652303615,18.916914177700384,1,53.76420781056885,20.87173257723596,1,6.576561650497303,20.87173257723596,15,0,9.159784492232072,11.36407586643446,1,9.159784492232072,18.916914177700384,1,56.347430652303615,18.916914177700384,1,56.347430652303615,11.36407586643446,1,9.159784492232072,11.36407586643446,15,0,40.28202319340555,51.08308582229963,1,40.28202319340555,58.635924133565545,1,82.41385012204087,58.635924133565545,1,82.41385012204087,51.08308582229963,1,40.28202319340555,51.08308582229963,15,0,40.28202319340555,51.08308582229963,1,42.86524603514032,49.12826742276405,1,84.99707296377564,49.12826742276405,1,82.41385012204087,51.08308582229963,1,40.28202319340555,51.08308582229963,15,0,40.28202319340555,51.08308582229963,1,40.28202319340555,58.635924133565545,1,42.86524603514032,56.68110573402997,1,42.86524603514032,49.12826742276405,1,40.28202319340555,51.08308582229963,15,0,82.41385012204087,51.08308582229963,1,82.41385012204087,58.635924133565545,1,84.99707296377564,56.68110573402997,1,84.99707296377564,49.12826742276405,1,82.41385012204087,51.08308582229963,15,0,40.28202319340555,58.635924133565545,1,42.86524603514032,56.68110573402997,1,84.99707296377564,56.68110573402997,1,82.41385012204087,58.635924133565545,1,40.28202319340555,58.635924133565545,15,0,42.86524603514032,49.12826742276405,1,42.86524603514032,56.68110573402997,1,84.99707296377564,56.68110573402997,1,84.99707296377564,49.12826742276405,1,42.86524603514032,49.12826742276405,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,90.84021550776795,39.75382835540075,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,49.606338343721966,30.24617164459926,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,90.84021550776795,32.20099004413484,1,90.84021550776795,39.75382835540075,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,15,0,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,90.84021550776795,39.75382835540075,1,47.0231155019872,39.75382835540075,15,0,49.606338343721966,30.24617164459926,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,49.606338343721966,30.24617164459926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "horizontalBarStackedPercent3D": "15,0,10.853631793783668,60.636050838078226,1,95.11728565105432,60.636050838078226,1,95.11728565105432,3.98976350358385,1,10.853631793783668,3.98976350358385,0,10.853631793783668,60.636050838078226,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,54,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,279,0,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,0,14.467747777823972,4.233333333333337,1,14.467747777823972,60.879620667827716,1,8.009690673487047,65.76666666666667,0,17.8382939321148,4.233333333333337,1,17.8382939321148,60.879620667827716,1,11.380236827777873,65.76666666666667,0,21.20884008640562,4.233333333333337,1,21.20884008640562,60.879620667827716,1,14.750782982068692,65.76666666666667,0,24.57938624069645,4.233333333333337,1,24.57938624069645,60.879620667827716,1,18.121329136359524,65.76666666666667,0,27.94993239498727,4.233333333333337,1,27.94993239498727,60.879620667827716,1,21.491875290650345,65.76666666666667,0,27.949932394987275,4.233333333333337,1,27.949932394987275,60.879620667827716,1,21.491875290650352,65.76666666666667,0,31.320478549278103,4.233333333333337,1,31.320478549278103,60.879620667827716,1,24.86242144494118,65.76666666666667,0,34.691024703568935,4.233333333333337,1,34.691024703568935,60.879620667827716,1,28.23296759923201,65.76666666666667,0,38.06157085785975,4.233333333333337,1,38.06157085785975,60.879620667827716,1,31.603513753522826,65.76666666666667,0,41.432117012150584,4.233333333333337,1,41.432117012150584,60.879620667827716,1,34.974059907813654,65.76666666666667,0,44.80266316644141,4.233333333333337,1,44.80266316644141,60.879620667827716,1,38.34460606210449,65.76666666666667,0,44.8026631664414,4.233333333333337,1,44.8026631664414,60.879620667827716,1,38.34460606210448,65.76666666666667,0,48.17320932073223,4.233333333333337,1,48.17320932073223,60.879620667827716,1,41.7151522163953,65.76666666666667,0,51.54375547502306,4.233333333333337,1,51.54375547502306,60.879620667827716,1,45.08569837068613,65.76666666666667,0,54.91430162931387,4.233333333333337,1,54.91430162931387,60.879620667827716,1,48.456244524976945,65.76666666666667,0,58.2848477836047,4.233333333333337,1,58.2848477836047,60.879620667827716,1,51.82679067926777,65.76666666666667,0,61.65539393789552,4.233333333333337,1,61.65539393789552,60.879620667827716,1,55.19733683355859,65.76666666666667,0,61.655393937895525,4.233333333333337,1,61.655393937895525,60.879620667827716,1,55.197336833558595,65.76666666666667,0,65.02594009218635,4.233333333333337,1,65.02594009218635,60.879620667827716,1,58.56788298784943,65.76666666666667,0,68.39648624647718,4.233333333333337,1,68.39648624647718,60.879620667827716,1,61.93842914214026,65.76666666666667,0,71.76703240076799,4.233333333333337,1,71.76703240076799,60.879620667827716,1,65.30897529643107,65.76666666666667,0,75.1375785550588,4.233333333333337,1,75.1375785550588,60.879620667827716,1,68.67952145072188,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,78.50812470934963,4.233333333333337,1,78.50812470934963,60.879620667827716,1,72.05006760501273,65.76666666666667,0,81.87867086364048,4.233333333333337,1,81.87867086364048,60.879620667827716,1,75.42061375930354,65.76666666666667,0,85.24921701793131,4.233333333333337,1,85.24921701793131,60.879620667827716,1,78.79115991359438,65.76666666666667,0,88.61976317222211,4.233333333333337,1,88.61976317222211,60.879620667827716,1,82.16170606788522,65.76666666666667,0,91.99030932651293,4.233333333333337,1,91.99030932651293,60.879620667827716,1,85.53225222217603,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646683,65.76666666666667,0,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,4.639144519196221,9.120379332172286,1,11.097201623533147,4.233333333333337,1,11.097201623533147,60.879620667827716,1,4.639144519196221,65.76666666666667,15,0,4.639144519196221,65.76666666666667,1,11.097201623533147,60.879620667827716,1,95.36085548080376,60.879620667827716,1,88.90279837646686,65.76666666666667,1,4.639144519196221,65.76666666666667,15,0,11.097201623533147,60.879620667827716,1,11.097201623533147,4.233333333333337,1,95.36085548080376,4.233333333333337,1,95.36085548080376,60.879620667827716,1,11.097201623533147,60.879620667827716,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,44.02707447595092,58.635924133565545,1,44.02707447595092,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,9.159784492232072,49.12826742276405,1,46.61029731768568,49.12826742276405,1,44.02707447595092,51.08308582229963,1,6.576561650497303,51.08308582229963,15,0,6.576561650497303,51.08308582229963,1,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,9.159784492232072,49.12826742276405,1,6.576561650497303,51.08308582229963,15,0,44.02707447595092,51.08308582229963,1,44.02707447595092,58.635924133565545,1,46.61029731768568,56.68110573402997,1,46.61029731768568,49.12826742276405,1,44.02707447595092,51.08308582229963,15,0,6.576561650497303,58.635924133565545,1,9.159784492232072,56.68110573402997,1,46.61029731768568,56.68110573402997,1,44.02707447595092,58.635924133565545,1,6.576561650497303,58.635924133565545,15,0,9.159784492232072,49.12826742276405,1,9.159784492232072,56.68110573402997,1,46.61029731768568,56.68110573402997,1,46.61029731768568,49.12826742276405,1,9.159784492232072,49.12826742276405,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,47.0231155019872,39.75382835540075,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,9.159784492232072,30.24617164459926,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,1,6.576561650497303,32.20099004413484,15,0,6.576561650497303,32.20099004413484,1,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,9.159784492232072,30.24617164459926,1,6.576561650497303,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,6.576561650497303,39.75382835540075,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,47.0231155019872,39.75382835540075,1,6.576561650497303,39.75382835540075,15,0,9.159784492232072,30.24617164459926,1,9.159784492232072,37.79900995586517,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,9.159784492232072,30.24617164459926,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,90.84021550776795,20.87173257723596,1,90.84021550776795,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,9.159784492232072,11.36407586643446,1,93.4234383495027,11.36407586643446,1,90.84021550776795,13.31889426597004,1,6.576561650497303,13.31889426597004,15,0,6.576561650497303,13.31889426597004,1,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,9.159784492232072,11.36407586643446,1,6.576561650497303,13.31889426597004,15,0,90.84021550776795,13.31889426597004,1,90.84021550776795,20.87173257723596,1,93.4234383495027,18.916914177700384,1,93.4234383495027,11.36407586643446,1,90.84021550776795,13.31889426597004,15,0,6.576561650497303,20.87173257723596,1,9.159784492232072,18.916914177700384,1,93.4234383495027,18.916914177700384,1,90.84021550776795,20.87173257723596,1,6.576561650497303,20.87173257723596,15,0,9.159784492232072,11.36407586643446,1,9.159784492232072,18.916914177700384,1,93.4234383495027,18.916914177700384,1,93.4234383495027,11.36407586643446,1,9.159784492232072,11.36407586643446,15,0,44.02707447595092,51.08308582229963,1,44.02707447595092,58.635924133565545,1,90.84021550776795,58.635924133565545,1,90.84021550776795,51.08308582229963,1,44.02707447595092,51.08308582229963,15,0,44.02707447595092,51.08308582229963,1,46.61029731768568,49.12826742276405,1,93.4234383495027,49.12826742276405,1,90.84021550776795,51.08308582229963,1,44.02707447595092,51.08308582229963,15,0,44.02707447595092,51.08308582229963,1,44.02707447595092,58.635924133565545,1,46.61029731768568,56.68110573402997,1,46.61029731768568,49.12826742276405,1,44.02707447595092,51.08308582229963,15,0,90.84021550776795,51.08308582229963,1,90.84021550776795,58.635924133565545,1,93.4234383495027,56.68110573402997,1,93.4234383495027,49.12826742276405,1,90.84021550776795,51.08308582229963,15,0,44.02707447595092,58.635924133565545,1,46.61029731768568,56.68110573402997,1,93.4234383495027,56.68110573402997,1,90.84021550776795,58.635924133565545,1,44.02707447595092,58.635924133565545,15,0,46.61029731768568,49.12826742276405,1,46.61029731768568,56.68110573402997,1,93.4234383495027,56.68110573402997,1,93.4234383495027,49.12826742276405,1,46.61029731768568,49.12826742276405,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,90.84021550776795,39.75382835540075,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,49.606338343721966,30.24617164459926,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,1,47.0231155019872,32.20099004413484,15,0,47.0231155019872,32.20099004413484,1,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,49.606338343721966,30.24617164459926,1,47.0231155019872,32.20099004413484,15,0,90.84021550776795,32.20099004413484,1,90.84021550776795,39.75382835540075,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,90.84021550776795,32.20099004413484,15,0,47.0231155019872,39.75382835540075,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,90.84021550776795,39.75382835540075,1,47.0231155019872,39.75382835540075,15,0,49.606338343721966,30.24617164459926,1,49.606338343721966,37.79900995586517,1,93.4234383495027,37.79900995586517,1,93.4234383495027,30.24617164459926,1,49.606338343721966,30.24617164459926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "lineNormal": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333332,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333332,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333332,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333332,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333332,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333332,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333332,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,37.033472222222215,1,95.50208333333332,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333332,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333332,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333332,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333332,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333332,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333332,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333332,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333332,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333332,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333332,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333332,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333332,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333332,12.63180555555556,3,0,19.66527777777778,24.832638888888887,3,0,50,16.698749999999997,3,0,80.33472222222223,8.56486111111111,3,0,19.66527777777778,14.665277777777776,3,0,50,12.631805555555554,6,0,19.66527777777778,24.832638888888887,1,50,16.698749999999997,6,0,50,16.698749999999997,1,80.33472222222223,8.56486111111111,6,0,19.66527777777778,14.665277777777776,1,50,12.631805555555554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "lineStacked": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333332,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333332,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333332,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333332,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333332,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333332,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333332,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,37.033472222222215,1,95.50208333333332,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333332,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333332,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333332,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333332,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333332,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333332,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333332,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333332,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333332,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333332,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333332,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333332,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333332,12.63180555555556,3,0,19.66527777777778,45.16736111111111,3,0,50,41.10041666666667,3,0,80.33472222222223,37.03347222222222,3,0,19.66527777777778,19.748958333333334,3,0,50,14.665277777777776,3,0,80.33472222222223,37.03347222222222,6,0,19.66527777777778,45.16736111111111,1,50,41.10041666666667,6,0,50,41.10041666666667,1,80.33472222222223,37.03347222222222,6,0,19.66527777777778,19.748958333333334,1,50,14.665277777777776,6,0,50,14.665277777777776,1,80.33472222222223,37.03347222222222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "lineStackedPercent": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,66,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333332,59.40166666666667,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,47.200833333333335,1,95.50208333333332,47.200833333333335,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,28.899583333333343,1,95.50208333333332,28.899583333333343,0,4.497916666666668,22.79916666666667,1,95.50208333333332,22.79916666666667,0,4.497916666666668,16.698750000000004,1,95.50208333333332,16.698750000000004,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,306,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333332,59.40166666666667,0,4.497916666666668,60.621750000000006,1,95.50208333333332,60.621750000000006,0,4.497916666666668,61.841833333333334,1,95.50208333333332,61.841833333333334,0,4.497916666666668,63.06191666666667,1,95.50208333333332,63.06191666666667,0,4.497916666666668,64.28200000000001,1,95.50208333333332,64.28200000000001,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,54.52133333333333,1,95.50208333333332,54.52133333333333,0,4.497916666666668,55.74141666666666,1,95.50208333333332,55.74141666666666,0,4.497916666666668,56.961499999999994,1,95.50208333333332,56.961499999999994,0,4.497916666666668,58.18158333333333,1,95.50208333333332,58.18158333333333,0,4.497916666666668,47.200833333333335,1,95.50208333333332,47.200833333333335,0,4.497916666666668,48.42091666666668,1,95.50208333333332,48.42091666666668,0,4.497916666666668,49.641000000000005,1,95.50208333333332,49.641000000000005,0,4.497916666666668,50.86108333333334,1,95.50208333333332,50.86108333333334,0,4.497916666666668,52.081166666666675,1,95.50208333333332,52.081166666666675,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,42.3205,1,95.50208333333332,42.3205,0,4.497916666666668,43.54058333333333,1,95.50208333333332,43.54058333333333,0,4.497916666666668,44.760666666666665,1,95.50208333333332,44.760666666666665,0,4.497916666666668,45.98075,1,95.50208333333332,45.98075,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,36.220083333333335,1,95.50208333333332,36.220083333333335,0,4.497916666666668,37.44016666666667,1,95.50208333333332,37.44016666666667,0,4.497916666666668,38.660250000000005,1,95.50208333333332,38.660250000000005,0,4.497916666666668,39.88033333333334,1,95.50208333333332,39.88033333333334,0,4.497916666666668,28.899583333333343,1,95.50208333333332,28.899583333333343,0,4.497916666666668,30.119666666666674,1,95.50208333333332,30.119666666666674,0,4.497916666666668,31.339750000000006,1,95.50208333333332,31.339750000000006,0,4.497916666666668,32.55983333333334,1,95.50208333333332,32.55983333333334,0,4.497916666666668,33.77991666666667,1,95.50208333333332,33.77991666666667,0,4.497916666666668,22.79916666666667,1,95.50208333333332,22.79916666666667,0,4.497916666666668,24.019250000000007,1,95.50208333333332,24.019250000000007,0,4.497916666666668,25.239333333333338,1,95.50208333333332,25.239333333333338,0,4.497916666666668,26.459416666666673,1,95.50208333333332,26.459416666666673,0,4.497916666666668,27.679500000000004,1,95.50208333333332,27.679500000000004,0,4.497916666666668,16.698750000000004,1,95.50208333333332,16.698750000000004,0,4.497916666666668,17.918833333333342,1,95.50208333333332,17.918833333333342,0,4.497916666666668,19.138916666666674,1,95.50208333333332,19.138916666666674,0,4.497916666666668,20.359000000000005,1,95.50208333333332,20.359000000000005,0,4.497916666666668,21.579083333333337,1,95.50208333333332,21.579083333333337,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,11.818416666666671,1,95.50208333333332,11.818416666666671,0,4.497916666666668,13.038500000000004,1,95.50208333333332,13.038500000000004,0,4.497916666666668,14.25858333333334,1,95.50208333333332,14.25858333333334,0,4.497916666666668,15.47866666666667,1,95.50208333333332,15.47866666666667,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,5.7180000000000035,1,95.50208333333332,5.7180000000000035,0,4.497916666666668,6.938083333333337,1,95.50208333333332,6.938083333333337,0,4.497916666666668,8.158166666666668,1,95.50208333333332,8.158166666666668,0,4.497916666666668,9.378250000000003,1,95.50208333333332,9.378250000000003,3,0,19.66527777777778,38.38912037037037,3,0,50,36.220083333333335,3,0,80.33472222222223,4.4979166666666694,3,0,19.66527777777778,4.4979166666666694,3,0,50,4.4979166666666694,3,0,80.33472222222223,4.4979166666666694,6,0,19.66527777777778,38.38912037037037,1,50,36.220083333333335,6,0,50,36.220083333333335,1,80.33472222222223,4.4979166666666694,6,0,19.66527777777778,4.4979166666666694,1,50,4.4979166666666694,6,0,50,4.4979166666666694,1,80.33472222222223,4.4979166666666694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "line3D": "15,0,21.013480335383846,45.12844427176431,1,95.55121028230624,45.12844427176431,1,95.55121028230624,11.723091156440482,1,21.013480335383846,11.723091156440482,0,21.013480335383846,45.12844427176431,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,63,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,279,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,0,4.233333333333333,52.56571240143195,1,21.22893671974426,39.70452300878394,1,95.76666666666668,39.70452300878394,0,4.233333333333333,53.679224171942735,1,21.22893671974426,40.818034779294734,1,95.76666666666668,40.818034779294734,0,4.233333333333333,54.79273594245353,1,21.22893671974426,41.93154654980553,1,95.76666666666668,41.93154654980553,0,4.233333333333333,55.90624771296434,1,21.22893671974426,43.045058320316315,1,95.76666666666668,43.045058320316315,0,4.233333333333333,57.01975948347513,1,21.22893671974426,44.15857009082711,1,95.76666666666668,44.15857009082711,0,4.233333333333333,46.99815354887799,1,21.22893671974426,34.13696415622997,1,95.76666666666668,34.13696415622997,0,4.233333333333333,48.11166531938878,1,21.22893671974426,35.25047592674076,1,95.76666666666668,35.25047592674076,0,4.233333333333333,49.22517708989957,1,21.22893671974426,36.36398769725155,1,95.76666666666668,36.36398769725155,0,4.233333333333333,50.33868886041036,1,21.22893671974426,37.47749946776236,1,95.76666666666668,37.47749946776236,0,4.233333333333333,51.452200630921155,1,21.22893671974426,38.59101123827314,1,95.76666666666668,38.59101123827314,0,4.233333333333333,41.430594696324015,1,21.22893671974426,28.569405303675996,1,95.76666666666668,28.569405303675996,0,4.233333333333333,42.544106466834805,1,21.22893671974426,29.68291707418679,1,95.76666666666668,29.68291707418679,0,4.233333333333333,43.6576182373456,1,21.22893671974426,30.796428844697584,1,95.76666666666668,30.796428844697584,0,4.233333333333333,44.771130007856385,1,21.22893671974426,31.909940615208377,1,95.76666666666668,31.909940615208377,0,4.233333333333333,45.884641778367175,1,21.22893671974426,33.02345238571917,1,95.76666666666668,33.02345238571917,0,4.233333333333333,35.86303584377004,1,21.22893671974426,23.00184645112203,1,95.76666666666668,23.00184645112203,0,4.233333333333333,36.97654761428084,1,21.22893671974426,24.11535822163282,1,95.76666666666668,24.11535822163282,0,4.233333333333333,38.09005938479163,1,21.22893671974426,25.22886999214362,1,95.76666666666668,25.22886999214362,0,4.233333333333333,39.203571155302434,1,21.22893671974426,26.34238176265441,1,95.76666666666668,26.34238176265441,0,4.233333333333333,40.31708292581322,1,21.22893671974426,27.455893533165206,1,95.76666666666668,27.455893533165206,0,4.233333333333333,30.295476991216074,1,21.22893671974426,17.434287598568062,1,95.76666666666668,17.434287598568062,0,4.233333333333333,31.408988761726867,1,21.22893671974426,18.54779936907886,1,95.76666666666668,18.54779936907886,0,4.233333333333333,32.522500532237665,1,21.22893671974426,19.66131113958965,1,95.76666666666668,19.66131113958965,0,4.233333333333333,33.63601230274846,1,21.22893671974426,20.77482291010045,1,95.76666666666668,20.77482291010045,0,4.233333333333333,34.74952407325926,1,21.22893671974426,21.888334680611234,1,95.76666666666668,21.888334680611234,0,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,0,4.233333333333333,25.841429909172902,1,21.22893671974426,12.980240516524882,1,95.76666666666668,12.980240516524882,0,4.233333333333333,26.954941679683692,1,21.22893671974426,14.093752287035672,1,95.76666666666668,14.093752287035672,0,4.233333333333333,28.06845345019448,1,21.22893671974426,15.20726405754647,1,95.76666666666668,15.20726405754647,0,4.233333333333333,29.18196522070528,1,21.22893671974426,16.320775828057265,1,95.76666666666668,16.320775828057265,15,0,4.233333333333333,58.13327125398591,1,21.22893671974426,45.27208186133791,1,95.76666666666668,45.27208186133791,1,78.77106328025575,58.13327125398591,1,4.233333333333333,58.13327125398591,15,0,4.233333333333333,58.13327125398591,1,4.233333333333333,24.72791813866211,1,21.22893671974426,11.866728746014084,1,21.22893671974426,45.27208186133791,1,4.233333333333333,58.13327125398591,15,0,21.22893671974426,45.27208186133791,1,21.22893671974426,11.866728746014084,1,95.76666666666668,11.866728746014084,1,95.76666666666668,45.27208186133791,1,21.22893671974426,45.27208186133791,3,0,19.488888888888887,24.744444444444447,3,0,49.99999999999999,16.540000000000006,3,0,80.5111111111111,8.335555555555558,3,0,19.488888888888887,14.488888888888896,3,0,49.99999999999999,12.437777777777784,15,0,19.20562883244871,33.862038640086034,1,19.20562883244871,34.00567622965965,1,22.604749509730894,31.43343835113004,1,22.604749509730894,31.28980076155643,1,19.20562883244871,33.862038640086034,15,0,19.20562883244871,33.862038640086034,1,44.05153881475618,29.40799155804286,1,47.45065949203835,26.835753679513257,1,22.604749509730894,31.28980076155643,1,19.20562883244871,33.862038640086034,15,0,19.20562883244871,33.862038640086034,1,19.20562883244871,34.00567622965965,1,44.05153881475618,29.551629147616467,1,44.05153881475618,29.40799155804286,1,19.20562883244871,33.862038640086034,15,0,22.604749509730894,31.28980076155643,1,22.604749509730894,31.43343835113004,1,47.45065949203835,26.97939126908687,1,47.45065949203835,26.835753679513257,1,22.604749509730894,31.28980076155643,15,0,19.20562883244871,34.00567622965965,1,44.05153881475618,29.551629147616467,1,47.45065949203835,26.97939126908687,1,22.604749509730894,31.43343835113004,1,19.20562883244871,34.00567622965965,15,0,44.05153881475618,29.40799155804286,1,44.05153881475618,29.551629147616467,1,47.45065949203835,26.97939126908687,1,47.45065949203835,26.835753679513257,1,44.05153881475618,29.40799155804286,15,0,44.05153881475618,29.40799155804286,1,44.05153881475618,29.551629147616467,1,47.45065949203835,26.97939126908687,1,47.45065949203835,26.835753679513257,1,44.05153881475618,29.40799155804286,15,0,44.05153881475618,29.40799155804286,1,68.89744879706365,24.953944475999684,1,72.29656947434582,22.38170659747008,1,47.45065949203835,26.835753679513257,1,44.05153881475618,29.40799155804286,15,0,44.05153881475618,29.40799155804286,1,44.05153881475618,29.551629147616467,1,68.89744879706365,25.0975820655733,1,68.89744879706365,24.953944475999684,1,44.05153881475618,29.40799155804286,15,0,47.45065949203835,26.835753679513257,1,47.45065949203835,26.97939126908687,1,72.29656947434582,22.525344187043697,1,72.29656947434582,22.38170659747008,1,47.45065949203835,26.835753679513257,15,0,44.05153881475618,29.551629147616467,1,68.89744879706365,25.0975820655733,1,72.29656947434582,22.525344187043697,1,47.45065949203835,26.97939126908687,1,44.05153881475618,29.551629147616467,15,0,68.89744879706365,24.953944475999684,1,68.89744879706365,25.0975820655733,1,72.29656947434582,22.525344187043697,1,72.29656947434582,22.38170659747008,1,68.89744879706365,24.953944475999684,15,0,27.703430525654174,21.863885091208058,1,27.703430525654174,22.007522680781673,1,31.102551202936358,19.43528480225207,1,31.102551202936358,19.29164721267846,1,27.703430525654174,21.863885091208058,15,0,27.703430525654174,21.863885091208058,1,52.54934050796164,20.750373320697268,1,55.948461185243815,18.178135442167665,1,31.102551202936358,19.29164721267846,1,27.703430525654174,21.863885091208058,15,0,27.703430525654174,21.863885091208058,1,27.703430525654174,22.007522680781673,1,52.54934050796164,20.894010910270875,1,52.54934050796164,20.750373320697268,1,27.703430525654174,21.863885091208058,15,0,31.102551202936358,19.29164721267846,1,31.102551202936358,19.43528480225207,1,55.948461185243815,18.321773031741273,1,55.948461185243815,18.178135442167665,1,31.102551202936358,19.29164721267846,15,0,27.703430525654174,22.007522680781673,1,52.54934050796164,20.894010910270875,1,55.948461185243815,18.321773031741273,1,31.102551202936358,19.43528480225207,1,27.703430525654174,22.007522680781673,15,0,52.54934050796164,20.750373320697268,1,52.54934050796164,20.894010910270875,1,55.948461185243815,18.321773031741273,1,55.948461185243815,18.178135442167665,1,52.54934050796164,20.750373320697268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "pie": "15,0,19.23333333333334,65.2375,1,80.23750000000001,65.2375,1,80.23750000000001,4.233333333333333,1,19.23333333333334,4.233333333333333,1,19.23333333333334,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,16,0,50,35,1,50,4.497916666666668,2,50,4.497916666666668,30.502083333333335,30.502083333333335,-1.5707963267948966,-2.443460952792061,1,50,35,16,0,50,35,1,30.393638763707038,58.36595144105199,2,30.393638763707038,58.36595144105199,30.502083333333335,30.502083333333335,2.2689280275926285,-2.094395102393195,1,50,35,16,0,50,35,1,80.03868814969113,40.296631185878184,2,80.03868814969113,40.296631185878184,30.502083333333335,30.502083333333335,0.1745329251994321,-1.7453292519943293,1,50,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "pie3D": "15,0,3.9687500000000004,65.50208333333333,1,95.50208333333333,65.50208333333333,1,95.50208333333333,3.9687500000000004,1,3.9687500000000004,3.9687500000000004,1,3.9687500000000004,65.50208333333333,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,15,0,4.233333333333333,63.37533333333333,1,4.233333333333333,17.608666666666664,1,95.76666666666668,17.608666666666664,1,95.76666666666668,63.37533333333333,1,4.233333333333333,63.37533333333333,15,0,4.233333333333333,63.37533333333333,1,4.233333333333333,52.39133333333334,1,4.233333333333333,6.624666666666664,1,4.233333333333333,17.608666666666664,1,4.233333333333333,63.37533333333333,15,0,4.233333333333333,17.608666666666664,1,4.233333333333333,6.624666666666664,1,95.76666666666668,6.624666666666664,1,95.76666666666668,17.608666666666664,1,4.233333333333333,17.608666666666664,23,0,4.233333333333333,30.197690176077085,2,4.233333333333333,30.197690176077085,45.766666666666666,22.88333333333333,-3.141592653589793,-0.5373822171631659,1,20.581753730012693,57.33196016396218,2,20.581753730012693,57.33196016396218,45.766666666666666,22.88333333333333,2.6042104364266274,0.5373822171631659,1,4.233333333333333,30.197690176077085,24,0,50,30.19769017607709,1,50,7.314356842743759,1,50,16.91897649058957,1,50,39.802309823922904,0,50,30.19769017607709,1,20.581753730012693,47.72734051611636,1,20.581753730012693,57.33196016396218,1,50,39.802309823922904,16,0,50,30.19769017607709,1,50,7.314356842743759,2,50,7.314356842743759,45.766666666666666,22.88333333333333,-1.5707963267948966,-2.1081785439580627,1,50,30.19769017607709,16,0,50,39.802309823922904,1,50,16.918976490589575,2,50,16.918976490589575,45.766666666666666,22.88333333333333,-1.5707963267948966,-2.1081785439580627,1,50,39.802309823922904,23,0,20.581753730012693,47.72734051611636,2,20.581753730012693,47.72734051611636,45.766666666666666,22.88333333333333,2.6042104364266265,-2.5162743124029157,1,95.0713681628587,43.77595895620124,2,95.0713681628587,43.77595895620124,45.766666666666666,22.88333333333333,0.08793612402371066,2.5162743124029157,1,20.581753730012693,47.72734051611636,24,0,50,30.19769017607709,1,20.581753730012693,47.72734051611636,1,20.581753730012693,57.33196016396218,1,50,39.802309823922904,0,50,30.19769017607709,1,95.0713681628587,34.17133930835542,1,95.0713681628587,43.77595895620124,1,50,39.802309823922904,16,0,50,30.19769017607709,1,20.581753730012693,47.72734051611636,2,20.581753730012693,47.72734051611636,45.766666666666666,22.88333333333333,2.6042104364266265,-2.5162743124029157,1,50,30.19769017607709,16,0,50,39.802309823922904,1,20.581753730012693,57.33196016396218,2,20.581753730012693,57.33196016396218,45.766666666666666,22.88333333333333,2.6042104364266265,-2.5162743124029157,1,50,39.802309823922904,23,0,95.0713681628587,34.17133930835542,2,95.0713681628587,34.17133930835542,45.766666666666666,22.88333333333333,0.08793612402371066,-0.08793612402371132,1,95.76666666666668,39.80230982392292,2,95.76666666666668,39.80230982392292,45.766666666666666,22.88333333333333,-6.432490598706546e-16,0.08793612402371132,1,95.0713681628587,34.17133930835542,23,0,95.76666666666668,30.197690176077103,2,95.76666666666668,30.197690176077103,45.766666666666666,22.88333333333333,2.4492935982947064e-16,-1.5707963267948941,1,50.00000000000006,16.91897649058957,2,50.00000000000006,16.91897649058957,45.766666666666666,22.88333333333333,-1.5707963267948937,1.5707963267948941,1,95.76666666666668,30.197690176077103,24,0,50,30.19769017607709,1,95.0713681628587,34.17133930835542,1,95.0713681628587,43.77595895620124,1,50,39.802309823922904,0,50,30.19769017607709,1,50.00000000000006,7.314356842743759,1,50.00000000000006,16.91897649058957,1,50,39.802309823922904,16,0,50,30.19769017607709,1,95.0713681628587,34.17133930835542,2,95.0713681628587,34.17133930835542,45.766666666666666,22.88333333333333,0.08793612402371066,-1.6587324508186052,1,50,30.19769017607709,16,0,50,39.802309823922904,1,95.0713681628587,43.77595895620124,2,95.0713681628587,43.77595895620124,45.766666666666666,22.88333333333333,0.08793612402371066,-1.6587324508186052,1,50,39.802309823922904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "doughnut": "15,0,19.23333333333334,65.2375,1,80.23750000000001,65.2375,1,80.23750000000001,4.233333333333333,1,19.23333333333334,4.233333333333333,1,19.23333333333334,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,26,0,50,12.123437500000001,1,50,8.310677083333331,2,50,8.310677083333331,26.68932291666667,26.68932291666667,-1.5707963267948966,-2.443460952792061,1,35.29522907278028,52.52446358078899,2,35.29522907278028,52.52446358078899,22.876562500000002,22.876562500000002,2.2689280275926285,2.443460952792061,0,50,35,26,0,35.29522907278028,52.52446358078899,1,32.84443391824365,55.44520751092049,2,32.84443391824365,55.44520751092049,26.68932291666667,26.68932291666667,2.2689280275926285,-2.094395102393195,1,72.52901611226837,38.972473389408634,2,72.52901611226837,38.972473389408634,22.876562500000002,22.876562500000002,0.1745329251994339,2.094395102393195,0,50,35,26,0,72.52901611226837,38.972473389408634,1,76.28385213097972,39.63455228764341,2,76.28385213097972,39.63455228764341,26.68932291666667,26.68932291666667,0.1745329251994321,-1.7453292519943293,1,50.000000000000014,12.123437500000001,2,50.000000000000014,12.123437500000001,22.876562500000002,22.876562500000002,-1.5707963267948972,1.7453292519943293,0,50,35,26,0,50,8.310677083333331,1,50,4.497916666666668,2,50,4.497916666666668,30.502083333333335,30.502083333333335,-1.5707963267948966,-3.2031925095425335,1,51.6430189028514,61.63870204486288,2,51.6430189028514,61.63870204486288,26.68932291666667,26.68932291666667,1.509196470842156,3.2031925095425335,0,50,35,26,0,51.6430189028514,61.63870204486288,1,51.877735888973035,65.44423090841471,2,51.877735888973035,65.44423090841471,30.502083333333335,30.502083333333335,1.509196470842156,-3.079992797637051,1,50.000000000000014,8.310677083333331,2,50.000000000000014,8.310677083333331,26.68932291666667,26.68932291666667,-1.5707963267948954,3.079992797637051,0,50,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "scatter": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333333,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333333,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333333,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333333,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333333,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333333,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333333,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,37.033472222222215,1,95.50208333333333,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333333,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333333,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333333,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333333,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333333,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333333,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333333,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333333,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333333,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333333,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333333,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333333,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333333,12.63180555555556,18,0,19.66527777777778,24.832638888888887,0,18.36416253614209,24.832638888888887,1,19.66527777777778,23.5315236472532,1,20.96639301941347,24.832638888888887,1,19.66527777777778,26.133754130524576,1,18.36416253614209,24.832638888888887,18,0,50,16.698749999999997,0,48.698884758364315,16.698749999999997,1,50,15.397634758364308,1,51.30111524163569,16.698749999999997,1,50,17.999865241635685,1,48.698884758364315,16.698749999999997,18,0,80.33472222222224,8.56486111111111,0,79.03360698058655,8.56486111111111,1,80.33472222222224,7.263745869475423,1,81.63583746385791,8.56486111111111,1,80.33472222222224,9.8659763527468,1,79.03360698058655,8.56486111111111,18,0,19.66527777777778,14.665277777777776,0,18.36416253614209,15.966393019413465,1,18.36416253614209,13.364162536142087,1,20.96639301941347,13.364162536142087,1,20.96639301941347,15.966393019413465,1,18.36416253614209,15.966393019413465,18,0,50,12.631805555555554,0,48.698884758364315,13.93292079719124,1,48.698884758364315,11.330690313919867,1,51.30111524163569,11.330690313919867,1,51.30111524163569,13.93292079719124,1,48.698884758364315,13.93292079719124,36,0,19.66527777777778,24.832638888888887,1,19.66527777777778,24.832638888888887,1,22.69875000001104,24.019249999999992,1,25.732222222244296,23.205861111111105,1,28.765694444443064,22.392472222222228,1,31.79916666666943,21.579083333333326,1,34.83263888888889,20.765694444444446,1,37.866111111115245,19.952305555555547,1,40.89958333334162,19.138916666666667,1,43.93305555556107,18.325527777777776,1,46.966527777780534,17.512138888888888,1,50,16.698749999999997,36,0,50,16.698749999999997,1,50,16.698749999999997,1,53.033472222233264,15.885361111111104,1,56.066944444466515,15.07197222222221,1,59.10041666665839,14.258583333333338,1,62.13388888889854,13.445194444444441,1,65.1673611111111,12.631805555555554,1,68.20083333334436,11.818416666666653,1,71.23430555555004,11.005027777777777,1,74.2677777777833,10.191638888888889,1,77.30125000000277,9.378250000000001,1,80.33472222222224,8.56486111111111,36,0,19.66527777777778,14.665277777777776,1,19.66527777777778,14.665277777777776,1,22.69875000001104,14.461930555555542,1,25.732222222244296,14.258583333333315,1,28.765694444443064,14.05523611111111,1,31.79916666666943,13.851888888888881,1,34.83263888888889,13.648541666666663,1,37.866111111115245,13.445194444444441,1,40.89958333334162,13.241847222222221,1,43.93305555556107,13.038499999999999,1,46.966527777780534,12.835152777777775,1,50,12.631805555555554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "stock": "15,0,4.233333333333333,65.2375,1,95.2375,65.2375,1,95.2375,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333332,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333332,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333332,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333332,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333332,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333332,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333332,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333332,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333332,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333332,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333332,53.301249999999996,0,4.497916666666668,35,1,95.50208333333332,35,0,4.497916666666668,37.033472222222215,1,95.50208333333332,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333332,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333332,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333332,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333332,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333332,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333332,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333332,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333332,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333332,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333332,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333332,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333332,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333332,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333332,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333332,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333332,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333332,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333332,12.63180555555556,15,0,13.598333333333334,24.832638888888887,1,13.598333333333334,14.665277777777776,1,25.73222222222222,14.665277777777776,1,25.73222222222222,24.832638888888887,1,13.598333333333334,24.832638888888887,15,0,43.93305555555556,16.698749999999997,1,43.93305555555556,12.631805555555554,1,56.066944444444445,12.631805555555554,1,56.066944444444445,16.698749999999997,1,43.93305555555556,16.698749999999997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "area": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333333,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333333,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333333,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333333,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333333,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333333,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333333,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,37.033472222222215,1,95.50208333333333,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333333,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333333,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333333,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333333,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333333,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333333,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333333,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333333,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333333,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333333,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333333,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333333,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333333,12.63180555555556,21,0,4.497916666666668,65.50208333333333,1,4.497916666666668,24.832638888888887,1,50,16.698749999999997,1,95.50208333333333,8.56486111111111,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,24.832638888888887,21,0,4.497916666666668,65.50208333333333,1,4.497916666666668,14.665277777777776,1,50,12.631805555555554,1,95.50208333333333,65.50208333333333,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,14.665277777777776,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "areaStacked": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,42,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,186,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,55.334722222222226,1,95.50208333333333,55.334722222222226,0,4.497916666666668,57.36819444444445,1,95.50208333333333,57.36819444444445,0,4.497916666666668,59.40166666666668,1,95.50208333333333,59.40166666666668,0,4.497916666666668,61.43513888888889,1,95.50208333333333,61.43513888888889,0,4.497916666666668,63.46861111111111,1,95.50208333333333,63.46861111111111,0,4.497916666666668,45.16736111111111,1,95.50208333333333,45.16736111111111,0,4.497916666666668,47.20083333333333,1,95.50208333333333,47.20083333333333,0,4.497916666666668,49.23430555555555,1,95.50208333333333,49.23430555555555,0,4.497916666666668,51.26777777777777,1,95.50208333333333,51.26777777777777,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,37.033472222222215,1,95.50208333333333,37.033472222222215,0,4.497916666666668,39.066944444444445,1,95.50208333333333,39.066944444444445,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,43.13388888888889,1,95.50208333333333,43.13388888888889,0,4.497916666666668,24.832638888888887,1,95.50208333333333,24.832638888888887,0,4.497916666666668,26.866111111111113,1,95.50208333333333,26.866111111111113,0,4.497916666666668,28.899583333333332,1,95.50208333333333,28.899583333333332,0,4.497916666666668,30.933055555555555,1,95.50208333333333,30.933055555555555,0,4.497916666666668,32.96652777777778,1,95.50208333333333,32.96652777777778,0,4.497916666666668,14.665277777777776,1,95.50208333333333,14.665277777777776,0,4.497916666666668,16.698749999999997,1,95.50208333333333,16.698749999999997,0,4.497916666666668,18.73222222222222,1,95.50208333333333,18.73222222222222,0,4.497916666666668,20.765694444444446,1,95.50208333333333,20.765694444444446,0,4.497916666666668,22.79916666666666,1,95.50208333333333,22.79916666666666,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,6.53138888888889,1,95.50208333333333,6.53138888888889,0,4.497916666666668,8.564861111111114,1,95.50208333333333,8.564861111111114,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,12.63180555555556,1,95.50208333333333,12.63180555555556,18,0,4.497916666666668,45.16736111111111,1,50,41.10041666666667,1,95.50208333333333,37.03347222222222,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,45.16736111111111,21,0,4.497916666666668,19.748958333333334,1,50,14.665277777777776,1,95.50208333333333,37.03347222222222,1,95.50208333333333,37.03347222222222,1,50,41.10041666666667,1,4.497916666666668,45.16736111111111,1,4.497916666666668,19.748958333333334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "areaStackedPercent": "15,0,4.233333333333333,65.2375,1,95.23750000000001,65.2375,1,95.23750000000001,4.233333333333336,1,4.233333333333333,4.233333333333336,1,4.233333333333333,65.2375,15,0,0,0,1,0,70,1,100,70,1,100,0,1,0,0,66,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333333,59.40166666666667,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,47.200833333333335,1,95.50208333333333,47.200833333333335,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,28.899583333333343,1,95.50208333333333,28.899583333333343,0,4.497916666666668,22.79916666666667,1,95.50208333333333,22.79916666666667,0,4.497916666666668,16.698750000000004,1,95.50208333333333,16.698750000000004,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,306,0,4.497916666666668,65.50208333333333,1,95.50208333333333,65.50208333333333,0,4.497916666666668,59.40166666666667,1,95.50208333333333,59.40166666666667,0,4.497916666666668,60.621750000000006,1,95.50208333333333,60.621750000000006,0,4.497916666666668,61.841833333333334,1,95.50208333333333,61.841833333333334,0,4.497916666666668,63.06191666666667,1,95.50208333333333,63.06191666666667,0,4.497916666666668,64.28200000000001,1,95.50208333333333,64.28200000000001,0,4.497916666666668,53.301249999999996,1,95.50208333333333,53.301249999999996,0,4.497916666666668,54.52133333333333,1,95.50208333333333,54.52133333333333,0,4.497916666666668,55.74141666666666,1,95.50208333333333,55.74141666666666,0,4.497916666666668,56.961499999999994,1,95.50208333333333,56.961499999999994,0,4.497916666666668,58.18158333333333,1,95.50208333333333,58.18158333333333,0,4.497916666666668,47.200833333333335,1,95.50208333333333,47.200833333333335,0,4.497916666666668,48.42091666666668,1,95.50208333333333,48.42091666666668,0,4.497916666666668,49.641000000000005,1,95.50208333333333,49.641000000000005,0,4.497916666666668,50.86108333333334,1,95.50208333333333,50.86108333333334,0,4.497916666666668,52.081166666666675,1,95.50208333333333,52.081166666666675,0,4.497916666666668,41.10041666666667,1,95.50208333333333,41.10041666666667,0,4.497916666666668,42.3205,1,95.50208333333333,42.3205,0,4.497916666666668,43.54058333333333,1,95.50208333333333,43.54058333333333,0,4.497916666666668,44.760666666666665,1,95.50208333333333,44.760666666666665,0,4.497916666666668,45.98075,1,95.50208333333333,45.98075,0,4.497916666666668,35,1,95.50208333333333,35,0,4.497916666666668,36.220083333333335,1,95.50208333333333,36.220083333333335,0,4.497916666666668,37.44016666666667,1,95.50208333333333,37.44016666666667,0,4.497916666666668,38.660250000000005,1,95.50208333333333,38.660250000000005,0,4.497916666666668,39.88033333333334,1,95.50208333333333,39.88033333333334,0,4.497916666666668,28.899583333333343,1,95.50208333333333,28.899583333333343,0,4.497916666666668,30.119666666666674,1,95.50208333333333,30.119666666666674,0,4.497916666666668,31.339750000000006,1,95.50208333333333,31.339750000000006,0,4.497916666666668,32.55983333333334,1,95.50208333333333,32.55983333333334,0,4.497916666666668,33.77991666666667,1,95.50208333333333,33.77991666666667,0,4.497916666666668,22.79916666666667,1,95.50208333333333,22.79916666666667,0,4.497916666666668,24.019250000000007,1,95.50208333333333,24.019250000000007,0,4.497916666666668,25.239333333333338,1,95.50208333333333,25.239333333333338,0,4.497916666666668,26.459416666666673,1,95.50208333333333,26.459416666666673,0,4.497916666666668,27.679500000000004,1,95.50208333333333,27.679500000000004,0,4.497916666666668,16.698750000000004,1,95.50208333333333,16.698750000000004,0,4.497916666666668,17.918833333333342,1,95.50208333333333,17.918833333333342,0,4.497916666666668,19.138916666666674,1,95.50208333333333,19.138916666666674,0,4.497916666666668,20.359000000000005,1,95.50208333333333,20.359000000000005,0,4.497916666666668,21.579083333333337,1,95.50208333333333,21.579083333333337,0,4.497916666666668,10.598333333333336,1,95.50208333333333,10.598333333333336,0,4.497916666666668,11.818416666666671,1,95.50208333333333,11.818416666666671,0,4.497916666666668,13.038500000000004,1,95.50208333333333,13.038500000000004,0,4.497916666666668,14.25858333333334,1,95.50208333333333,14.25858333333334,0,4.497916666666668,15.47866666666667,1,95.50208333333333,15.47866666666667,0,4.497916666666668,4.4979166666666694,1,95.50208333333333,4.4979166666666694,0,4.497916666666668,5.7180000000000035,1,95.50208333333333,5.7180000000000035,0,4.497916666666668,6.938083333333337,1,95.50208333333333,6.938083333333337,0,4.497916666666668,8.158166666666668,1,95.50208333333333,8.158166666666668,0,4.497916666666668,9.378250000000003,1,95.50208333333333,9.378250000000003,18,0,4.497916666666668,38.38912037037037,1,50,36.220083333333335,1,95.50208333333333,4.4979166666666694,1,95.50208333333333,65.50208333333333,1,4.497916666666668,65.50208333333333,1,4.497916666666668,38.38912037037037,21,0,4.497916666666668,4.4979166666666694,1,50,4.4979166666666694,1,95.50208333333333,4.4979166666666694,1,95.50208333333333,4.4979166666666694,1,50,36.220083333333335,1,4.497916666666668,38.38912037037037,1,4.497916666666668,4.4979166666666694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" }; function testChartBaseTypes(doGeneratePaths) { QUnit.test("Test: Base Charts Draw ", function (assert) { let testData = [["", "2014", "2015", "2016"], ["Projected Revenue", "200", "240", "280"], ["Estimated Costs", "250", "260"]]; let testDataRange = new Asc.Range(0, 0, testData[0].length - 1, testData.length - 1); fillData(wsData, testData, testDataRange); let oWorksheet; oWorksheet = api.GetActiveSheet(); let calcChart = function (_type) { let oChart = oWorksheet.AddChart("'Data'!$A$1:$D$3", true, _type, 2, 100 * 36000, 70 * 36000, 0, 2 * 36000, 7, 3 * 36000); oChart.SetTitle(""); oChart.SetLegendPos("none"); for (let j = 0; j < oChart.Chart.chart.plotArea.charts[0].axId.length; j++) { oChart.Chart.chart.plotArea.charts[0].axId[j].bDelete = true; } oChart.Chart.recalculate(); return oChart.Chart.pathMemory.ArrPathCommand.toString(); }; let i; if (doGeneratePaths) { let mapPaths = {}; for (i = 0; i < gTypes.length; i++) { oChart = oWorksheet.AddChart("'Data'!$A$1:$D$3", true, gTypes[i], 2, 100 * 36000, 70 * 36000, 0, 2 * 36000, 7, 3 * 36000); oChart.SetTitle(""); oChart.SetLegendPos("none"); for (let j = 0; j < oChart.Chart.chart.plotArea.charts[0].axId.length; j++) { oChart.Chart.chart.plotArea.charts[0].axId[j].bDelete = true; } oChart.Chart.recalculate(); mapPaths[gTypes[i]] = calcChart(gTypes[i]); } return mapPaths; } else { for (i in gMapPaths) { assert.strictEqual(calcChart(i), gMapPaths[i], i); } } }); }; const isEqual = function (a, b) { const first = a + '' const second = b + '' const firstLength = first.indexOf('.') == -1 ? 0 : first.length - (1 + first.indexOf('.')) const secondLength = second.indexOf('.') == -1 ? 0 : second.length - (1 + second.indexOf('.')) const min = Math.min(firstLength, secondLength) if (firstLength != min) { const num = Math.pow(10, min) a = Math.round((a + Number.EPSILON) * num) / num } if (secondLength != min) { const num = Math.pow(10, min) b = Math.round((b + Number.EPSILON) * num) / num } //Math.round((num + Number.EPSILON) * 100) / 100 const tollerance = 0.005; return Math.abs(a - b) < tollerance; } function testLinearTrendLineEquation() { QUnit.test("Test: Linear trendlines equation", function (assert) { const trendline = AscFormat.CTrendline const order = 2; let size = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let m = 1; let b = 2.6667; let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 2; catVals = [1, 2]; valVals = [5, 15]; m = 10; b = -5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-1, -2, -3, -4, -5, -6]; m = -1; b = 0; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-3, 6, -9, 12, -15, 18]; m = 1.8; b = -4.8; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; m = 2.0857; b = -0.4667; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, -3, 6, 8, 9]; m = 2.0571; b = -3.5333; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 1, 0, 2, 0, 3]; m = 0.4; b = -0.4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-9, -7, -6, -5, -4, -2]; m = 1.2857; b = -10; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9]; m = 0.1571; b = -0.1; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9]; m = 0.2886; b = -0.96; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 1, 4, 3, 6, 5]; m = 0.8286; b = 0.6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; m = 15.2; b = -19; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [4, -6, 3, -7, 8, 10]; m = 1.7714; b = -4.2; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; m = 75838; b = -172840; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; m = 0.2857; b = 1.3333; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order) assert.ok(isEqual(results[0], m), "LinearResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LinearResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); }) } function testLogarithmicTrendLineEquation() { QUnit.test("Test: Logarithmic trendlines equation", function (assert) { const trendline = AscFormat.CTrendline; const order = 2; let size = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let m = 2.5453; let b = 3.3757; let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 2; catVals = [1, 2]; valVals = [5, 15]; m = 14.427; b = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-1, -2, -3, -4, -5, -6]; m = -2.732; b = -0.5044; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-3, 6, -9, 12, -15, 18]; m = 4.1668; b = -3.0691; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; m = 5.6474; b = 0.6407; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, -3, 6, 8, 9]; m = 5.1404; b = -1.97; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 1, 0, 2, 0, 3]; m = 1.0302; b = -0.1296; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-9, -7, -6, -5, -4, -2]; m = 3.5479; b = -9.3905; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9]; m = 0.4096; b = 0.0008; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9]; m = 0.735; b = -0.756; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 1, 4, 3, 6, 5]; m = 2.202; b = 1.0854; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; m = 29.565; b = -4.4898; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [4, -6, 3, -7, 8, 10]; m = 3.2191; b = -1.5299; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; m = 170659; b = -94542; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; m = 1.3313; b = 0.8735; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order) assert.ok(isEqual(results[0], m), "LogarithmicResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "LogarithmicResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); }) } function testPowerTrendLineEquation() { QUnit.test("Test: Power trendlines equation", function (assert) { const trendline = AscFormat.CTrendline; const order = 2; let size = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let m = 0.4178; let b = 3.6391; let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 2; catVals = [1, 2]; valVals = [5, 15]; m = 1.585; b = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; m = 1.0529; b = 1.799; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9]; m = 1.1616; b = 0.0984; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 1, 4, 3, 6, 5]; m = 0.7283; b = 1.347; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; m = 2.2106; b = 1.8367; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; m = 6.2903; b = 1.5974; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POWER, order) assert.ok(isEqual(results[0], m), "PowerResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "PowerResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 0, 50000, 500000]; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.strictEqual(results, undefined, "PowerResults should be undefined, due to the zero value in calculations, got:" + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, -1, 50000, 500000]; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.strictEqual(results, undefined, "PowerResults should be undefined, due to the negative value in calculations, got:" + results); }) } function testExponentialTrendLineEquation() { QUnit.test("Test: Exponential trendlines equation", function (assert) { const trendline = AscFormat.CTrendline const order = 2; let size = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let m = 0.1647; let b = 3.2329; let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 2; catVals = [1, 2]; valVals = [5, 15]; m = 1.0986; b = 1.6667; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; m = 0.3674; b = 1.5776; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9]; m = 0.4127; b = 0.0829; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 1, 4, 3, 6, 5]; m = 0.2763; b = 1.1384; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; m = 1.035; b = 0.8; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; m = 2.3026; b = 0.5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.ok(isEqual(results[0], m), "ExponentialResults are not equal to the expected results: expected slope:" + m + ', got:' + results[0]); assert.ok(isEqual(results[1], b), "ExponentialResults are not equal to the expected results: expected b:" + b + ', got:' + results[1]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 0, 50000, 500000]; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.strictEqual(results, undefined, "ExponentialResults should be undefined, due to the zero value in calculations, got:" + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, -1, 50000, 500000]; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order) assert.strictEqual(results, undefined, "ExponentialResults should be undefined, due to the negative value in calculations, got:" + results); }) } function testPolynomialTrendLineEquation() { QUnit.test("Test: Polynomial trendlines equation", function (assert) { // the equation is in the form of y = letiables[0] + x * letiables1 + x^2 * letiables2 ... const trendline = AscFormat.CTrendline let size = 2; let catVals = [1, 2]; let valVals = [5, 15]; let letiables = [10, -5]; let order = 2; let results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, 6, 3, 7, 8, 9, 11]; letiables = [0.1667, -0.1905, 4.2857]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-1, -2, -3, -4, -5, -6, -7]; letiables = [0, -1, 0]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-3, 6, -9, 12, -15, 18, -21]; letiables = [-1.1429, 7.8571, -10.286]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 3, 6, 8, 10, 12, 14]; letiables = [0, 2.0714, -0.4286]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 2, -3, 6, 8, 9, 15]; letiables = [0.4286, -0.9286, 0.4286]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 1, 0, 2, 0, 3, 0]; letiables = [-0.0952, 0.9048, -0.8571]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-9, -7, -6, -5, -4, -2, -1]; letiables = [9e-16, 1.2857, -10]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1]; letiables = [0.0095, 0.081, 0.0143]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1]; letiables = [0.0202, 0.1202, -0.7]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 1, 4, 3, 6, 5, 7]; letiables = [0.0357, 0.6071, 0.8571]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; letiables = [7, -19.8, 16]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, -6, 3, -7, 8, 10, -12]; letiables = [-0.5357, 3.8929, -4.8571]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; letiables = [43357, -227659, 231822]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; letiables = [-0.625, 4.6607, -4.5]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, 6, 3, 7, 8, 9, 11]; letiables = [-0.0278, 0.5, -1.3294, 5.2857]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-1, -2, -3, -4, -5, -6, -7]; letiables = [0, 0, -1, 5e-12]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-3, 6, -9, 12, -15, 18, -21]; letiables = [-0.6667, 6.8571, -19.476, 13.714]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 3, 6, 8, 10, 12, 14]; letiables = [-0.0278, 0.3333, 0.9325, 0.5714]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 2, -3, 6, 8, 9, 15]; letiables = [-0.0833, 1.4286, -4.3452, 3.4286]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 1, 0, 2, 0, 3, 0]; letiables = [-0.0556, 0.5714, -1.373, 1.1429]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-9, -7, -6, -5, -4, -2, -1]; letiables = [0.0278, -0.3333, 2.4246, -11]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1]; letiables = [-0.0056, 0.0762, -0.1468, 0.2143]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1]; letiables = [-0.0167, 0.2202, -0.5631, -0.1]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 1, 4, 3, 6, 5, 7]; letiables = [-0.0278, 0.369, -0.5317, 1.8571]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; letiables = [4, -23, 47, -26]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, -6, 3, -7, 8, 10, -12]; letiables = [-1.0278, 11.798, -38.246, 32.143]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; letiables = [19744, -163953, 398218, -265720]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; letiables = [-0.2315, 1.8056, -2.6772, 1.3333]; order = 4; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, 6, 3, 7, 8, 9, 11]; letiables = [-0.0265, 0.3965, -1.7917, 3.4282, 2.2857]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-1, -2, -3, -4, -5, -6, -7]; letiables = [0, 5e-13, 0, -1, 6e-11]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-3, 6, -9, 12, -15, 18, -21]; letiables = [-0.7273, 10.97, -56, 111.02, -68.571]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 3, 6, 8, 10, 12, 14]; letiables = [0.0265, -0.452, 2.625, -3.825, 3.5714]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 2, -3, 6, 8, 9, 15]; letiables = [0.0341, -0.6288, 4.375, -10.462, 7.2857]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 1, 0, 2, 0, 3, 0]; letiables = [-0.0606, 0.9141, -4.6667, 9.5014, -5.7143]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-9, -7, -6, -5, -4, -2, -1]; letiables = [-0.0265, 0.452, -2.625, 7.1822, -14]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1]; letiables = [-0.0045, 0.0672, -0.3167, 0.6688, -0.3]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1]; letiables = [ -0.0083, 0.1167, -0.5, 0.9321, -1.0429]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 1, 4, 3, 6, 5, 7]; letiables = [0.0492, -0.8157, 4.625, -9.3672, 7.4286]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, -6, 3, -7, 8, 10, -12]; letiables = [-0.3144, 4.0025, -15.375, 18.165, -3.4286]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; letiables = [7517.8, -85506, 337593, -533991, 275562]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; letiables = [-0.1458, 1.8102, -7.9236, 15.406, -9.1667]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, 6, 3, 7, 8, 9, 11]; letiables = [0.0833, -1.6932, 12.758, -43.458, 65.508, -29.143]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-1, -2, -3, -4, -5, -6, -7]; letiables = [-6e-14, 0, 7e-12, -3e-11, -1, 4e-9]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-3, 6, -9, 12, -15, 18, -21]; letiables = [-0.4, 7.2727, -48.364, 144, -186.96, 82.286]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 3, 6, 8, 10, 12, 14]; letiables = [-0.0167, 0.3598, -2.9242, 10.958, -16.241, 9.8571]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 2, -3, 6, 8, 9, 15]; letiables = [0.175, -3.4659, 25.33, -83.125, 119.9, -58.714]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 1, 0, 2, 0, 3, 0]; letiables = [-0.0333, 0.6061, -4.0303,12, -15.33, 6.8571]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-9, -7, -6, -5, -4, -2, -1]; letiables = [-0.0083, 0.1402, -0.7841, 1.5417, 0.9742, -10.857]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1]; letiables = [0.0042, -0.0879, 0.6852, -2.4, 3.7727, -1.8714]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1]; letiables = [0.0013, -0.0333, 0.3021, -1.125, 1.8633, -1.5143]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 1, 4, 3, 6, 5, 7]; letiables = [-0.0042, 0.1326, -1.4337, 6.7083, -12.471, 9]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, -6, 3, -7, 8, 10, -12]; letiables = [-0.2292, 4.2689, -29.991, 99.208, -152.55, 83]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; letiables = [2460.4, -35539, 196071, -509186, 611919, -265720]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; letiables = [-0.0417, 0.5833, -2.9583, 6.4167, -4, -1e-8]; order = 6; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, 6, 3, 7, 8, 9, 11]; letiables = [-0.0694, 1.75, -17.444, 87, -224.99, 279.75, -122]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-1, -2, -3, -4, -5, -6, -7]; letiables = [0, -3e-11, -8e-10, 2e-9, 2e-8, -1, -1e-6]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-3, 6, -9, 12, -15, 18, -21]; letiables = [-1.0667, 25.2, -234.67, 1092, -2644.3, 3103.8, -1344]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 3, 6, 8, 10, 12, 14]; letiables = [0.0083, -0.2167, 2.25, -11.833, 32.742, -41.95, 21]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 2, -3, 6, 8, 9, 15]; letiables = [-0.1333, 3.375, -33.708, 167.88, -431.66, 531.25, -237]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0, 1, 0, 2, 0, 3, 0]; letiables = [-0.0889, 2.1, -19.556, 91, -220.36, 258.9, -112]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-9, -7, -6, -5, -4, -2, -1]; letiables = [-0.0083, 0.1917, -1.75, 8.125, -20.242, 26.683, -22]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1]; letiables = [-0.0036, 0.0908, -0.9069, 4.5458, -11.839, 14.913, -6.7]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9, 1]; letiables = [0.0076, -0.1821, 1.6993, -7.8646, 18.843, -21.703, 8.7]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [2, 1, 4, 3, 6, 5, 7]; letiables = [0.0875, -2.1042, 19.979, -94.979, 235.43, -282.42, 126]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [4, -6, 3, -7, 8, 10, -12]; letiables = [0.3792, -9.3292, 90.271, -435.35, 1090.4, -1322.3, 590]; order = 7; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); assert.ok(isEqual(results[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + results[4]); assert.ok(isEqual(results[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + results[5]); assert.ok(isEqual(results[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + results[6]); size = 2; catVals = [1, 2]; valVals = [5, 15]; letiables = [10, -5]; order = 3; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; letiables = [-26, 47, -23, 4]; letiables = [4, -23, 47, -26]; order = 5; results = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order) assert.ok(isEqual(results[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + results[0]); assert.ok(isEqual(results[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + results[1]); assert.ok(isEqual(results[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + results[2]); assert.ok(isEqual(results[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + results[3]); }) } const areSameStrings = function (result, check) { for(let i=0; i< result.length; i++){ if(result[i].lblName !== check[i].lblName){ return false } if(result[i].val !== check[i].val){ return false } } return true } const areSame = function (result, check){ for(let i=0; i< result.length; i++){ if(!isEqual(result[i], check[i])){ return false } } return true } function testMovingAverageTrendLineResuts(){ QUnit.test("Test: MovingAverage trendlines results", function (assert) { const trendline = AscFormat.CTrendline; const order = 2; let ptCount = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let catValResults = [2, 3, 4, 5, 6]; let valValResults = [5, 4.5, 5, 7.5, 8.5]; let period = 2; let results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 2; catVals = [1, 2]; valVals = [5, 15]; catValResults = []; valValResults = []; period = 3; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-1, -2, -3, -4, -5, -6]; catValResults = [4, 5, 6]; valValResults = [-2.5, -3.5, -4.5]; period = 4; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-3, 6, -9, 12, -15, 18]; catValResults = [5, 6]; valValResults = [-1.8, 2.4]; period = 5; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; catValResults = []; valValResults = []; period = 6; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, -3, 6, 8, 9]; catValResults = [2, 3, 4, 5, 6]; valValResults = [1, -0.5, 1.5, 7, 8.5]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 1, 0, 2, 0, 3]; catValResults = [3, 4, 5, 6]; valValResults = [0.333333, 1, 0.666667, 1.666667]; period = 3; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-9, -7, -6, -5, -4, -2]; catValResults = [4, 5, 6]; valValResults = [-6.75, -5.5, -4.25]; period = 4; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9]; catValResults = [5, 6]; valValResults = [0.36, 0.52]; period = 5; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9]; catValResults = [2, 3, 4, 5, 6]; valValResults = [-0.45, -0.3, -0.15, 0.25, 0.75]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 1, 4, 3, 6, 5]; catValResults = [3, 4, 5, 6]; valValResults = [2.333333, 2.666667, 4.333333, 4.666667]; period = 3; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; catValResults = [3, 4]; valValResults = [8.666667, 24.666667]; period = 3; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [4, -6, 3, -7, 8, 10]; catValResults = [4, 5, 6]; valValResults = [-1.5, -0.5, 3.5]; period = 4; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; catValResults = [5, 6]; valValResults = [11111, 111110]; period = 5; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; catValResults = [2, 3, 4, 5, 6]; valValResults = [1, 2.5, 3.5, 4.5, 2.5]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 6; catVals = [1, 2, 6]; valVals = [4, 6, 10]; catValResults = [2, 3, 6]; valValResults = [5, 6, 10]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 3; catVals = [1, 2]; valVals = [4, 6]; catValResults = [2, 3]; valValResults = [5, 6]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 7; catVals = [1, 2, 6, 7]; valVals = [4, 6, 10, 13]; catValResults = [2, 3, 6, 7]; valValResults = [5, 6, 10, 11.5]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 7; catVals = [1, 4, 6, 7]; valVals = [4, 5, 10, 13]; catValResults = [2, 4, 5, 6, 7]; valValResults = [4, 5, 5, 10, 11.5]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 7; catVals = [4, 6, 7]; valVals = [5, 10, 13]; catValResults = [4, 5, 6, 7]; valValResults = [5, 5, 10, 11.5]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 7; catVals = [1, 2, 3, 4, 6]; valVals = [4, 6, 3, 7, 10]; catValResults = [3, 4, 5, 6, 7]; valValResults = [4.333333, 5.333333, 5, 8.5, 10]; period = 3; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 7; catVals = [1, 2, 3, 6]; valVals = [4, 6, 3, 10]; catValResults = [3, 4, 5, 6, 7]; valValResults = [4.333333, 4.5, 3, 10, 10]; period = 3; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); ptCount = 7; catVals = [4, 6]; valVals = [5, 10]; catValResults = [4, 5, 6, 7]; valValResults = [5, 5, 10, 10]; period = 2; results = trendline.prototype._getMAline(catVals, valVals, ptCount, period) assert.ok(areSame(results.catVals, catValResults), "MovingAverage are not equal to the expected x results / expected are: " + catValResults + " got: " + results.catVals ); assert.ok(areSame(results.valVals, valValResults), "MovingAverage are not equal to the expected y results / expected are: " + valValResults + " got: " + results.valVals ); }) } function testDispR(){ QUnit.test("Test: Check R squared", function (assert) { const trendline = AscFormat.CTrendline let size = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let letiables = [1, 2.6667]; let rSquared = 0.6522; let results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 2; catVals = [1, 2]; valVals = [5, 15]; letiables = [10, -5]; rSquared = 1; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-1, -2, -3, -4, -5, -6]; letiables = [-1, 0]; rSquared = 1; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [0, 0.693147181, 1.098612289, 1.386294361, 1.609437912, 1.791759469]; valVals = [-3, 6, -9, 12, -15, 18]; letiables = [4.1668, -3.0691]; rSquared = 0.0473; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LOG); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.693147181, 1.098612289, 1.791759469, 2.079441542, 2.302585093, 2.48490665]; letiables = [0.3674, 1.5776]; rSquared = 0.9291; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, -3, 6, 8, 9]; letiables = [0.4107, -0.8179, 0.3]; rSquared = 0.709; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 1, 0, 2, 0, 3]; letiables = [ 0.1296, -1.254, 3.75973, -2.6667]; rSquared = 0.5397; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-9, -7, -6, -5, -4, -2]; letiables = [3e-14, 0.0926, -0.9722, 4.2209, -12.333]; rSquared = 0.9995; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [0, 0.693147181, 1.098612289, 1.386294361, 1.609437912, 1.791759469]; valVals = [-2.302585093, -1.203972804, -1.609437912, -0.693147181, -0.356674944, -0.105360516]; letiables = [1.1616, 0.0984]; rSquared = 0.9217; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POWER); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9]; letiables = [-0.0217, 0.3625, -2.25, 6.4375, -8.2283, 3.2]; rSquared = 1; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0.693147181, 0, 1.386294361, 1.098612289, 1.791759469, 1.609437912]; letiables = [0.2763, 1.1384]; rSquared = 0.6496; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; letiables = [15.2, -19]; rSquared = 0.8371; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [4, -6, 3, -7, 8, 10]; letiables = [1.7714, -4.2]; rSquared = 0.2197; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [0, 0.693147181, 1.098612289, 1.386294361, 1.609437912, 1.791759469]; valVals = [1.609437912, 3.912023005, 6.214608098, 8.517193191, 10.81977828, 13.12236338]; letiables = [6.2903, 1.5974]; rSquared = 0.9537; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POWER); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; letiables = [0.2857, 1.3333]; rSquared = 0.067; results = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(results, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + results); }) } function testIntercept () { QUnit.test("Test: Interception equation + rSquared", function (assert) { const trendline = AscFormat.CTrendline let size = 6; let catVals = [1, 2, 3, 4, 5, 6]; let valVals = [4, 6, 3, 7, 8, 9]; let letiables = [1.6154, 0]; let rSquared = 0.6522; let order = 2; let intercept = 0; let equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept); let rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 2; catVals = [1, 2]; valVals = [5, 15]; letiables = [7, 0]; rSquared = 0.9; order = 2; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-1, -2, -3, -4, -5, -6]; m = -2.732; b = -0.5044; letiables = [-2.732, -0.5044] rSquared = 0.9363; order = 2; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LOG, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LOG); assert.ok(isEqual(equationResults[0], letiables[0]), "LogarithmicResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "LogarithmicResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquaredResults + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-3, 6, -9, 12, -15, 18]; letiables = [0.7232, -2.8125, 0]; rSquared = 0.1269; order = 3; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; letiables = [0.4726, 1]; rSquared = 0.8936; order = 2; intercept = 1; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP); assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 3, 6, 8, 10, 12]; letiables = [0.3126, 2]; rSquared = 0.9455; order = 2; intercept = 2; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP); assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, -3, 6, 8, 9]; letiables = [-0.0662, 0.9524, -1.7176, 0]; rSquared = 0.719; order = 4; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]); assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 1, 0, 2, 0, 3]; letiables = [0.045, -0.4827, 1.5552, -1.1891, 0]; rSquared = 0.5928; order = 5; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]); assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]); assert.ok(isEqual(equationResults[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + equationResults[4]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-9, -7, -6, -5, -4, -2]; letiables = [-0.0501, 0.8914, -5.857, 17.348, -21.228, 0]; rSquared = 0.9906; order = 6; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]); assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]); assert.ok(isEqual(equationResults[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + equationResults[4]); assert.ok(isEqual(equationResults[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + equationResults[5]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 7; catVals = [1, 2, 3, 4, 5, 6, 7]; valVals = [0.1, 0.3, 0.2, 0.5, 0.7, 0.9, 1]; letiables = [0.001, -0.0219, 0.1707, -0.5973, 0.9099, -0.3486, 0]; rSquared = 0.9822; order = 7; intercept = 0; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_POLY, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, equationResults, AscFormat.TRENDLINE_TYPE_POLY); assert.ok(isEqual(equationResults[0], letiables[0]), "PolynomialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "PolynomialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(equationResults[2], letiables[2]), "PolynomialResults are not equal to the expected results: expected third constant:" + letiables[2] + ', got:' + equationResults[2]); assert.ok(isEqual(equationResults[3], letiables[3]), "PolynomialResults are not equal to the expected results: expected fourth constant:" + letiables[3] + ', got:' + equationResults[3]); assert.ok(isEqual(equationResults[4], letiables[4]), "PolynomialResults are not equal to the expected results: expected fifth constant:" + letiables[4] + ', got:' + equationResults[4]); assert.ok(isEqual(equationResults[5], letiables[5]), "PolynomialResults are not equal to the expected results: expected sixth constant:" + letiables[5] + ', got:' + equationResults[5]); assert.ok(isEqual(equationResults[6], letiables[6]), "PolynomialResults are not equal to the expected results: expected seventh constant:" + letiables[6] + ', got:' + equationResults[6]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [-0.5, -0.4, -0.2, -0.1, 0.6, 0.9]; letiables = [0.5286, -2]; rSquared = 0.9023; order = 2; intercept = -2; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[1]); assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[0]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [2, 1, 4, 3, 6, 5]; letiables = [-1.8864, 12.365] rSquared = 0.6865; order = 2; intercept = 12.365; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept) rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR) assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 4; catVals = [1, 2, 3, 4]; valVals = [2, 8, 16, 50]; letiables = [0.1223, 12.365] rSquared = 0.873; order = 2; intercept = 12.365; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP); assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [4, -6, 3, -7, 8, 10]; letiables = [2.4079, -6.958] rSquared = 0.2197; order = 2; intercept = -6.958; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [5, 50, 500, 5000, 50000, 500000]; letiables = [2.6197, 0.1265] rSquared = 0.9993; order = 2; intercept = 0.1265; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_EXP, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_EXP); assert.ok(isEqual(equationResults[0], letiables[0]), "ExponentialResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "ExponentialResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); size = 6; catVals = [1, 2, 3, 4, 5, 6]; valVals = [0, 2, 3, 4, 5, 0]; letiables = [0.5642, 0.1265] rSquared = 0.067; order = 2; intercept = 0.1265; equationResults = trendline.prototype._getEquationCoefficients(catVals, valVals, AscFormat.TRENDLINE_TYPE_LINEAR, order, intercept); rSquaredResults = trendline.prototype._dispRSquared(catVals, valVals, letiables, AscFormat.TRENDLINE_TYPE_LINEAR); assert.ok(isEqual(equationResults[0], letiables[0]), "LinearResults are not equal to the expected results: expected first constant:" + letiables[0] + ', got:' + equationResults[0]); assert.ok(isEqual(equationResults[1], letiables[1]), "LinearResults are not equal to the expected results: expected second constant:" + letiables[1] + ', got:' + equationResults[1]); assert.ok(isEqual(rSquaredResults, rSquared), "The dispRSquared function works incorrectly: expected rSquared:" + rSquared + ', got:' + rSquaredResults); }) } const _obtainEquationStorage = function (type) { const storage = { [AscFormat.TRENDLINE_TYPE_EXP]: { calcYVal: function (val, supps, isLog) { const res = supps[0] * Math.exp(val * supps[1]); if (isLog && res <= 0){ return NaN; } else { return isLog ? (Math.log(res) / Math.log(isLog)) : res; } }, calcXVal: function (val, supps, isLog) { val = isLog ? Math.pow(isLog, val) : val; return Math.log(val / supps[0]) / supps[1]; }, calcSlope: function (val, supps, isLog) { if (!isLog){ return supps[0] * supps[1] * Math.exp(val * supps[1]); } else { return (Math.log(Math.exp(1)) / Math.log(isLog)) * supps[1]; } } }, [AscFormat.TRENDLINE_TYPE_LINEAR]: { calcYVal: function (val, supps, isLog) { const res = supps[1] * val + supps[0]; if (isLog && res <= 0){ return NaN; } else { return isLog ? (Math.log(res) / Math.log(isLog)) : res; } }, calcXVal: function (val, supps, isLog) { val = isLog ? Math.pow(isLog, val) : val; return (val - supps[0]) / supps[1]; }, calcSlope: function (val, supps, isLog) { if (!isLog){ return supps[1]; } else { return supps[1] / (Math.log(isLog) * (supps[1] * val + supps[0])); } } }, [AscFormat.TRENDLINE_TYPE_LOG]: { calcYVal: function (val, supps, isLog) { if(val > 0){ const res = supps[1] * Math.log(val) + supps[0]; if (isLog && res <= 0){ return NaN; } else { return isLog ? (Math.log(res) / Math.log(isLog)) : res; } } else { return NaN; } }, calcXVal: function (val, supps, isLog) { val = isLog ? Math.pow(isLog, val) : val; return Math.exp((val - supps[0]) / supps[1]); }, calcSlope: function (val, supps, isLog) { if (!isLog){ return supps[1] / val; } else { return supps[1] / (Math.log(isLog) * val * (supps[1] * Math.log(val) + supps[0])); } } }, [AscFormat.TRENDLINE_TYPE_POLY]: { calcYVal: function (val, supps) { let result = 0; let power = 0; for (let i = 0; i < supps.length; i++) { result += (Math.pow(val, power) * supps[i]); power++; } return result; } }, [AscFormat.TRENDLINE_TYPE_POWER]: { calcYVal: function (val, supps, isLog) { const res = supps[0] * Math.pow(val, supps[1]); if (isLog && res <= 0){ return NaN; } else { return isLog ? (Math.log(res) / Math.log(isLog)) : res; } }, calcXVal: function (val, supps, isLog) { val = isLog ? Math.pow(isLog, val) : val; return Math.pow((val / supps[0]), 1 / supps[1]); }, calcSlope: function (val, supps, isLog) { if (!isLog){ return supps[0] * supps[1] * Math.pow(val, supps[1] - 1); } else { return supps[1] / (Math.log(isLog) * val); } } } } return storage.hasOwnProperty(type) ? storage[type] : null; } function testLineBuilderApproximatedBezier () { QUnit.test("Test: Line Builder approximated bezier function", function (assert) { let chartletiables = [0.6000000000000014, 0.8285714285714283] let catMin = 1; let catMax = 6; let valMin = null; let valMax = null; let logBase = null; let type = 1; let lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); let equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); let cutPoint = 1000; let resultStartCatVals = []; let resultsStartValVals = []; let resultsCatVals = [1, 6]; let resultsValVals = [1.4285714285714297, 5.571428571428571]; let lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-19, 15.200000000000003] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 4]; resultsValVals = [-3.799999999999997, 41.80000000000001]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-4.199999999999999, 1.7714285714285714] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 6]; resultsValVals = [-2.428571428571428, 6.428571428571429]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-172840, 75837.85714285713] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 6]; resultsValVals = [-97002.14285714287, 282187.1428571428]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.333333333333334, 0.28571428571428514] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 6]; resultsValVals = [1.619047619047619, 3.047619047619045]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.6000000000000014, 0.8285714285714283] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.4315151945474693, 6]; resultsValVals = [1.4285714285714297, 3.2770831944502925, 5.57142857142857]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-19, 15.200000000000003] catMin = 1; catMax = 4; valMin = 0.1; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1.256578947368421, 1.2814964885317515, 1.2898023355861947, 4]; resultsValVals = [0.10000000000000005, 4.414440786380464, 15.60154450534442, 41.800000000000004]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-4.199999999999999, 1.7714285714285714] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [2.376612903225806, 2.399797564974433, 2.4075257855573082, 6]; resultsValVals = [0.01000000000000001, 0.6076398272462274, 2.3888835256910106, 6.428571428571428]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-172840, 75837.85714285713] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [2.2827937611257103, 2.3006753066997625, 2.304801817216851, 6]; resultsValVals = [282.187142857143, 34483.62358038931, 104531.15364045568, 282187.1428571427]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.333333333333334, 0.28571428571428514] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.9798282656993273, 6]; resultsValVals = [1.619047619047619, 2.2961172530284593, 3.047619047619045]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.0853780304041418, 2.202033537057911] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.150111363073666, 6]; resultsValVals = [1.0853780304041418, 3.6179618232437427, 5.030892471985402]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-4.489845190674558, 29.565068994571178] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 1.8483924814931874, 4]; resultsValVals = [-4.489845190674558, 20.592937059146976, 36.496043242619976]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-1.5298842782486233, 3.2191057898549253] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.1501113630736657, 6]; resultsValVals = [-1.5298842782486233, 2.1724458695997537, 4.237979003170796]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-94541.7317212114, 170658.5375973549] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.150111363073666, 6]; resultsValVals = [-94541.7317212114, 101734.59157504095, 211237.3190234613]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.8734737381931108, 1.3313304643014572] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.1501113630736657, 6]; resultsValVals = [0.8734737381931108, 2.404652033192356, 3.2588977042770297]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.0853780304041418, 2.202033537057911] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 1.2988232955456442, 1.5976465910912885, 6]; resultsValVals = [1.0853780304041418, 1.990102532537364, 3.6489665158755145, 5.0308924719854]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-4.489845190674558, 29.565068994571178] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1.165438725217985, 1.1736988748896424, 1.174553373131538, 4]; resultsValVals = [0.03649604324262, 11.370596442990395, 20.593748163716384, 36.49604324261996]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-1.5298842782486233, 3.2191057898549253] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1.6134226199693829, 1.6375316351901021, 1.6409757802216334, 6]; resultsValVals = [0.01000000000000001, 1.2276085027998023, 2.4406022912978123, 4.2379790031707945]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [-94541.7317212114, 170658.5375973549] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1.7423235984576693, 1.7547074335066466, 1.7559885198910234, 6]; resultsValVals = [211.23731902346108, 65857.82996110985, 119286.28973286712, 211237.31902346085]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.8734737381931108, 1.3313304643014572] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 1.2933202071709262, 1.6704461878192602, 6]; resultsValVals = [0.8734737381931108, 1.365875111651997, 2.42687128132288, 3.2588977042770293]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.3470294984018791, 0.7283261086204962] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.6012794465851243, 6]; resultsValVals = [1.3470294984018791, 2.918007538131848, 4.967352481769911]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.8367239858577353, 2.210556099993931] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.5676669401272707, 4]; resultsValVals = [1.8367239858577353, 8.201736154712346, 39.34878110454656]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.597378819226662, 6.290262865578015] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = [1]; resultsStartValVals = [1.5974]; resultsCatVals = [3.5, 4.128138791741785, 5.175036777978095, 6]; resultsValVals = [4224.146163889106, 8992.794563642741, 16940.541896565468, 125367.1738292479]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.3470294984018791, 0.7283261086204962] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 2.1501113630736657, 6]; resultsValVals = [1.3470294984018791, 3.112909844498046, 4.967352481769911]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.8367239858577353, 2.210556099993931] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = 10; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 1.8483924814931876, 4]; resultsValVals = [1.8367239858577353, 11.981966375832453, 39.34878110454656]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.9540401412926336, 6.056432353383194] catMin = 1; catMax = 10; valMin = null; valMax = null; logBase = 10; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 1.5844104554141858, 2.558427881104495, 10]; resultsValVals = [1.9540401412926336, 67.31219921189552, 24548.64985736736, 2225183.5179863917]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.1384149147480012, 0.2762585712743759] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 4.058030426393523, 6]; resultsValVals = [1.5006456374707577, 2.7684017513643067, 5.97263555719961]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.7999999999999979, 1.034977465516456] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 1.8154710586797078, 3.1745894898125546, 4]; resultsValVals = [2.252034239498936, 4.152738007182711, 7.3205776199890025, 50.23772863019174]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.5000000000000027, 2.302585092994045] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = [1]; resultsStartValVals = [5.00007]; resultsCatVals = [3.5, 4.925624950443996, 5.573636291554903, 6]; resultsValVals = [1581.1388300841957, 6771.4211390038145, 9130.640370330913, 500000.00000000064]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [1.1384149147480012, 0.2762585712743759] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 6]; resultsValVals = [1.5006456374707577, 5.9726355571996095]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.7999999999999979, 1.034977465516456] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = 10; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 4]; resultsValVals = [2.2520342394989354, 50.237728630191725]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); chartletiables = [0.5000000000000027, 2.302585092994045] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; resultStartCatVals = []; resultsStartValVals = []; resultsCatVals = [1, 6]; resultsValVals = [5.000000000000022, 499999.99999999994]; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); assert.ok(areSame(lineCoords.mainLine.catVals, resultsCatVals), "Approximated bezier catVal results are not equal to the expected results: expected catVals:" + resultsCatVals + ', got:' + lineCoords.mainLine.catVals); assert.ok(areSame(lineCoords.mainLine.valVals, resultsValVals), "Approximated bezier valVal results are not equal to the expected results: expected valVals:" + resultsValVals + ', got:' + lineCoords.mainLine.valVals); assert.ok(areSame(lineCoords.startPoint.catVals, resultStartCatVals), "Approximated bezier starting catVal results are not equal to the expected results: expected catVals:" + resultStartCatVals + ', got:' + lineCoords.startPoint.catVals); assert.ok(areSame(lineCoords.startPoint.valVals, resultsStartValVals), "Approximated bezier starting valVal results are not equal to the expected results: expected valVals:" + resultsStartValVals + ', got:' + lineCoords.startPoint.valVals); }) } function testLineBuilderApproximatedBezierBoundary () { QUnit.test("Test: Line Builder boundaries calculation", function (assert) { let chartletiables = [0.6000000000000014, 0.8285714285714283] let catMin = 1; let catMax = 6; let valMin = null; let valMax = null; let logBase = null; let type = 1; let lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); let equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); let cutPoint = 1000; let maxCatVal = 6; let minCatVal = 1; let maxValVal = 5.571428571428571; let minValVal = 1.4285714285714297; let lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); let boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-19, 15.200000000000003] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; maxCatVal = 4; minCatVal = 1; maxValVal = 41.80000000000001; minValVal = -3.799999999999997; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-4.199999999999999, 1.7714285714285714] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; maxCatVal = 6; minCatVal = 1; maxValVal = 6.428571428571429; minValVal = -2.428571428571428; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-172840, 75837.85714285713] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; maxCatVal = 6; minCatVal = 1; maxValVal = 282187.1428571428; minValVal = -97002.14285714287; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.333333333333334, 0.28571428571428514] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 1000; maxCatVal = 6; minCatVal = 1; maxValVal = 3.047619047619045; minValVal = 1.619047619047619; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.6000000000000014, 0.8285714285714283] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 5.57142857142857; minValVal = 1.4285714285714297; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-19, 15.200000000000003] catMin = 1; catMax = 4; valMin = 0.1; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 41.800000000000004; minValVal = 0.10000000000000005; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-4.199999999999999, 1.7714285714285714] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 2.376612903225806; maxValVal = 6.428571428571428; minValVal = 0.01000000000000001; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-172840, 75837.85714285713] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 2.2827937611257103; maxValVal = 282187.1428571427; minValVal = 282.187142857143; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.333333333333334, 0.28571428571428514] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 1; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 3.047619047619045; minValVal = 1.619047619047619; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.0853780304041418, 2.202033537057911] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 5.030892471985402; minValVal = 1.0853780304041418; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-4.489845190674558, 29.565068994571178] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 36.496043242619976; minValVal = -4.489845190674558; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-1.5298842782486233, 3.2191057898549253] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 4.237979003170796; minValVal = -1.5298842782486233; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-94541.7317212114, 170658.5375973549] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 211237.3190234613; minValVal = -94541.7317212114; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.8734737381931108, 1.3313304643014572] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 3.2588977042770297; minValVal = 0.8734737381931108; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.0853780304041418, 2.202033537057911] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 5.0308924719854; minValVal = 1.0853780304041418; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-4.489845190674558, 29.565068994571178] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 36.49604324261996; minValVal = 0.03649604324262; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-1.5298842782486233, 3.2191057898549253] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1.6134226199693829; maxValVal = 4.2379790031707945; minValVal = 0.01000000000000001; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [-94541.7317212114, 170658.5375973549] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1.7423235984576693; maxValVal = 211237.31902346085; minValVal = 211.23731902346108; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.8734737381931108, 1.3313304643014572] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 2; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 3.2588977042770293; minValVal = 0.8734737381931108; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.3470294984018791, 0.7283261086204962] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 4.967352481769911; minValVal = 1.3470294984018791; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.8367239858577353, 2.210556099993931] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 39.34878110454656; minValVal = 1.8367239858577353; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.597378819226662, 6.290262865578015] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 125367.1738292479; minValVal = 1.5974; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.3470294984018791, 0.7283261086204962] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 4.967352481769911; minValVal = 1.3470294984018791; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.8367239858577353, 2.210556099993931] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = 10; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 39.34878110454656; minValVal = 1.8367239858577353; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.9540401412926336, 6.056432353383194] catMin = 1; catMax = 10; valMin = null; valMax = null; logBase = 10; type = 5; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 10; minCatVal = 1; maxValVal = 2225183.5179863917; minValVal = 1.9540401412926336; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.1384149147480012, 0.2762585712743759] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 5.97263555719961; minValVal = 1.5006456374707577; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.7999999999999979, 1.034977465516456] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = null; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 50.23772863019174; minValVal = 2.252034239498936; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.5000000000000027, 2.302585092994045] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = null; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 500000.00000000064; minValVal = 5.00007; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [1.1384149147480012, 0.2762585712743759] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 5.9726355571996095; minValVal = 1.5006456374707577; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.7999999999999979, 1.034977465516456] catMin = 1; catMax = 4; valMin = null; valMax = null; logBase = 10; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 4; minCatVal = 1; maxValVal = 50.237728630191725; minValVal = 2.2520342394989354; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); chartletiables = [0.5000000000000027, 2.302585092994045] catMin = 1; catMax = 6; valMin = null; valMax = null; logBase = 10; type = 0; lineBuilder = new AscFormat.CLineBuilder(chartletiables, catMin, catMax, valMin, valMax, logBase); equationStorage = _obtainEquationStorage(type); lineBuilder.setCalcYVal(equationStorage.calcYVal); lineBuilder.setCalcXVal(equationStorage.calcXVal); lineBuilder.setCalcSlope(equationStorage.calcSlope); cutPoint = 3; maxCatVal = 6; minCatVal = 1; maxValVal = 499999.99999999994; minValVal = 5.000000000000022; lineCoords = lineBuilder.drawWithApproximatedBezier(0.01, 1.56, cutPoint); boundaries = lineBuilder.getBoundary(); assert.ok(isEqual(boundaries.catMax, maxCatVal), "Boundaries catMax calculated incorrectly:" + maxCatVal + ', got:' + boundaries.catMax); assert.ok(isEqual(boundaries.catMin, minCatVal), "Boundaries catMin calculated incorrectly:" + minCatVal + ', got:' + boundaries.catMin); assert.ok(isEqual(boundaries.valMax, maxValVal), "Boundaries valMax calculated incorrectly:" + maxValVal + ', got:' + boundaries.valMax); assert.ok(isEqual(boundaries.valMin, minValVal), "Boundaries valMin calculated incorrectly:" + minValVal + ', got:' + boundaries.valMin); }) } function testHistogramHandleAggregation () { QUnit.test("Test: Histogram aggregation calculations", function (assert) { let cachedData = new AscFormat.CachedClusteredColumn(); let axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; let numArr = [{val: 7}, {val: 9}]; let strArr = [{val: "c"}, {val: "#"}]; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [ { lblName: 'c', val: 7 }, { lblName: '#', val: 9 } ]; assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "f"}, {val: "f"}, {val: "d"}, {val: "f"}, {val: "d"}, {val: "d"}]; cachedData.data = []; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [ { lblName: 'c', val: 247 }, { lblName: '#', val: 9 }, { lblName: 'f', val: 381 }, { lblName: 'd', val: 451 } ]; assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7},]; strArr = []; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [ { lblName: '', val: 7 } ]; assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; strArr = [{val: "7"}, {val: "7"}, {val: "31"}, {val: "31"}, {val: "47"}, {val: "75"}, {val: "87"}, {val: "115"}, {val: "116"}, {val: "119"}, {val: "119"}, {val: "155"}, {val: "177"}]; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [ { lblName: '7', val: 16 }, { lblName: '31', val: 62 }, { lblName: '47', val: 47 }, { lblName: '75', val: 75 }, { lblName: '87', val: 87 }, { lblName: '115', val: 115 }, { lblName: '116', val: 116 }, { lblName: '119', val: 238 }, { lblName: '155', val: 155 }, { lblName: '177', val: 177 } ]; assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 0}, {val: 9}, {val: 31}, {val: 0}]; strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}]; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [ { lblName: 'c', val: 0 }, { lblName: '#', val: 9 }, { lblName: 'f', val: 31 } ]; assert.ok(areSameStrings(result, cachedData.data), "Histogram; aggregation calculated incorrectly:" + result + ', got:' + cachedData.data); }) } function testHistogramHandleAggregationMinAndMax () { QUnit.test("Test: Histogram aggregation min and max calculations", function (assert) { let cachedData = new AscFormat.CachedClusteredColumn(); let axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; let numArr = [{val: 7}, {val: 9}]; let strArr = [{val: "c"}, {val: "#"}]; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [7, 9]; assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min); assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "c"}, {val: "f"}, {val: "f"}, {val: "d"}, {val: "f"}, {val: "d"}, {val: "d"}]; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [7, 451]; assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min); assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7},]; strArr = []; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [7, 7]; assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min); assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; strArr = [{val: "7"}, {val: "7"}, {val: "31"}, {val: "31"}, {val: "47"}, {val: "75"}, {val: "87"}, {val: "115"}, {val: "116"}, {val: "119"}, {val: "119"}, {val: "155"}, {val: "177"}]; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [7, 238]; assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min); assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max); axisProperties = { cat : {max: null, min:null, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 0}, {val: 9}, {val: 31}, {val: 0}]; strArr = [{val: "c"}, {val: "#"}, {val: "f"}, {val: "c"}]; cachedData.data = []; cachedData.calculateAggregation(numArr, strArr, axisProperties); result = [0, 31]; assert.ok(isEqual(result[0], axisProperties.val.min), "Histogram; aggregation keys calculated incorrectly:" + result[0] + ', got:' + axisProperties.val.min); assert.ok(isEqual(result[1], axisProperties.val.max), "Histogram; aggregation values calculated incorrectly:" + result[1] + ', got:' + axisProperties.val.max); }) } function testHistogramHandleBinning () { // this function compares each object inside the arrays // if there is an object different for each array // this function will return the index, the true object, and its incorrect prediction function checkArraysOfObjects (arr, predicted) { if (!arr || !predicted) { return; } if (arr.length !== predicted.length) { return ['arrays are different', 'arrays are different', 'arrays are different']; } for (let i = 0; i < arr.length; i++) { const st1 = !isEqual(arr[i].min, predicted[i].min); const st2 = !isEqual(arr[i].max, predicted[i].max); const st3 = !isEqual(arr[i].val, predicted[i].val); if (st1 || st2 || st3) { return [i, arr[i], predicted[i]]; } } return false; } QUnit.test("Test: Histogram binning calculations", function (assert) { const cachedData = new AscFormat.CachedClusteredColumn(); const binning = new AscFormat.CBinning(); cachedData.binning = binning; let axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; let numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); console.log(cachedData); let result = [{min : 7, max : 89, val: 7}, {min : 89, max : 171, val: 5}, {min : 171, max : 253, val: 1}]; let isProblematic = checkArraysOfObjects(result, cachedData.data); let message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 78, val: 6}, {min : 78, max : 149, val: 5}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 78, val: 6}, {min : 78, max : 149, val: 3}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 63, val: 5}, {min : 63, max : 119, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 39, val: 3}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 10.9, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 8}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = 26; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 33, val: 4}, {min : 33, max : 59, val: 1}, {min : 59, max : 85, val: 1}, {min : 85, max : 111, val: 1}, {min : 111, max : 137, val: 4}, {min : 137, max : 163, val: 1}, {min : 163, max : 189, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = 5; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 2}, {min : 12, max : 17, val: 0}, {min : 17, max : 22, val: 0}, {min : 22, max : 27, val: 0}, {min : 27, max : 32, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = 10; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 17, val: 1}, {min : 17, max : 27, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 177, val: 13}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 7.666666667, val: 1}, {min : 7.666666667, max : 8.3333333333, val: 0}, {min : 8.3333333333, max : 9, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:31, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 31, max : 31, val: 1}, {min : 31, max : 31, val: 0}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 89.1, val: 6}, {min : 89.1, max : 171.1, val: 5}, {min : 171.1, max : 253.1, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 25; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 25, val: 2}, {min : 25, max : 96, val: 5}, {min : 96, max : 167, val: 4}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 78; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 78, val: 6}, {min : 78, max : 149, val: 3}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 86.9999; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 86.9999, val: 6}, {min : 86.9999, max : 142.9999, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 30; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 30, val: 2}, {min : 30, max : 62, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7.5, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7.5}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.4; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.4, val: 1}, {min : 7.4, max : 8.38, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 6.99999; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 8}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.5; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.5, val: 1}, {min : 7.5, max : 11.4, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 8, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 8}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 8; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 8, val: 2}, {min : 8, max : 10, val: 0}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.99; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 89, val: 7}, {min : 89, max : 171, val: 5}, {min : 171, max : 176.99, val: 0}, {min : 176.99, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 116; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 78, val: 6}, {min : 78, max : 116, val: 3}, {min : 116, max : null, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 78; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 78, val: 6}, {min : 78, max : null, val: 3}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 7, val: 1}, {min : 7, max : null, val: 6}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 47; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 8, val: 1}, {min : 8, max : null, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8.9; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 8.9, val: 1}, {min : 8.9, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 7.111111; binning.overflow = 116; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7.111111; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 8}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 8, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 8}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 9, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.99; binning.underflow = 7.1; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 89.1, val: 6}, {min : 89.1, max : 171.1, val: 5}, {min : 171.1, max : 176.99, val: 0}, {min : 176.99, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 116; binning.underflow = 25; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 25, val: 2}, {min : 25, max : 96, val: 5}, {min : 96, max : 116, val: 2}, {min : 116, max : null, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 78; binning.underflow = 78; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 78, val: 6}, {min : 78, max : 78, val: 0}, {min : 78, max : null, val: 3}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = 86.999; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 86.999, val: 6}, {min : 86.999, max : 142.999, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 47; binning.underflow = 7; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 41, val: 4}, {min : 41, max : 75, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8; binning.underflow = 30; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 30, val: 2}, {min : 30, max : 62, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8.9; binning.underflow = 7.4; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.4, val: 1}, {min : 7.4, max : 8.9, val: 0}, {min : 8.9, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 6.999; binning.underflow = 7.1111; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7.0; binning.underflow = 7.1111; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 8}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = null; binning.binSize = 40; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 47.1, val: 4}, {min : 47.1, max : 87.1, val: 2}, {min : 87.1, max : 127.1, val: 4}, {min : 127.1, max : 167.1, val: 1}, {min : 167.1, max : 207.1, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 20; binning.binCount = null; binning.binSize = 15; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 20, val: 2}, {min : 20, max : 35, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 18; binning.binCount = null; binning.binSize = 110; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 18, val: 2}, {min : 18, max : 128, val: 0}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7; binning.binCount = null; binning.binSize = 50; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 57, val: 5}, {min : 57, max : 107, val: 2}, {min : 107, max : 157, val: 5}, {min : 157, max : 207, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 169.9; binning.underflow = null; binning.binCount = null; binning.binSize = 40; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 47, val: 5}, {min : 47, max : 87, val: 2}, {min : 87, max : 127, val: 4}, {min : 127, max : 167, val: 1}, {min : 167, max : 169.9, val: 0}, {min : 169.9, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 20; binning.underflow = null; binning.binCount = null; binning.binSize = 8; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 15, val: 2}, {min : 15, max : 20, val: 0}, {min : 20, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = null; binning.binCount = null; binning.binSize = 15; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 7, val: 1}, {min : 7, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 177; binning.underflow = null; binning.binCount = null; binning.binSize = 50; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 57, val: 5}, {min : 57, max : 107, val: 2}, {min : 107, max : 157, val: 5}, {min : 157, max : 207, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.9; binning.underflow = 7.9; binning.binCount = null; binning.binSize = 70; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.9, val: 1}, {min : 7.9, max : 77.9, val: 5}, {min : 77.9, max : 147.9, val: 5}, {min : 147.9, max : 176.9, val: 1}, {min : 176.9, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 20; binning.underflow = 20; binning.binCount = null; binning.binSize = 10; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 20, val: 2}, {min : 20, max : 20, val: 0}, {min : 20, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 29, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 177; binning.underflow = 7; binning.binCount = null; binning.binSize = 50; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 57, val: 5}, {min : 57, max : 107, val: 2}, {min : 107, max : 157, val: 5}, {min : 157, max : 207, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.1, val: 1}, {min : 7.1, max : 177, val: 12}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.1, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 18; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 18, val: 2}, {min : 18, max : 18, val: 0}, {min : 18, max : 18, val: 0}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.9; binning.underflow = null; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 176.9, val: 12}, {min : 176.9, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 30.9; binning.underflow = null; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 30.9, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = null; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 7, val: 1}, {min : 7, max : 7, val: 0}, {min : 7, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 169.9; binning.underflow = 7.1; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 7.1, val: 1}, {min : 169.9, max : null, val: 12}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 28; binning.underflow = 28; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 28, val: 2}, {min : 28, max : 28, val: 0}, {min : 28, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 17.5; binning.underflow = 8.5; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 8.5, val: 1}, {min : 17.5, max : null, val: 1}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 10; binning.underflow = 8; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 8, val: 1}, {min : 10, max : null, val: 2}]; isProblematic = checkArraysOfObjects(result, cachedData.data); message = isProblematic ? "Histogram; binning ranges calculated incorrectly at index: " + isProblematic[0] + ", Expected value were: " + JSON.stringify(isProblematic[1]) + ', got:' + JSON.stringify(isProblematic[2]) : 'test passed'; assert.ok(!isProblematic, message); }) } function testHistogramHandleBinningMinAndMaxAndScale () { // this function compares each object inside the arrays // if there is an object different for each array // this function will return the index, the true object, and its incorrect prediction function checkArraysOfObjects (arr, predicted) { if (!arr || !predicted) { return; } if (arr.length !== predicted.length) { return ['arrays are different', 'arrays are different', 'arrays are different']; } for (let i = 0; i < arr.length; i++) { const st1 = !isEqual(arr[i].min, predicted[i].min); const st2 = !isEqual(arr[i].max, predicted[i].max); const st3 = !isEqual(arr[i].val, predicted[i].val); if (st1 || st2 || st3) { return [i, arr[i], predicted[i]]; } } return false; } QUnit.test("Test: Histogram binning min and max and scale", function (assert) { const cachedData = new AscFormat.CachedClusteredColumn(); const binning = new AscFormat.CBinning(); cachedData.binning = binning; let axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; let numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); let resultMax = 7; let resultMin = 1; let resultScale = [7, 89, 171, 253]; let test1 = axisProperties.val.max === resultMax; let test2 = axisProperties.val.min === resultMin; let test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7, 78, 149]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7, 78, 149]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [7, 63, 119]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 4; resultMin = 1; resultScale = [7, 41, 75]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 3; resultMin = 1; resultScale = [7, 39]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [7, 10.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 8; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = 26; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 4; resultMin = 1; resultScale = [7, 33, 59, 85, 111, 137, 163, 189]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = 5; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [7, 12, 17, 22, 27, 32]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = 10; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 17, 27]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 13; resultMin = 1; resultScale = [7, 177]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 7.666666667, 8.333333333, 9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:31, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [31, 31, 31]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7.1, 89.1, 171.1, 253.1]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 25; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [25, 96, 167]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 78; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [78, 149]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 86.9999; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [86.9999, 142.9999]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 4; resultMin = 1; resultScale = [7, 41, 75]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 30; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [30, 62]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7.5, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7.5}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.4; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7.4, 8.38]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 6.99999; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 12, val: 1}]; resultMax = 1; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 8; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.5; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7.5, 11.4]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 8, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 8}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 8; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [8, 10]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.99; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 7; resultMin = 1; resultScale = [7, 89, 171, 176.99]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 116; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7, 78, 116]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 78; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7, 78]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7, 7]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 47; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 4; resultMin = 1; resultScale = [7, 41, 75]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [7, 8]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8.9; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 8.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7.111111; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7.111111; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 8; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 8, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 8}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [7, 9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.99; binning.underflow = 7.1; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [7.1, 89.1, 171.1, 176.99]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 119, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 116; binning.underflow = 25; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [25, 96, 116]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 116, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 78; binning.underflow = 78; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [78, 78]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 87, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = 86.999; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 6; resultMin = 1; resultScale = [86.999, 142.999]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 47, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 47; binning.underflow = 7; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 4; resultMin = 1; resultScale = [7, 41, 75]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8; binning.underflow = 30; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [30, 62]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 9, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 8.9; binning.underflow = 7.4; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7.4, 8.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 6.999; binning.underflow = 7.1111; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 7, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}, {val: 7}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7.0; binning.underflow = 7.1111; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 8; resultMin = 1; resultScale = [7, 12]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = null; binning.binSize = 40; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 4; resultMin = 1; resultScale = [7.1, 47.1, 87.1, 127.1, 167.1, 207.1]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 20; binning.binCount = null; binning.binSize = 15; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [20, 35]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 18; binning.binCount = null; binning.binSize = 110; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [18, 128]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7; binning.binCount = null; binning.binSize = 50; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [7, 57, 107, 157, 207]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 169.9; binning.underflow = null; binning.binCount = null; binning.binSize = 40; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [7, 47, 87, 127, 167, 169.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 20; binning.underflow = null; binning.binCount = null; binning.binSize = 8; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : 7, max : 15, val: 2}, {min : 15, max : 20, val: 0}, {min : 20, max : null, val: 1}]; resultMax = 2; resultMin = 1; resultScale = [7, 15, 20]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = null; binning.binCount = null; binning.binSize = 15; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 7]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 177; binning.underflow = null; binning.binCount = null; binning.binSize = 50; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [7, 57, 107, 157, 207]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.9; binning.underflow = 7.9; binning.binCount = null; binning.binSize = 70; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [7.9, 77.9, 147.9, 176.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 20; binning.underflow = 20; binning.binCount = null; binning.binSize = 10; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [20, 20]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = null; binning.binCount = null; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [7, 29]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 177; binning.underflow = 7; binning.binCount = null; binning.binSize = 50; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 5; resultMin = 1; resultScale = [7, 57, 107, 157, 207]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 12; resultMin = 1; resultScale = [7.1, 177]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 7.1; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7.1]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = null; binning.underflow = 18; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [18, 18, 18]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 176.9; binning.underflow = null; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 12; resultMin = 1; resultScale = [7, 176.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 30.9; binning.underflow = null; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 7; binning.underflow = null; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [7, 7, 7]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 177, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}, {val: 31}, {val: 47}, {val: 75}, {val: 87}, {val: 115}, {val: 116}, {val: 119}, {val: 119}, {val: 155}, {val: 177}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 169.9; binning.underflow = 7.1; binning.binCount = 1; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 12; resultMin = 1; resultScale = [7.1, 169.9]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 31, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 28; binning.underflow = 28; binning.binCount = 3; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 2; resultMin = 1; resultScale = [28, 28]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 18}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 17.5; binning.underflow = 8.5; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); resultMax = 1; resultMin = 1; resultScale = [8.5, 17.5]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); axisProperties = { cat : {max: 18, min:7, scale : []}, val : {max: null, min:null, scale : []}, }; numArr = [{val: 7}, {val: 9}, {val: 31}]; cachedData.data = []; binning.intervalClosed = 1; binning.overflow = 10; binning.underflow = 8; binning.binCount = 2; binning.binSize = null; binning.testingNumArr = numArr; cachedData.calculateBinning(numArr, axisProperties); result = [{min : null, max : 8, val: 1}, {min : 10, max : null, val: 2}]; resultMax = 2; resultMin = 1; resultScale = [8, 10]; test1 = axisProperties.val.max === resultMax; test2 = axisProperties.val.min === resultMin; test3 = areSame(axisProperties.cat.scale, resultScale); assert.ok(test1, test1 ? 'test passed' : "Histogram; binning val max calculated incorrectly: " + resultMax + ", got: " + axisProperties.val.max); assert.ok(test2, test2 ? 'test passed' : "Histogram; binning val min calculated incorrectly: " + resultMin + ", got: " + axisProperties.val.min); assert.ok(test3, test3 ? 'test passed' : "Histogram; binning cat scale calculated incorrectly: " + resultScale + ", got: " + axisProperties.cat.scale); }) } function testRoundValue () { QUnit.test("Test: RoundValues function", function (assert) { let chartsDrawer = new AscFormat.CChartsDrawer(); let val = 105.965; let predicted = AscCommon._roundValue(val); result = 105.965; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 105.965000000002; predicted = AscCommon._roundValue(val); result = 105.965; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 105.965000000002; predicted = AscCommon._roundValue(val, true, 2); result = 106; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 106.82; predicted = AscCommon._roundValue(val, true, 2); result = 107; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 106.823; predicted = AscCommon._roundValue(val, false, 2); result = 106.82; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 1.452369; predicted = AscCommon._roundValue(val, true, 1); result = 1.5; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 10536.236958; predicted = AscCommon._roundValue(val, true, 1); result = 11000; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 0.5623695865465845; predicted = AscCommon._roundValue(val); result = 0.5623695865; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 15262.1262653592; predicted = AscCommon._roundValue(val); result = 15262.126256359; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = 15262.1262653592; predicted = AscCommon._roundValue(val / 0); result = 1; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = -105.965000000002; predicted = AscCommon._roundValue(val); result = -105.965; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = -105.965000000002; predicted = AscCommon._roundValue(val, true, 2); result = -106; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); val = -106.82; predicted = AscCommon._roundValue(val, true, 2); result = -107; assert.ok(isEqual(result, predicted), "RoundValues calculated incorrectly:" + result + ', got:' + predicted); }) } QUnit.module("ChartsDraw"); function startTests() { QUnit.start(); testChartBaseTypes(); testLinearTrendLineEquation(); testLogarithmicTrendLineEquation(); testPowerTrendLineEquation(); testExponentialTrendLineEquation(); testPolynomialTrendLineEquation(); testMovingAverageTrendLineResuts(); testDispR() testIntercept(); testLineBuilderApproximatedBezier(); testLineBuilderApproximatedBezierBoundary(); testHistogramHandleAggregation(); testHistogramHandleAggregationMinAndMax(); testHistogramHandleBinning(); testHistogramHandleBinningMinAndMaxAndScale(); testRoundValue(); } });