def test_list_block_ids(self):

        bid1 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000001')
        bid2 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000002')
        bid3 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000003')
        bid4 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000004')
        bid5 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000005')
        bid6 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000006')

        region_levels = [
            [
                ['aa', 'ee', {'block_id': bid1}],
                ['hh', 'zz', {'block_id': bid2}]
            ],
            [
                ['ea', 'ff', {'block_id': bid4}],
                ['mm', 'yy', {'block_id': bid5}]
            ],
        ]

        cases = (
                (None, [bid1, bid2, bid4, bid5]),
                (bid3, [bid4, bid5]),
                (bid5, [bid5]),
                (bid6, []),
        )

        region = Region(levels=region_levels)

        for bid, excepted in cases:
            block_ids = region.list_block_ids(start_block_id=bid)
            self.assertEqual(excepted, block_ids)
    def test_replace_block_id(self):

        bid1 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000001')
        bid2 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000002')
        bid3 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000003')
        bid4 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000004')
        bid5 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000005')
        bid6 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000006')

        region_levels = [
            [['aa', 'ee', {'block_id': bid1}], ['hh', 'zz', {'block_id': bid2}]],
            [['ea', 'ff', {'block_id': bid4}], ['mm', 'yy', {'block_id': bid5}]],
        ]

        excepted_region_levels = [
            [['aa', 'ee', BlockDesc({'block_id': bid1})], ['hh', 'zz', BlockDesc({'block_id': bid2})]],
            [['ea', 'ff', BlockDesc({'block_id': bid3})], ['mm', 'yy', BlockDesc({'block_id': bid5})]],
        ]

        region = Region(levels=region_levels)

        region.replace_block_id(bid4, bid3)
        self.assertEqual(excepted_region_levels, region['levels'])

        self.assertRaises(BlockNotInRegion, region.replace_block_id, bid6, bid1)
Example #3
0
    def test_list_block_ids(self):

        region_levels = [
            [
                ['aa', 'ee', tbid1],
                ['hh', 'zz', tbid2]
            ],
            [
                ['ea', 'ff', tbid4],
                ['mm', 'yy', tbid5]
            ],
        ]

        cases = (
                (None, [tbid1, tbid2, tbid4, tbid5]),
                (tbid3, [tbid4, tbid5]),
                (tbid5, [tbid5]),
                (tbid6, []),
        )

        region = Region(levels=region_levels)

        for bid, excepted in cases:
            block_ids = region.list_block_ids(start_block_id=bid)
            self.assertEqual(excepted, block_ids)
    def test_find_merge(self):

        region_levels_cases = [
            [[[
                ['aa', 'ee', {'size': 8}],
                ['ee', 'ff', {'size': 16}],
                ['pp', 'zz', {'size': 8}],
                ['zz', None, {'size': 4}]
            ],
                [
                ['aa', 'pz', {'size': 4}],
                ['qq', 'zz', {'size': 8}]
            ]],
                (1, ['qq', 'zz', BlockDesc(size=8)], [['pp', 'zz', BlockDesc(size=8)]])],
            [[[
                ['aa', 'ee', {'size': 8}],
                ['ee', 'ff', {'size': 8}],
                ['hh', 'hz', {'size': 8}]
            ],
                [
                ['mm', 'yy', {'size': 8}]
            ]],
                None]
        ]

        for levels, excepted in region_levels_cases:
            region = Region(levels=levels)
            res = region.find_merge()

            self.assertEqual(excepted, res)
Example #5
0
    def test_replace_block_id(self):

        bid1 = BlockID('d1g0006300000001230101c62d8736c72800020000000001')
        bid2 = BlockID('d1g0006300000001230101c62d8736c72800020000000002')
        bid3 = BlockID('d1g0006300000001230101c62d8736c72800020000000003')
        bid4 = BlockID('d1g0006300000001230101c62d8736c72800020000000004')
        bid5 = BlockID('d1g0006300000001230101c62d8736c72800020000000005')
        bid6 = BlockID('d1g0006300000001230101c62d8736c72800020000000006')

        region_levels = [
            [['aa', 'ee', {'block_id': bid1}], ['hh', 'zz', {'block_id': bid2}]],
            [['ea', 'ff', {'block_id': bid4}], ['mm', 'yy', {'block_id': bid5}]],
        ]

        excepted_region_levels = [
            [['aa', 'ee', BlockDesc({'block_id': bid1})], ['hh', 'zz', BlockDesc({'block_id': bid2})]],
            [['ea', 'ff', BlockDesc({'block_id': bid3})], ['mm', 'yy', BlockDesc({'block_id': bid5})]],
        ]

        region = Region(levels=region_levels)

        region.replace_block_id(bid4, bid3)
        self.assertEqual(excepted_region_levels, region['levels'])

        self.assertRaises(BlockNotInRegion, region.replace_block_id, bid6, bid1)
Example #6
0
    def test_find_merge(self):

        region_levels_cases = [
            [[[
                ['aa', 'ee', {'size': 8}],
                ['ee', 'ff', {'size': 16}],
                ['pp', 'zz', {'size': 8}],
                ['zz', None, {'size': 4}]
            ],
                [
                ['aa', 'pz', {'size': 4}],
                ['qq', 'zz', {'size': 8}]
            ]],
                (1, ['qq', 'zz', BlockDesc(size=8)], [['pp', 'zz', BlockDesc(size=8)]])],
            [[[
                ['aa', 'ee', {'size': 8}],
                ['ee', 'ff', {'size': 8}],
                ['hh', 'hz', {'size': 8}]
            ],
                [
                ['mm', 'yy', {'size': 8}]
            ]],
                None]
        ]

        for levels, excepted in region_levels_cases:
            region = Region(levels=levels)
            res = region.find_merge()

            self.assertEqual(excepted, res)
Example #7
0
    def test_list_block_ids(self):

        bid1 = BlockID('d1g0006300000001230101c62d8736c72800020000000001')
        bid2 = BlockID('d1g0006300000001230101c62d8736c72800020000000002')
        bid3 = BlockID('d1g0006300000001230101c62d8736c72800020000000003')
        bid4 = BlockID('d1g0006300000001230101c62d8736c72800020000000004')
        bid5 = BlockID('d1g0006300000001230101c62d8736c72800020000000005')
        bid6 = BlockID('d1g0006300000001230101c62d8736c72800020000000006')

        region_levels = [
            [
                ['aa', 'ee', {'block_id': bid1}],
                ['hh', 'zz', {'block_id': bid2}]
            ],
            [
                ['ea', 'ff', {'block_id': bid4}],
                ['mm', 'yy', {'block_id': bid5}]
            ],
        ]

        cases = (
                (None, [bid1, bid2, bid4, bid5]),
                (bid3, [bid4, bid5]),
                (bid5, [bid5]),
                (bid6, []),
        )

        region = Region(levels=region_levels)

        for bid, excepted in cases:
            block_ids = region.list_block_ids(start_block_id=bid)
            self.assertEqual(excepted, block_ids)
Example #8
0
    def test_json(self):
        region = Region({
            'range': ['a', 'z'],
            'levels':
            [[['a', 'b', BlockDesc()],
              [
                  'b', 'c',
                  BlockDesc(
                      size=2,
                      block_id=BlockID(
                          'd1g0006300000001230101idc000c62d8736c72800020000000001'
                      ))
              ]]]
        })
        rst = utfjson.dump(region)
        expected = (
            '{"range": ["a", "z"], "levels": [[["a", "b", '
            '{"is_del": 0, "range": null, "block_id": null, "size": 0}], '
            '["b", "c", {"is_del": 0, "range": null, '
            '"block_id": "d1g0006300000001230101idc000c62d8736c72800020000000001", "size": 2}]]], "idc": ""}'
        )
        self.assertEqual(expected, rst)

        loaded = Region(utfjson.load(rst))
        self.assertEqual(region, loaded)
Example #9
0
    def test_init(self):

        region_cases = [
            (
                {},
                {'idc': '', 'range': None, 'levels': []}
            ),
            (
                {'range': ['a', 'b'], 'idc': '.bei'},
                {'idc': '.bei', 'range': ['a', 'b'], 'levels': []}
            ),
            (
                {'levels': [[['a', 'b', BlockDesc()]], [['c', 'd', BlockDesc(size=1)]]]},
                {'idc': '', 'range': None, 'levels': [[['a', 'b', BlockDesc()]], [['c', 'd', BlockDesc(size=1)]]]}
            ),
            (
                {'range': ['a', 'z'], 'levels': [[['a', 'b', BlockDesc()], ['b', 'c', BlockDesc(size=2)]]]},
                {'idc': '', 'range': ['a', 'z'], 'levels': [[['a', 'b', BlockDesc()], ['b', 'c', BlockDesc(size=2)]]]}
            ),
        ]

        for case, excepted in region_cases:

            region = Region(case)
            self.assertEqual(excepted, region)

        region_cases_argkv = [
            (
                [[['a', 'b', BlockDesc(size=1)], ['c', 'd', BlockDesc(size=2)]]],
                {'idc': '', 'range': None, 'levels': [[['a', 'b', BlockDesc(size=1)], ['c', 'd', BlockDesc(size=2)]]]}
            ),
            (
                ['a', 'z'],
                {'idc': '', 'range': ['a', 'z'], 'levels': []}
            ),
            (
                [],
                {'idc': '', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)], ['c', 'd', BlockDesc(size=2)]]]}
            ),
        ]

        region = Region(levels=region_cases_argkv[0][0])
        self.assertEqual(region_cases_argkv[0][1], region)

        region = Region(range=region_cases_argkv[1][0])
        self.assertEqual(region_cases_argkv[1][1], region)

        region = Region(levels=region_cases_argkv[0][0], range=region_cases_argkv[1][0])
        self.assertEqual(region_cases_argkv[2][1], region)
Example #10
0
    def test_json(self):
        region = Region({
                'range': ['a', 'z'],
                'levels': [
                    [['a', 'b', tbid1], ['b', 'c', tbid2]]
                ]})

        rst = utfjson.dump(region)

        expected = ('{"range": ["a", "z"], "levels": '
                    '[[["a", "b", "' + tbid1 + '"], ["b", "c", "' + tbid2 + '"]]], "idc": ""}')

        self.assertEqual(utfjson.load(expected), region)
        self.assertEqual(region, Region(utfjson.load(rst)))
Example #11
0
    def test_replace_block_id(self):

        region_levels = [
            [['aa', 'ee', tbid1], ['hh', 'zz', tbid2]],
            [['ea', 'ff', tbid4], ['mm', 'yy', tbid5]],
        ]

        excepted_region_levels = [
            [['aa', 'ee', tbid1], ['hh', 'zz', tbid2]],
            [['ea', 'ff', tbid3], ['mm', 'yy', tbid5]],
        ]

        region = Region(levels=region_levels)

        region.replace_block_id(tbid4, tbid3)
        self.assertEqual(excepted_region_levels, region['levels'])

        self.assertRaises(BlockNotInRegion, region.replace_block_id, tbid6, tbid1)
    def test_add_block(self):

        region_cases = (
            (
                {},
                (['a', 'c'], BlockDesc(), None),
                {'idc': '', 'range': None, 'levels': [
                    [['a', 'c', BlockDesc()]],
                ]},
                None,
            ),
            (
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)], ['b', 'c', BlockDesc(size=2)]],
                ]},
                (['c', 'd'], BlockDesc(), None),
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)], ['b', 'c', BlockDesc(size=2)]],
                    [['c', 'd', BlockDesc()]],
                ]},
                None,
            ),
            (
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)]],
                ]},
                (['c', 'd'], BlockDesc(), 0),
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)], ['c', 'd', BlockDesc()]],
                    [['b', 'c', BlockDesc(size=2)]],
                ]},
                None,
            ),
            (
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)]],
                ]},
                (['c', 'd'], BlockDesc(), 1),
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)], ['c', 'd', BlockDesc()]],
                ]},
                None,
            ),
            (
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)]],
                ]},
                (['c', 'd'], BlockDesc(), 2),
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)]],
                    [['c', 'd', BlockDesc()]],
                ]},
                None,
            ),
            (
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)]],
                ]},
                (['c', 'd'], BlockDesc(), 3),
                {'idc': 'test', 'range': ['a', 'z'], 'levels': [
                    [['a', 'b', BlockDesc(size=1)]],
                    [['b', 'c', BlockDesc(size=2)]],
                ]},
                LevelOutOfBound,
            ),
        )

        for case, args, excepted, err in region_cases:
            region = Region(case)

            if err is not None:
                self.assertRaises(err, region.add_block, *args)
                continue

            region.add_block(*args)

            self.assertEqual(excepted, region)
Example #13
0
    def test_move_down(self):

        region_levels = [
            [
                ['aa', 'ee', BlockDesc(size=1)],
                ['hh', 'hz', BlockDesc(size=2)],
                ['pp', 'zz', BlockDesc(size=3)],
                ['zz', None, BlockDesc(size=4)]
            ],
            [
                ['cf', 'cz', BlockDesc(size=5)],
                ['mm', 'oo', BlockDesc(size=6)],
                ['oo', 'qq', BlockDesc(size=7)]
            ],
            [
                ['aa', 'bb', BlockDesc(size=8)],
                ['cc', 'cd', BlockDesc(size=9)],
                ['ee', 'ff', BlockDesc(size=10)]
            ],
            [
                ['aa', 'ab', BlockDesc(size=11)],
                ['az', 'bb', BlockDesc(size=12)],
                ['za', None, BlockDesc(size=13)]
            ],
            [
                ['d', 'fz', BlockDesc(size=14)]
            ],
        ]

        excepted_region_levels = [
            [
                ['aa', 'ee', BlockDesc(size=1)],
                ['ee', 'ff', BlockDesc(size=10)],
                ['hh', 'hz', BlockDesc(size=2)],
                ['mm', 'oo', BlockDesc(size=6)],
                ['pp', 'zz', BlockDesc(size=3)],
                ['zz', None, BlockDesc(size=4)]
            ],
            [
                ['aa', 'bb', BlockDesc(size=8)],
                ['cc', 'cd', BlockDesc(size=9)],
                ['cf', 'cz', BlockDesc(size=5)],
                ['d', 'fz', BlockDesc(size=14)],
                ['oo', 'qq', BlockDesc(size=7)],
                ['za', None, BlockDesc(size=13)]
            ],
            [
                ['aa', 'ab', BlockDesc(size=11)],
                ['az', 'bb', BlockDesc(size=12)]
            ],
        ]

        excepted_moved_blocks = [
            (1, 0, ['mm', 'oo', BlockDesc(size=6)]),
            (2, 1, ['aa', 'bb', BlockDesc(size=8)]),
            (2, 1, ['cc', 'cd', BlockDesc(size=9)]),
            (2, 0, ['ee', 'ff', BlockDesc(size=10)]),
            (3, 2, ['aa', 'ab', BlockDesc(size=11)]),
            (3, 2, ['az', 'bb', BlockDesc(size=12)]),
            (3, 1, ['za', None, BlockDesc(size=13)]),
            (4, 1, ['d',  'fz', BlockDesc(size=14)]),
        ]

        region = Region(levels=region_levels)
        moved_blocks = region.move_down()

        self.assertEqual(excepted_moved_blocks, moved_blocks)
        self.assertEqual(excepted_region_levels, region['levels'])

        region_levels = [
            [['aa', 'ee', BlockDesc(size=1)], ['ee', 'ff', BlockDesc(size=10)], ['hh', 'hz', BlockDesc(size=2)]],
            [['aa', 'yy', BlockDesc(size=8)]]
        ]

        region = Region(levels=region_levels)
        moved_blocks = region.move_down()

        self.assertEqual([], moved_blocks)
        self.assertEqual(region_levels, region['levels'])
Example #14
0
    def test_get_block_ids_by_needle_id(self):

        bid1 = BlockID(
            'd1g0006300000001230101idc000c62d8736c72800020000000001')
        bid2 = BlockID(
            'd1g0006300000001230101idc000c62d8736c72800020000000002')

        # each tuple in region_cases consists of
        # region
        # needle_id
        # result

        region_cases = [
            (
                {},
                'a',
                [],
            ),
            (
                {
                    'range': ['a', 'e'],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['c', 'z', {
                        'block_id': bid2
                    }]]]
                },
                'a',
                [bid1],
            ),
            (
                {
                    'range': ['a', 'e'],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['c', 'z', {
                        'block_id': bid2
                    }]]]
                },
                'b',
                [],
            ),
            (
                {
                    'range': ['a', None],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['c', 'z', {
                        'block_id': bid2
                    }]]]
                },
                'c',
                [bid2],
            ),
            (
                {
                    'range': [None, 'e'],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['c', 'z', {
                        'block_id': bid2
                    }]]]
                },
                'c',
                [bid2],
            ),
            (
                {
                    'range': [None, None],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['c', 'z', {
                        'block_id': bid2
                    }]]]
                },
                'a',
                [bid1],
            ),
            (
                {
                    'range': ['a', 'e'],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['b', 'e', {
                        'block_id': bid2
                    }]]]
                },
                'x',
                [],
            ),
            (
                {
                    'range': ['a', 'e'],
                    'levels': [[['a', 'b', {
                        'block_id': bid1
                    }], ['c', 'z', {
                        'block_id': bid2
                    }]]]
                },
                'x',
                [],
            ),
            ({
                'range': ['a', 'z'],
                'levels': [[['a', 'b', {
                    'block_id': bid1
                }]], [['a', 'z', {
                    'block_id': bid2
                }]]]
            }, 'a', [bid2, bid1]),
        ]

        for region_meta, needle_id, block_ids in region_cases:

            region = Region(region_meta)
            result = region.get_block_ids_by_needle_id(needle_id)
            self.assertEqual(block_ids, result)
Example #15
0
    def test_get_block_ids_by_needle_id(self):

        # each tuple in region_cases consists of
        # region
        # needle_id
        # result

        region_cases = [
            (
                {},
                'a',
                [],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', tbid1], ['c', 'z', tbid2]]
                ]},
                'a',
                [tbid1],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', tbid1], ['c', 'z', tbid2]]
                ]},
                'b',
                [],
            ),
            (
                {'range': ['a', None], 'levels': [
                    [['a', 'b', tbid1], ['c', 'z', tbid2]]
                ]},
                'c',
                [tbid2],
            ),
            (
                {'range': [None, 'e'], 'levels': [
                    [['a', 'b', tbid1], ['c', 'z', tbid2]]
                ]},
                'c',
                [tbid2],
            ),
            (
                {'range': [None, None], 'levels': [
                    [['a', 'b', tbid1], ['c', 'z', tbid2]]
                ]},
                'a',
                [tbid1],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', tbid1], ['b', 'e', tbid2]]
                ]},
                'x',
                [],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', tbid1], ['c', 'z', tbid2]]
                ]},
                'x',
                [],
            ),
            (
                {'range': ['a', 'z'], 'levels': [
                    [['a', 'b', tbid1]],
                    [['a', 'z', tbid2]]
                ]},
                'a',
                [tbid2, tbid1]
            ),
        ]

        for region_meta, needle_id, block_ids in region_cases:

            region = Region(region_meta)
            result = region.get_block_ids_by_needle_id(needle_id)
            self.assertEqual(block_ids, result)
    def test_get_block_ids_by_needle_id(self):

        bid1 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000001')
        bid2 = BlockID('d1g0006300000001230101idc000c62d8736c72800020000000002')

        # each tuple in region_cases consists of
        # region
        # needle_id
        # result

        region_cases = [
            (
                {},
                'a',
                [],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['c', 'z', {'block_id': bid2}]]
                ]},
                'a',
                [bid1],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['c', 'z', {'block_id': bid2}]]
                ]},
                'b',
                [],
            ),
            (
                {'range': ['a', None], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['c', 'z', {'block_id': bid2}]]
                ]},
                'c',
                [bid2],
            ),
            (
                {'range': [None, 'e'], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['c', 'z', {'block_id': bid2}]]
                ]},
                'c',
                [bid2],
            ),
            (
                {'range': [None, None], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['c', 'z', {'block_id': bid2}]]
                ]},
                'a',
                [bid1],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['b', 'e', {'block_id': bid2}]]
                ]},
                'x',
                [],
            ),
            (
                {'range': ['a', 'e'], 'levels': [
                    [['a', 'b', {'block_id': bid1}], ['c', 'z', {'block_id': bid2}]]
                ]},
                'x',
                [],
            ),
            (
                {'range': ['a', 'z'], 'levels': [
                    [['a', 'b', {'block_id': bid1}]],
                    [['a', 'z', {'block_id': bid2}]]
                ]},
                'a',
                [bid2, bid1]
            ),
        ]

        for region_meta, needle_id, block_ids in region_cases:

            region = Region(region_meta)
            result = region.get_block_ids_by_needle_id(needle_id)
            self.assertEqual(block_ids, result)
    def test_move_down(self):

        region_levels = [
            [
                ['aa', 'ee', BlockDesc(size=1)],
                ['hh', 'hz', BlockDesc(size=2)],
                ['pp', 'zz', BlockDesc(size=3)],
                ['zz', None, BlockDesc(size=4)]
            ],
            [
                ['cf', 'cz', BlockDesc(size=5)],
                ['mm', 'oo', BlockDesc(size=6)],
                ['oo', 'qq', BlockDesc(size=7)]
            ],
            [
                ['aa', 'bb', BlockDesc(size=8)],
                ['cc', 'cd', BlockDesc(size=9)],
                ['ee', 'ff', BlockDesc(size=10)]
            ],
            [
                ['aa', 'ab', BlockDesc(size=11)],
                ['az', 'bb', BlockDesc(size=12)],
                ['za', None, BlockDesc(size=13)]
            ],
            [
                ['d', 'fz', BlockDesc(size=14)]
            ],
        ]

        excepted_region_levels = [
            [
                ['aa', 'ee', BlockDesc(size=1)],
                ['ee', 'ff', BlockDesc(size=10)],
                ['hh', 'hz', BlockDesc(size=2)],
                ['mm', 'oo', BlockDesc(size=6)],
                ['pp', 'zz', BlockDesc(size=3)],
                ['zz', None, BlockDesc(size=4)]
            ],
            [
                ['aa', 'bb', BlockDesc(size=8)],
                ['cc', 'cd', BlockDesc(size=9)],
                ['cf', 'cz', BlockDesc(size=5)],
                ['d', 'fz', BlockDesc(size=14)],
                ['oo', 'qq', BlockDesc(size=7)],
                ['za', None, BlockDesc(size=13)]
            ],
            [
                ['aa', 'ab', BlockDesc(size=11)],
                ['az', 'bb', BlockDesc(size=12)]
            ],
        ]

        excepted_moved_blocks = [
            (1, 0, ['mm', 'oo', BlockDesc(size=6)]),
            (2, 1, ['aa', 'bb', BlockDesc(size=8)]),
            (2, 1, ['cc', 'cd', BlockDesc(size=9)]),
            (2, 0, ['ee', 'ff', BlockDesc(size=10)]),
            (3, 2, ['aa', 'ab', BlockDesc(size=11)]),
            (3, 2, ['az', 'bb', BlockDesc(size=12)]),
            (3, 1, ['za', None, BlockDesc(size=13)]),
            (4, 1, ['d',  'fz', BlockDesc(size=14)]),
        ]

        region = Region(levels=region_levels)
        moved_blocks = region.move_down()

        self.assertEqual(excepted_moved_blocks, moved_blocks)
        self.assertEqual(excepted_region_levels, region['levels'])

        region_levels = [
            [['aa', 'ee', BlockDesc(size=1)], ['ee', 'ff', BlockDesc(size=10)], ['hh', 'hz', BlockDesc(size=2)]],
            [['aa', 'yy', BlockDesc(size=8)]]
        ]

        region = Region(levels=region_levels)
        moved_blocks = region.move_down()

        self.assertEqual([], moved_blocks)
        self.assertEqual(region_levels, region['levels'])
Example #18
0
    def test_move_down(self):

        region_levels = [
            [
                ['aa', 'ee', tbid1],
                ['hh', 'hz', tbid2],
                ['pp', 'zz', tbid3],
                ['zz', None, tbid4]
            ],
            [
                ['cf', 'cz', tbid5],
                ['mm', 'oo', tbid6],
                ['oo', 'qq', tbid7]
            ],
            [
                ['aa', 'bb', tbid8],
                ['cc', 'cd', tbid9],
                ['ee', 'ff', tbid10]
            ],
            [
                ['aa', 'ab', tbid11],
                ['az', 'bb', tbid12],
                ['za', None, tbid13]
            ],
            [
                ['d', 'fz', tbid14]
            ],
        ]

        excepted_region_levels = [
            [
                ['aa', 'ee', tbid1],
                ['ee', 'ff', tbid10],
                ['hh', 'hz', tbid2],
                ['mm', 'oo', tbid6],
                ['pp', 'zz', tbid3],
                ['zz', None, tbid4]
            ],
            [
                ['aa', 'bb', tbid8],
                ['cc', 'cd', tbid9],
                ['cf', 'cz', tbid5],
                ['d', 'fz', tbid14],
                ['oo', 'qq', tbid7],
                ['za', None, tbid13]
            ],
            [
                ['aa', 'ab', tbid11],
                ['az', 'bb', tbid12]
            ],
        ]

        excepted_moved_blocks = [
            (1, 0, ['mm', 'oo', tbid6]),
            (2, 1, ['aa', 'bb', tbid8]),
            (2, 1, ['cc', 'cd', tbid9]),
            (2, 0, ['ee', 'ff', tbid10]),
            (3, 2, ['aa', 'ab', tbid11]),
            (3, 2, ['az', 'bb', tbid12]),
            (3, 1, ['za', None, tbid13]),
            (4, 1, ['d',  'fz', tbid14]),
        ]

        region = Region(levels=region_levels)
        moved_blocks = region.move_down()

        self.assertEqual(excepted_moved_blocks, moved_blocks)
        self.assertEqual(excepted_region_levels, region['levels'])

        region_levels = [
            [
                ['aa', 'ee', tbid1],
                ['ee', 'ff', tbid10],
                ['hh', 'hz', tbid2],
            ],
            [['aa', 'yy', tbid8]]
        ]

        region = Region(levels=region_levels)
        moved_blocks = region.move_down()

        self.assertEqual([], moved_blocks)
        self.assertEqual(region_levels, region['levels'])