def setUp(self): self.fmt = DataFormat(['a', 'b'], ['t', 'value']) fields = self.fmt self.rows = [ Record(fields, 1, 1, 5, 100), Record(fields, 1, 2, 7, 120), Record(fields, 1, 3, 2, 114), Record(fields, 2, 1, 3, 180), Record(fields, 2, 2, 6, 119), Record(fields, 2, 3, 8, 107), Record(fields, 3, 1, 4, 134), Record(fields, 3, 2, 2, 162), Record(fields, 3, 3, 5, 111), Record(fields, 4, 1, 3, 143), Record(fields, 4, 2, 6, 121), Record(fields, 4, 3, 7, 115), ] self.value_ordered = [ Record(fields, 1, 1, 5, 100), Record(fields, 2, 3, 8, 107), Record(fields, 3, 3, 5, 111), Record(fields, 1, 3, 2, 114), Record(fields, 4, 3, 7, 115), Record(fields, 2, 2, 6, 119), Record(fields, 1, 2, 7, 120), Record(fields, 4, 2, 6, 121), Record(fields, 3, 1, 4, 134), Record(fields, 4, 1, 3, 143), Record(fields, 3, 2, 2, 162), Record(fields, 2, 1, 3, 180), ] self.res = Results(fields, self.rows)
def test_select_complex(self): selected = self.res.select('a', value=sum, t_min=Min('t')) fields = ('a', 'value', 't_min') expected = Results(fields, [ Record(fields, 1, 100 + 120 + 114, 2), Record(fields, 2, 180 + 119 + 107, 3), Record(fields, 3, 134 + 162 + 111, 2), Record(fields, 4, 143 + 121 + 115, 3), ]) self.assertEqualAsMultisets(selected, expected)
def test_select_sum(self): selected = self.res.select('a', value=sum) fields = ('a', 'value') expected = Results(fields, [ Record(fields, 1, 100 + 120 + 114), Record(fields, 2, 180 + 119 + 107), Record(fields, 3, 134 + 162 + 111), Record(fields, 4, 143 + 121 + 115), ]) self.assertEqualAsMultisets(selected, expected)
def test_groupBy(self): byB = { (1,): Results(self.fmt, [ Record(self.fmt, 1, 1, 5, 100), Record(self.fmt, 2, 1, 3, 180), Record(self.fmt, 3, 1, 4, 134), Record(self.fmt, 4, 1, 3, 143), ]), (2,): Results(self.fmt, [ Record(self.fmt, 1, 2, 7, 120), Record(self.fmt, 2, 2, 6, 119), Record(self.fmt, 3, 2, 2, 162), Record(self.fmt, 4, 2, 6, 121), ]), (3,): Results(self.fmt, [ Record(self.fmt, 1, 3, 2, 114), Record(self.fmt, 2, 3, 8, 107), Record(self.fmt, 3, 3, 5, 111), Record(self.fmt, 4, 3, 7, 115), ]) } gathered = self.res.groupBy('b') self.assertEqual(gathered, byB)
def test_simple_select(self): fields = ('a', 'value') selected = self.res.select(*fields) expected = Results(fields, [ Record(fields, 1, 100), Record(fields, 1, 120), Record(fields, 1, 114), Record(fields, 2, 180), Record(fields, 2, 119), Record(fields, 2, 107), Record(fields, 3, 134), Record(fields, 3, 162), Record(fields, 3, 111), Record(fields, 4, 143), Record(fields, 4, 121), Record(fields, 4, 115), ]) self.assertEqualAsMultisets(selected, expected)
def test_orderByDesc(self): ordered = self.res.orderBy('value', desc=True) other = Results(self.fmt.fields, self.value_ordered[::-1]) self.assertEqual(ordered, other)
def test_orderBy(self): ordered = self.res.orderBy('value') other = Results(self.fmt.fields, self.value_ordered) self.assertEqual(ordered, other)
def test_column_order_does_not_matter(self): other = Results(reversed(self.fmt.fields), self.rows) self.assertEqual(self.res, other)
def test_equal_results_are_equal(self): other = Results(self.fmt.fields, self.rows) self.assertEqual(self.res, other)
class ResultsTest(unittest.TestCase): def setUp(self): self.fmt = DataFormat(['a', 'b'], ['t', 'value']) fields = self.fmt self.rows = [ Record(fields, 1, 1, 5, 100), Record(fields, 1, 2, 7, 120), Record(fields, 1, 3, 2, 114), Record(fields, 2, 1, 3, 180), Record(fields, 2, 2, 6, 119), Record(fields, 2, 3, 8, 107), Record(fields, 3, 1, 4, 134), Record(fields, 3, 2, 2, 162), Record(fields, 3, 3, 5, 111), Record(fields, 4, 1, 3, 143), Record(fields, 4, 2, 6, 121), Record(fields, 4, 3, 7, 115), ] self.value_ordered = [ Record(fields, 1, 1, 5, 100), Record(fields, 2, 3, 8, 107), Record(fields, 3, 3, 5, 111), Record(fields, 1, 3, 2, 114), Record(fields, 4, 3, 7, 115), Record(fields, 2, 2, 6, 119), Record(fields, 1, 2, 7, 120), Record(fields, 4, 2, 6, 121), Record(fields, 3, 1, 4, 134), Record(fields, 4, 1, 3, 143), Record(fields, 3, 2, 2, 162), Record(fields, 2, 1, 3, 180), ] self.res = Results(fields, self.rows) def test_equal_results_are_equal(self): other = Results(self.fmt.fields, self.rows) self.assertEqual(self.res, other) def test_column_order_does_not_matter(self): other = Results(reversed(self.fmt.fields), self.rows) self.assertEqual(self.res, other) def test_orderBy(self): ordered = self.res.orderBy('value') other = Results(self.fmt.fields, self.value_ordered) self.assertEqual(ordered, other) def test_orderByDesc(self): ordered = self.res.orderBy('value', desc=True) other = Results(self.fmt.fields, self.value_ordered[::-1]) self.assertEqual(ordered, other) def test_gatherBy(self): byB = { (1,): { 'a': [1, 2, 3, 4], 't': [5, 3, 4, 3], 'value': [100, 180, 134, 143] }, (2,): { 'a': [1, 2, 3, 4], 't': [7, 6, 2, 6], 'value': [120, 119, 162, 121] }, (3,): { 'a': [1, 2, 3, 4], 't': [2, 8, 5, 7], 'value': [114, 107, 111, 115] } } gathered = self.res.gatherBy('b') self.assertEqual(gathered, byB) def test_groupBy(self): byB = { (1,): Results(self.fmt, [ Record(self.fmt, 1, 1, 5, 100), Record(self.fmt, 2, 1, 3, 180), Record(self.fmt, 3, 1, 4, 134), Record(self.fmt, 4, 1, 3, 143), ]), (2,): Results(self.fmt, [ Record(self.fmt, 1, 2, 7, 120), Record(self.fmt, 2, 2, 6, 119), Record(self.fmt, 3, 2, 2, 162), Record(self.fmt, 4, 2, 6, 121), ]), (3,): Results(self.fmt, [ Record(self.fmt, 1, 3, 2, 114), Record(self.fmt, 2, 3, 8, 107), Record(self.fmt, 3, 3, 5, 111), Record(self.fmt, 4, 3, 7, 115), ]) } gathered = self.res.groupBy('b') self.assertEqual(gathered, byB) def assertEqualAsMultisets(self, first, second): if not equal_as_multisets(first, second): raise AssertionError('{0} and {1} not equal as multisets' .format(first, second)) def test_simple_select(self): fields = ('a', 'value') selected = self.res.select(*fields) expected = Results(fields, [ Record(fields, 1, 100), Record(fields, 1, 120), Record(fields, 1, 114), Record(fields, 2, 180), Record(fields, 2, 119), Record(fields, 2, 107), Record(fields, 3, 134), Record(fields, 3, 162), Record(fields, 3, 111), Record(fields, 4, 143), Record(fields, 4, 121), Record(fields, 4, 115), ]) self.assertEqualAsMultisets(selected, expected) def test_select_sum(self): selected = self.res.select('a', value=sum) fields = ('a', 'value') expected = Results(fields, [ Record(fields, 1, 100 + 120 + 114), Record(fields, 2, 180 + 119 + 107), Record(fields, 3, 134 + 162 + 111), Record(fields, 4, 143 + 121 + 115), ]) self.assertEqualAsMultisets(selected, expected) def test_select_complex(self): selected = self.res.select('a', value=sum, t_min=Min('t')) fields = ('a', 'value', 't_min') expected = Results(fields, [ Record(fields, 1, 100 + 120 + 114, 2), Record(fields, 2, 180 + 119 + 107, 3), Record(fields, 3, 134 + 162 + 111, 2), Record(fields, 4, 143 + 121 + 115, 3), ]) self.assertEqualAsMultisets(selected, expected)