class TestTableColumnMethod: '''Test column()''' def setUp(self): self.headers = ['x', 'y', 'z'] self.t = Table(self.headers) self.t.append((1,2,3)) self.t.append((4,5,6)) self.t.append((7,8,9)) def test_column_by_index(self): assert list(self.t.column(0)) == [1,4,7] assert list(self.t.column(1)) == [2,5,8] assert list(self.t.column(2)) == [3,6,9] def test_column_by_reverse_index(self): assert list(self.t.column(-1)) == [3,6,9] assert list(self.t.column(-2)) == [2,5,8] assert list(self.t.column(-3)) == [1,4,7] def test_column_by_name(self): assert list(self.t.column('x')) == [1,4,7] assert list(self.t.column('y')) == [2,5,8] assert list(self.t.column('z')) == [3,6,9] @raises(IndexError) def test_column_by_bad_index(self): self.t.column(15) @raises(IndexError) def test_column_by_bad_reverse_index(self): self.t.column(-15) @raises(KeyError) def test_column_by_bad_name(self): self.t.column('unknown')
class TestTableColumnMethod: '''Test column()''' def setUp(self): self.headers = ['x', 'y', 'z'] self.t = Table(self.headers) self.t.append((1, 2, 3)) self.t.append((4, 5, 6)) self.t.append((7, 8, 9)) def test_column_by_index(self): assert list(self.t.column(0)) == [1, 4, 7] assert list(self.t.column(1)) == [2, 5, 8] assert list(self.t.column(2)) == [3, 6, 9] def test_column_by_reverse_index(self): assert list(self.t.column(-1)) == [3, 6, 9] assert list(self.t.column(-2)) == [2, 5, 8] assert list(self.t.column(-3)) == [1, 4, 7] def test_column_by_name(self): assert list(self.t.column('x')) == [1, 4, 7] assert list(self.t.column('y')) == [2, 5, 8] assert list(self.t.column('z')) == [3, 6, 9] @raises(IndexError) def test_column_by_bad_index(self): self.t.column(15) @raises(IndexError) def test_column_by_bad_reverse_index(self): self.t.column(-15) @raises(KeyError) def test_column_by_bad_name(self): self.t.column('unknown')
class TestTableSorting: '''Test sort, sort_by_col, reverse''' def setUp(self): self.headers = ['x', 'y', 'z'] self.t = Table(self.headers) self.t.append((1,2,9)) self.t.append((1,-5,6)) self.t.append((-1,8,9)) self.t.append((10,11,-12)) self.t.append((-13,11,15)) self.t.append((16,0,1)) def test_sort_by_single_col(self): self.t.sort('y') assert list(self.t.column('y')) == [-5, 0, 2, 8, 11, 11] assert self.t[0] == (1,-5,6) assert self.t[-2] == (10,11,-12) assert self.t[-1] == (-13,11,15) def test_sort_by_single_col_numeric(self): self.t.sort(1) assert list(self.t.column('y')) == [-5, 0, 2, 8, 11, 11] assert self.t[0] == (1,-5,6) assert self.t[-2] == (10,11,-12) assert self.t[-1] == (-13,11,15) def test_sort_by_multiple_col(self): self.t.sort(['x', 'z']) assert list(self.t.column('x')) == [-13, -1, 1, 1, 10, 16] assert list(self.t.column('z')) == [15, 9, 6, 9, -12, 1] def test_sort_by_multiple_col_numeric(self): self.t.sort([0, 2]) assert list(self.t.column('x')) == [-13, -1, 1, 1, 10, 16] assert list(self.t.column('z')) == [15, 9, 6, 9, -12, 1] def test_sort_by_single_col_reverse(self): self.t.sort('y', reverse=True) assert list(self.t.column('y')) == [11, 11, 8, 2, 0, -5] # Even though the sort order is reversed, in the case of equal numbers # the original row ordering remains assert list(self.t.column('z')) == [-12, 15, 9, 9, 1, 6] def test_sort_by_multiple_col_reverse(self): self.t.sort(['z', 'y', 'x'], reverse=True) assert self.t[0] == (-13,11,15) assert self.t[1] == (-1,8,9) assert self.t[2] == (1,2,9) assert self.t[3] == (1,-5,6) assert self.t[4] == (16,0,1) assert self.t[5] == (10,11,-12) def test_sort_by_func(self): func = lambda row: sum(map(abs, row)) self.t.sort(func) assert self.t[0] == (1,2,9) assert self.t[1] == (1,-5,6) assert self.t[2] == (16,0,1) assert self.t[3] == (-1,8,9) assert self.t[4] == (10,11,-12) assert self.t[5] == (-13,11,15) def test_sort_by_func_reverse(self): func = lambda row: sum(map(abs, row)) self.t.sort(key=func, reverse=True) assert self.t[0] == (-13,11,15) assert self.t[1] == (10,11,-12) assert self.t[2] == (-1,8,9) assert self.t[3] == (16,0,1) # Equal sort items retain original ordering, even with reverse flag assert self.t[4] == (1,2,9) assert self.t[5] == (1,-5,6) def test_reverse(self): self.t.reverse() assert self.t[0] == (16,0,1) assert self.t[1] == (-13,11,15) assert self.t[2] == (10,11,-12) assert self.t[3] == (-1,8,9) assert self.t[4] == (1,-5,6) assert self.t[5] == (1,2,9)
class TestTableSorting: '''Test sort, sort_by_col, reverse''' def setUp(self): self.headers = ['x', 'y', 'z'] self.t = Table(self.headers) self.t.append((1, 2, 9)) self.t.append((1, -5, 6)) self.t.append((-1, 8, 9)) self.t.append((10, 11, -12)) self.t.append((-13, 11, 15)) self.t.append((16, 0, 1)) def test_sort_by_single_col(self): self.t.sort('y') assert list(self.t.column('y')) == [-5, 0, 2, 8, 11, 11] assert self.t[0] == (1, -5, 6) assert self.t[-2] == (10, 11, -12) assert self.t[-1] == (-13, 11, 15) def test_sort_by_single_col_numeric(self): self.t.sort(1) assert list(self.t.column('y')) == [-5, 0, 2, 8, 11, 11] assert self.t[0] == (1, -5, 6) assert self.t[-2] == (10, 11, -12) assert self.t[-1] == (-13, 11, 15) def test_sort_by_multiple_col(self): self.t.sort(['x', 'z']) assert list(self.t.column('x')) == [-13, -1, 1, 1, 10, 16] assert list(self.t.column('z')) == [15, 9, 6, 9, -12, 1] def test_sort_by_multiple_col_numeric(self): self.t.sort([0, 2]) assert list(self.t.column('x')) == [-13, -1, 1, 1, 10, 16] assert list(self.t.column('z')) == [15, 9, 6, 9, -12, 1] def test_sort_by_single_col_reverse(self): self.t.sort('y', reverse=True) assert list(self.t.column('y')) == [11, 11, 8, 2, 0, -5] # Even though the sort order is reversed, in the case of equal numbers # the original row ordering remains assert list(self.t.column('z')) == [-12, 15, 9, 9, 1, 6] def test_sort_by_multiple_col_reverse(self): self.t.sort(['z', 'y', 'x'], reverse=True) assert self.t[0] == (-13, 11, 15) assert self.t[1] == (-1, 8, 9) assert self.t[2] == (1, 2, 9) assert self.t[3] == (1, -5, 6) assert self.t[4] == (16, 0, 1) assert self.t[5] == (10, 11, -12) def test_sort_by_func(self): func = lambda row: sum(map(abs, row)) self.t.sort(func) assert self.t[0] == (1, 2, 9) assert self.t[1] == (1, -5, 6) assert self.t[2] == (16, 0, 1) assert self.t[3] == (-1, 8, 9) assert self.t[4] == (10, 11, -12) assert self.t[5] == (-13, 11, 15) def test_sort_by_func_reverse(self): func = lambda row: sum(map(abs, row)) self.t.sort(key=func, reverse=True) assert self.t[0] == (-13, 11, 15) assert self.t[1] == (10, 11, -12) assert self.t[2] == (-1, 8, 9) assert self.t[3] == (16, 0, 1) # Equal sort items retain original ordering, even with reverse flag assert self.t[4] == (1, 2, 9) assert self.t[5] == (1, -5, 6) def test_reverse(self): self.t.reverse() assert self.t[0] == (16, 0, 1) assert self.t[1] == (-13, 11, 15) assert self.t[2] == (10, 11, -12) assert self.t[3] == (-1, 8, 9) assert self.t[4] == (1, -5, 6) assert self.t[5] == (1, 2, 9)