def test_rangeaggregate_multifield(): table1 = (('foo', 'bar'), ('a', 3), ('a', 7), ('b', 2), ('b', 1), ('b', 9), ('c', 4), ('d', 3)) # dict arg aggregators = OrderedDict() aggregators['foocount'] = len aggregators['foojoin'] = 'foo', strjoin('') aggregators['foolist'] = 'foo' # default is list table2 = rangeaggregate(table1, 'bar', 2, aggregators) expect2 = (('bar', 'foocount', 'foojoin', 'foolist'), ((1, 3), 2, 'bb', ['b', 'b']), ((3, 5), 3, 'adc', ['a', 'd', 'c']), ((5, 7), 0, '', []), ((7, 9), 1, 'a', ['a']), ((9, 11), 1, 'b', ['b'])) ieq(expect2, table2) # suffix notation table3 = rangeaggregate(table1, 'bar', 2) table3['foocount'] = len table3['foojoin'] = 'foo', strjoin('') table3['foolist'] = 'foo' # default is list ieq(expect2, table3) # list arg aggregators = [('foocount', len), ('foojoin', 'foo', strjoin('')), ('foolist', 'foo', list)] table4 = rangeaggregate(table1, 'bar', 2, aggregators) ieq(expect2, table4)
def test_aggregate_more(): table1 = (('foo', 'bar'), ('aa', 3), ('aa', 7), ('bb', 2), ('bb', 1), ('bb', 9), ('cc', 4), ('dd', 3)) aggregators = OrderedDict() aggregators['minbar'] = 'bar', min aggregators['maxbar'] = 'bar', max aggregators['sumbar'] = 'bar', sum aggregators['listbar'] = 'bar' # default aggregation is list aggregators['bars'] = 'bar', strjoin(', ') table2 = aggregate(table1, 'foo', aggregators) expect2 = (('foo', 'minbar', 'maxbar', 'sumbar', 'listbar', 'bars'), ('aa', 3, 7, 10, [3, 7], '3, 7'), ('bb', 1, 9, 12, [2, 1, 9], '2, 1, 9'), ('cc', 4, 4, 4, [4], '4'), ('dd', 3, 3, 3, [3], '3')) ieq(expect2, table2) ieq(expect2, table2) # check can iterate twice table3 = aggregate(table1, 'foo') table3['minbar'] = 'bar', min table3['maxbar'] = 'bar', max table3['sumbar'] = 'bar', sum table3['listbar'] = 'bar' # default aggregation is list table3['bars'] = 'bar', strjoin(', ') ieq(expect2, table3)
def test_aggregate_more_key_is_None(): table1 = (('foo', 'bar'), ('aa', 3), ('aa', 7), ('bb', 2), ('bb', 1), ('bb', 9), ('cc', 4), ('dd', 3)) aggregators = OrderedDict() aggregators['minbar'] = 'bar', min aggregators['maxbar'] = 'bar', max aggregators['sumbar'] = 'bar', sum aggregators['listbar'] = 'bar' # default aggregation is list aggregators['bars'] = 'bar', strjoin(', ') table2 = aggregate(table1, None, aggregators) expect2 = (('minbar', 'maxbar', 'sumbar', 'listbar', 'bars'), (1, 9, 29, [3, 7, 2, 1, 9, 4, 3], '3, 7, 2, 1, 9, 4, 3')) ieq(expect2, table2) ieq(expect2, table2) # check can iterate twice table3 = aggregate(table1, None) table3['minbar'] = 'bar', min table3['maxbar'] = 'bar', max table3['sumbar'] = 'bar', sum table3['listbar'] = 'bar' # default aggregation is list table3['bars'] = 'bar', strjoin(', ') ieq(expect2, table3)
def test_aggregate_multifield(): table1 = (('foo', 'bar'), ('a', 3), ('a', 7), ('b', 2), ('b', 1), ('b', 9), ('c', 4)) # dict arg aggregators = OrderedDict() aggregators['count'] = len aggregators['minbar'] = 'bar', min aggregators['maxbar'] = 'bar', max aggregators['sumbar'] = 'bar', sum aggregators['listbar'] = 'bar', list aggregators['bars'] = 'bar', strjoin(', ') table2 = aggregate(table1, 'foo', aggregators) expect2 = (('foo', 'count', 'minbar', 'maxbar', 'sumbar', 'listbar', 'bars'), ('a', 2, 3, 7, 10, [3, 7], '3, 7'), ('b', 3, 1, 9, 12, [2, 1, 9], '2, 1, 9'), ('c', 1, 4, 4, 4, [4], '4')) ieq(expect2, table2) ieq(expect2, table2) # check can iterate twice # use suffix notation table3 = aggregate(table1, 'foo') table3['count'] = len table3['minbar'] = 'bar', min table3['maxbar'] = 'bar', max table3['sumbar'] = 'bar', sum table3['listbar'] = 'bar' # default aggregation is list table3['bars'] = 'bar', strjoin(', ') ieq(expect2, table3) # list arg aggregators = [('count', len), ('minbar', 'bar', min), ('maxbar', 'bar', max), ('sumbar', 'bar', sum), ('listbar', 'bar', list), ('bars', 'bar', strjoin(', '))] table4 = aggregate(table1, 'foo', aggregators) ieq(expect2, table4) ieq(expect2, table4) # check can iterate twice