示例#1
0
    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)
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
 def test_orderByDesc(self):
     ordered = self.res.orderBy('value', desc=True)
     other = Results(self.fmt.fields, self.value_ordered[::-1])
     self.assertEqual(ordered, other)
示例#7
0
 def test_orderBy(self):
     ordered = self.res.orderBy('value')
     other = Results(self.fmt.fields, self.value_ordered)
     self.assertEqual(ordered, other)
示例#8
0
 def test_column_order_does_not_matter(self):
     other = Results(reversed(self.fmt.fields), self.rows)
     self.assertEqual(self.res, other)
示例#9
0
 def test_equal_results_are_equal(self):
     other = Results(self.fmt.fields, self.rows)
     self.assertEqual(self.res, other)
示例#10
0
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)