#NEWLINE# def testAggregate( self ) : #NEWLINE# #INDENT# ' Test aggregation ' #NEWLINE# assertIn = self . assertIn #NEWLINE# assertEqual = self . assertEqual #NEWLINE# items = [ { #NEWLINE# #INDENT# 'name' : 'Item1' , #NEWLINE# 'type' : 'A' , #NEWLINE# 'value' : 2.6 , #NEWLINE# #UNINDENT# } , { #NEWLINE# #INDENT# 'name' : 'Item2' , #NEWLINE# 'type' : 'C' , #NEWLINE# 'value' : 4.9 , #NEWLINE# #UNINDENT# } , { #NEWLINE# #INDENT# 'name' : 'Item3' , #NEWLINE# 'type' : 'D' , #NEWLINE# 'value' : 7.2 , #NEWLINE# #UNINDENT# } , { #NEWLINE# #INDENT# 'name' : 'Item4' , #NEWLINE# 'type' : 'B' , #NEWLINE# 'value' : 1.5 , #NEWLINE# #UNINDENT# } , { #NEWLINE# #INDENT# 'name' : 'Item5' , #NEWLINE# 'type' : 'A' , #NEWLINE# 'value' : 9.4 , #NEWLINE# #UNINDENT# } , { #NEWLINE# #INDENT# 'name' : 'Item6' , #NEWLINE# 'type' : 'D' , #NEWLINE# 'value' : 6.1 , #NEWLINE# #UNINDENT# } , { #NEWLINE# #INDENT# 'name' : 'Item7' , #NEWLINE# 'type' : 'E' , #NEWLINE# 'value' : 3.5 , #NEWLINE# #UNINDENT# } ] #NEWLINE# results = { #NEWLINE# #INDENT# 'A' : 12.0 , #NEWLINE# 'B' : 1.5 , #NEWLINE# 'C' : 4.9 , #NEWLINE# 'D' : 13.3 , #NEWLINE# 'E' : 3.5 , #NEWLINE# #UNINDENT# } #NEWLINE# gi = S3GroupedItems ( items , groupby = 'type' ) #NEWLINE# aggregate = gi . aggregate ( 'sum' , 'value' ) #NEWLINE# assertEqual ( aggregate . result , 35.2 ) #NEWLINE# for group in gi . groups : #NEWLINE# #INDENT# t = group [ 'type' ] #NEWLINE# assertIn ( ( 'sum' , 'value' ) , group . _aggregates ) #NEWLINE# assertEqual ( group [ ( 'sum' , 'value' ) ] , results [ t ] )