@fusioncharts/datatable
Version:
In memory tabular data storage
1 lines • 34.4 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _datastore=_interopRequireDefault(require("../datastore"));var _datetimeEnums=require("../../../fc-utils/src/datetime-enums");var _cityBikes=_interopRequireDefault(require("../../sample/data/cityBikes"));var _cityBikes2=_interopRequireDefault(require("../../sample/data/cityBikes.schema"));var _salesTransaction=_interopRequireDefault(require("../../sample/data/salesTransaction"));var _salesTransaction2=_interopRequireDefault(require("../../sample/data/salesTransaction.schema"));var _groupBy=_interopRequireDefault(require("./group-by"));describe("test groupBy",(function(){var cityBikesDS=new _datastore.default(_cityBikes.default,_cityBikes2.default,{enableIndex:false,indexBy:"starttime"}),cityBikesDT=cityBikesDS.getDataTable(),salesTransactionDS=new _datastore.default(_salesTransaction.default,_salesTransaction2.default,{enableIndex:false,indexBy:"Time"}),salesTransactionDT=salesTransactionDS.getDataTable(),groupByOps,result;it("groupBy takes 2 arguments",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result).toBeDefined()}));it("column in argument doesn't belong in dataview",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime X",timeUnit:_datetimeEnums.DatetimeUnits.Hour}],[{column:"tripduration X",operation:"stddev",outputAs:"total trip duration"}]);expect((function(){return groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config)})).toThrow()}));it("column is missing",(function(){groupByOps=(0,_groupBy.default)([{timeUnit:_datetimeEnums.DatetimeUnits.Hour}],[{column:"tripduration X",operation:"stddev",outputAs:"total trip duration"}]);expect((function(){return groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config)})).toThrow()}));describe("outputAs is used in group config",(function(){it("single sorted column grouping",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"}],dataArr=[["John",13],["Luna",17],["Sam",5],["John",19],["Sam",14]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name",outputAs:"Student Name"}],[{column:"Age",operation:"count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[0].name).toBe("Student Name")}));it("single unsorted column grouping",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"}],dataArr=[["John",13],["Luna",17],["Sam",5],["John",19],["Sam",14]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Age"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name",outputAs:"Student Name"}],[{column:"Age",operation:"count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[0].name).toBe("Student Name")}));it("multiple sorted column grouping",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name",outputAs:"Student Name"},{column:"Class",outputAs:"Class Name"}],[{column:"Age",operation:"count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[0].name).toBe("Student Name");expect(result.schema[1].name).toBe("Class Name")}));it("multiple unsorted column grouping",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Age"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name",outputAs:"Student Name"},{column:"Class",outputAs:"Class Name"}],[{column:"Age",operation:"count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[0].name).toBe("Student Name");expect(result.schema[1].name).toBe("Class Name")}))}));describe("outputAs is used in aggregation config",(function(){it("single sorted column grouping, single column aggregation",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"count",outputAs:"Student Count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[1].name).toBe("Student Count")}));it("single unsorted column grouping, single column aggregation",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Age"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"count",outputAs:"Student Count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[1].name).toBe("Student Count")}));it("multiple column grouping, single column aggregation",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"},{column:"Class"}],[{column:"Age",operation:"count",outputAs:"Student Count"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[2].name).toBe("Student Count")}));it("single column grouping, multiple column aggregation",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age",type:"number"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Class",operation:"count",outputAs:"Student Count"},{column:"Age",operation:"avg",outputAs:"Student Average Age"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[1].name).toBe("Student Count");expect(result.schema[2].name).toBe("Student Average Age")}));it("multiple column grouping, multiple column aggregation",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age",type:"number"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"},{column:"Class"}],[{column:"Class",operation:"count",outputAs:"Student Count"},{column:"Age",operation:"avg",outputAs:"Student Average Age"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[2].name).toBe("Student Count");expect(result.schema[3].name).toBe("Student Average Age")}));it("missing outputAs uses [original column name - operation]",(function(){var DS,DT,schemaArr=[{name:"Name",type:"string"},{name:"Age",type:"number"},{name:"Class"}],dataArr=[["John",13,7],["Luna",17,11],["Sam",5,2],["John",19,11],["Sam",14,7]];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"},{column:"Class"}],[{column:"Class",operation:"count"},{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.schema[2].name).toBe("Class - count");expect(result.schema[3].name).toBe("Age - avg")}))}));it("timeUnit used in date column",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.schema[0].type).toBe("interval");expect(result.data[0][0].config.duration.name).toEqual(_datetimeEnums.DatetimeUnits.Hour.Unit)}));it("timeUnit = second should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Second}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30,9,58,11));expect(result.data[0][0].end).toBe(+new Date(2016,9,30,9,58,12))}));it("timeUnit = minute should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Minute}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30,9,58));expect(result.data[0][0].end).toBe(+new Date(2016,9,30,9,59))}));it("timeUnit = hour should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Hour}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30,9));expect(result.data[0][0].end).toBe(+new Date(2016,9,30,10))}));it("timeUnit = day should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30));expect(result.data[0][0].end).toBe(+new Date(2016,9,31))}));it("timeUnit = day should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30));expect(result.data[0][0].end).toBe(+new Date(2016,10,6))}));it("incorrect timeUnit used in date column",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.abc}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);expect((function(){return groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config)})).toThrow()}));it("outputFormat is used",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,outputFormat:"%e %B %Y, %I %p"}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].toString()).toBe(" 1 February 2014, 12 AM")}));it("default format if outputFormat is missing",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].toString()).toBe("Feb 01, 2014 00 hrs")}));it("binSize makes interval a range",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,binSize:3}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].start).toBe(13912128e5);expect(result.data[0][0].end).toBe(13912236e5)}));it("incorrect outputFormat",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,outputFormat:"%g"}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].toString()).toBe("g")}));it("string binSize uses 1",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,binSize:"three"}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].start).toBe(13912128e5);expect(result.data[0][0].end).toBe(13912164e5)}));it("negative binSize uses positive",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,binSize:-3}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].start).toBe(13912128e5);expect(result.data[0][0].end).toBe(13912236e5)}));it("null binSize uses 1",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,binSize:null}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].start).toBe(13912128e5);expect(result.data[0][0].end).toBe(13912164e5)}));it("startValue is used when provided",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,startValue:1391329619e3}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].start).toBe(1391328e6);expect(result.data[0][0].end).toBe(13913316e5)}));it("startValue greater than max returns empty data",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,startValue:139136568e4}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data).toEqual([])}));it("startValue should always be a number",(function(){groupByOps=(0,_groupBy.default)([{column:"starttime",timeUnit:_datetimeEnums.DatetimeUnits.Hour,startValue:"yesterday"}],[{column:"tripduration",operation:"stddev",outputAs:"total trip duration"}]);result=groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config);expect(result.data[0][0].start).toBe(13912128e5);expect(result.data[0][0].end).toBe(13912164e5)}));it("default weekStartFrom is sunday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,6,0,0,0))}));it("weekStartFrom is monday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Monday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,24,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,9,31,0,0,0))}));it("weekStartFrom is tuesday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Tuesday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,25,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,1,0,0,0))}));it("weekStartFrom is wednesday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Wednesday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,26,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,2,0,0,0))}));it("weekStartFrom is thursday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Thursday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,27,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,3,0,0,0))}));it("weekStartFrom is friday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Friday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,28,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,4,0,0,0))}));it("weekStartFrom is saturday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Saturday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,29,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,5,0,0,0))}));it("weekStartFrom is sunday",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:_datetimeEnums.Weekdays.Sunday}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][0].start).toBe(+new Date(2016,9,30,0,0,0));expect(result.data[0][0].end).toBe(+new Date(2016,10,6,0,0,0))}));it("incorrect weekStartFrom should throw error",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Week,weekStartFrom:"monday"}],[{column:"Item",operation:"count",outputAs:"Total Items"}]);expect((function(){return groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config)})).toThrow()}));it("undefined aggregation operation should throw error",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"wrong",outputAs:"Total value"}]);expect((function(){return groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config)})).toThrow()}));it("sum aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"sum",outputAs:"Total value"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(Number(result.data[0][1].toFixed(2))).toBe(3011.76)}));it("avg aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"avg",outputAs:"Average value"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(Number(result.data[0][1].toFixed(2))).toBe(16.73)}));it("count aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"count",outputAs:"Total items"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][1]).toBe(180)}));it("min aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"min",outputAs:"Minimum value"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][1]).toBe(1.03)}));it("max aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"max",outputAs:"Maximum value"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][1]).toBe(30.71)}));it("first aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"first",outputAs:"First value"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][1]).toBe(21.8)}));it("last aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"last",outputAs:"Last value"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(result.data[0][1]).toBe(25.29)}));it("stddev aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"stddev",outputAs:"Standard Deviation"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(Number(result.data[0][1].stddev.toFixed(2))).toBe(8.88)}));it("variance aggregation should work",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Value",operation:"variance",outputAs:"Variance"}]);result=groupByOps.fn(salesTransactionDT._data,salesTransactionDT._schema,salesTransactionDT._config);expect(Number(result.data[0][1].variance.toFixed(1))).toBe(78.8)}));it("numberic aggregation on non-numeric column should throw error",(function(){groupByOps=(0,_groupBy.default)([{column:"Time",timeUnit:_datetimeEnums.DatetimeUnits.Day}],[{column:"Item",operation:"sum"}]);expect((function(){return groupByOps.fn(cityBikesDT._data,cityBikesDT._schema,cityBikesDT._config)})).toThrow()}))}));describe("test groupBy edge cases",(function(){var DS,DT,groupByOps,result;it("empty data array returns empty result without error",(function(){var dataArr=[],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(0)}));it("first row empty returns result without error",(function(){var dataArr=[[],["Harry",28],["John",21],["Sam",20],["Harry",16],["Sam",33],["John",33],["Harry",27],["John",41],["John",40],["Sam",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3)}));it("first row null returns result without error",(function(){var dataArr=[[null,null],["Harry",28],["John",21],["Sam",20],["Harry",16],["Sam",33],["John",33],["Harry",27],["John",41],["John",40],["Sam",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(4)}));it("multiple empty rows returns result without error",(function(){var dataArr=[[],["Harry",28],["John",21],["Sam",20],["Harry",16],["Sam",33],[],[],["John",33],["Harry",27],["John",41],["John",40],["Sam",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3)}));it("first row with aggregation column value as empty returns result without error",(function(){var dataArr=[["Sam"],["Harry",28],["John",21],["Sam",20],["Harry",16],["Sam",33],["John",33],["Harry",27],["John",41],["John",40],["Sam",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3)}));it("first row with aggregation column value as null returns result without error",(function(){var dataArr=[["Sam",null],["Harry",28],["John",21],["Sam",20],["Harry",16],["Sam",33],["John",33],["Harry",27],["John",41],["John",40],["Sam",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(Math.round(result.data[0][1]*100)/100).toBe(21.67)}));it("all aggregation column values as null returns result without error",(function(){var dataArr=[["Sam",null],["Harry",null],["John",null],["Sam",null],["Harry",null],["Sam",null],["John",null],["Harry",null],["John",null],["John",null],["Sam",null]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[0][1]).toBe(undefined);expect(result.data[1][1]).toBe(undefined);expect(result.data[2][1]).toBe(undefined)}));it("all group column values as null returns result without error",(function(){var dataArr=[[null,28],[null,21],[null,20],[null,16],[null,33],[null,33],[null,27],[null,41],[null,40],[null,12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(1);expect(result.data[0][0]).toBe(null);expect(result.data[0][1]).toBe(27.1)}));it("all group column values as empty strings returns result without error",(function(){var dataArr=[["",28],["",21],["",20],["",16],["",33],["",33],["",27],["",41],["",40],["",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(1);expect(result.data[0][0]).toBe("");expect(result.data[0][1]).toBe(27.1)}));it("group column values as empty strings returns result without error",(function(){var dataArr=[["",5],["Harry",28],["John",21],["Sam",20],["Harry",16],["Sam",33],["John",33],["Harry",27],["John",41],["John",40],["Sam",12],["",40],["",12]],schemaArr=[{name:"Name"},{name:"Age",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Name"}],[{column:"Age",operation:"avg"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(4);expect(result.data[0][0]).toBe("");expect(result.data[0][1]).toBe(19)}));it("0 value in variance operation",(function(){var dataArr=[["2016-10-30 09:58:11",1,"Bread",-10,"India"],["2016-10-30 09:59:11",1,"Bread",null,"India"],["2016-10-30 10:03:34",2,"Scandinavian",27.13,"India"],["2016-10-30 10:04:34",2,"Scandinavian",null,"India"],["2016-10-30 10:05:44",2,"Scandinavian",0,"India"],["2016-10-30 10:07:57",3,"Hot chocolate",0,"India"],["2016-10-30 10:08:57",3,"Hot chocolate",12,"Srilanka"],["2016-10-30 10:09:37",3,"Hot chocolate",null,"Srilanka"],["2016-10-30 10:09:57",1,"Bread",0,"Srilanka"],["2016-10-30 10:10:57",3,"Bread",110,"Srilanka"],["2016-10-30 10:10:59",2,"Scandinavian",4.15,"Srilanka"]],schemaArr=[{name:"Time",type:"date",format:"%Y-%m-%d %H:%M:%S"},{name:"Transaction",type:"number"},{name:"Item",type:"string"},{name:"Value",type:"number"},{name:"Country",type:"string"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"avg"},{column:"Value",operation:"variance"},{column:"Value",operation:"stddev"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[2][0]).toBe("Hot chocolate");expect(result.data[2][1]).toBe(6);expect(result.data[2][2]).toEqual({avg:6,variance:72});expect(result.data[2][3]).toEqual({avg:6,stddev:8.48528137423857})}));it("0 can be min",(function(){var dataArr=[["A",10],["B",10],["B",0],["A",10],["C",-10],["B",3],["A",10],["C",-4],["A",14],["C",0]],schemaArr=[{name:"Item",type:"string"},{name:"Value",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Item"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"min"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[1][0]).toBe("B");expect(result.data[1][1]).toBe(0);DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Value"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"min"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[1][0]).toBe("B");expect(result.data[1][1]).toBe(0)}));it("0 can be max",(function(){var dataArr=[["A",10],["B",10],["B",0],["A",10],["C",-10],["B",3],["A",10],["C",-4],["A",14],["C",0]],schemaArr=[{name:"Item",type:"string"},{name:"Value",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Item"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"max"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[2][0]).toBe("C");expect(result.data[2][1]).toBe(0);DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Value"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"max"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[0][0]).toBe("C");expect(result.data[0][1]).toBe(0)}));it("0 can be first value",(function(){var dataArr=[["B",null,2],["A",10,1],["B",0,1],["B",10,2],["A",10,1],["C",-10,1],["A",10,2],["C",-4,1],["A",14,1],["C",0,2],["B",2,1],["A",3,2],["C",10,2]],schemaArr=[{name:"Item",type:"string"},{name:"Value",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Item"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"first"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[1][0]).toBe("B");expect(result.data[1][1]).toBe(0);DS=new _datastore.default(dataArr,schemaArr,{enableIndex:false});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"first"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[0][0]).toBe("B");expect(result.data[0][1]).toBe(0)}));it("0 can be last",(function(){var dataArr=[["B",null,2],["A",10,1],["B",10,2],["A",10,1],["C",-10,1],["A",10,2],["C",-4,1],["A",14,1],["B",2,1],["A",3,2],["C",10,2],["C",0,2],["B",0,1]],schemaArr=[{name:"Item",type:"string"},{name:"Value",type:"number"}];DS=new _datastore.default(dataArr,schemaArr,{enableIndex:true,indexBy:"Item"});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"last"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[2][0]).toBe("C");expect(result.data[2][1]).toBe(0);DS=new _datastore.default(dataArr,schemaArr,{enableIndex:false});DT=DS.getDataTable();groupByOps=(0,_groupBy.default)([{column:"Item"}],[{column:"Value",operation:"last"}]);result=groupByOps.fn(DT._data,DT._schema,DT._config);expect(result.data.constructor).toBe(Array);expect(result.data.length).toBe(3);expect(result.data[2][0]).toBe("C");expect(result.data[2][1]).toBe(0)}))}));
;