mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-08-20 21:33:13 -07:00
Move common libs to libs/common
This commit is contained in:
parent
8dbb1a2451
commit
1f4bd41bcc
1612 changed files with 962 additions and 10 deletions
111
libs/common/rebulk/test/test_toposort.py
Normal file
111
libs/common/rebulk/test/test_toposort.py
Normal file
|
@ -0,0 +1,111 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2014 True Blade Systems, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Original:
|
||||
# - https://bitbucket.org/ericvsmith/toposort (1.4)
|
||||
# Modifications:
|
||||
# - port to pytest
|
||||
# pylint: skip-file
|
||||
|
||||
import pytest
|
||||
from ..toposort import toposort, toposort_flatten, CyclicDependency
|
||||
|
||||
|
||||
class TestCase(object):
|
||||
def test_simple(self):
|
||||
results = list(toposort({2: set([11]), 9: set([11, 8]), 10: set([11, 3]), 11: set([7, 5]), 8: set([7, 3])}))
|
||||
expected = [set([3, 5, 7]), set([8, 11]), set([2, 9, 10])]
|
||||
assert results == expected
|
||||
|
||||
# make sure self dependencies are ignored
|
||||
results = list(toposort({2: set([2, 11]), 9: set([11, 8]), 10: set([10, 11, 3]), 11: set([7, 5]), 8: set([7, 3])}))
|
||||
expected = [set([3, 5, 7]), set([8, 11]), set([2, 9, 10])]
|
||||
assert results == expected
|
||||
|
||||
assert list(toposort({1: set()})) == [set([1])]
|
||||
assert list(toposort({1: set([1])})) == [set([1])]
|
||||
|
||||
def test_no_dependencies(self):
|
||||
assert list(toposort({1: set([2]), 3: set([4]), 5: set([6])})) == [set([2, 4, 6]), set([1, 3, 5])]
|
||||
assert list(toposort({1: set(), 3: set(), 5: set()})) == [set([1, 3, 5])]
|
||||
|
||||
def test_empty(self):
|
||||
assert list(toposort({})) == []
|
||||
|
||||
def test_strings(self):
|
||||
results = list(toposort({'2': set(['11']), '9': set(['11', '8']), '10': set(['11', '3']), '11': set(['7', '5']), '8': set(['7', '3'])}))
|
||||
expected = [set(['3', '5', '7']), set(['8', '11']), set(['2', '9', '10'])]
|
||||
assert results == expected
|
||||
|
||||
def test_objects(self):
|
||||
o2 = object()
|
||||
o3 = object()
|
||||
o5 = object()
|
||||
o7 = object()
|
||||
o8 = object()
|
||||
o9 = object()
|
||||
o10 = object()
|
||||
o11 = object()
|
||||
results = list(toposort({o2: set([o11]), o9: set([o11, o8]), o10: set([o11, o3]), o11: set([o7, o5]), o8: set([o7, o3, o8])}))
|
||||
expected = [set([o3, o5, o7]), set([o8, o11]), set([o2, o9, o10])]
|
||||
assert results == expected
|
||||
|
||||
def test_cycle(self):
|
||||
# a simple, 2 element cycle
|
||||
with pytest.raises(CyclicDependency):
|
||||
list(toposort({1: set([2]), 2: set([1])}))
|
||||
|
||||
# an indirect cycle
|
||||
with pytest.raises(CyclicDependency):
|
||||
list(toposort({1: set([2]), 2: set([3]), 3: set([1])}))
|
||||
|
||||
def test_input_not_modified(self):
|
||||
data = {2: set([11]),
|
||||
9: set([11, 8]),
|
||||
10: set([11, 3]),
|
||||
11: set([7, 5]),
|
||||
8: set([7, 3, 8]), # includes something self-referential
|
||||
}
|
||||
orig = data.copy()
|
||||
results = list(toposort(data))
|
||||
assert data == orig
|
||||
|
||||
def test_input_not_modified_when_cycle_error(self):
|
||||
data = {1: set([2]),
|
||||
2: set([1]),
|
||||
3: set([4]),
|
||||
}
|
||||
orig = data.copy()
|
||||
with pytest.raises(CyclicDependency):
|
||||
list(toposort(data))
|
||||
assert data == orig
|
||||
|
||||
|
||||
class TestCaseAll(object):
|
||||
def test_sort_flatten(self):
|
||||
data = {2: set([11]),
|
||||
9: set([11, 8]),
|
||||
10: set([11, 3]),
|
||||
11: set([7, 5]),
|
||||
8: set([7, 3, 8]), # includes something self-referential
|
||||
}
|
||||
expected = [set([3, 5, 7]), set([8, 11]), set([2, 9, 10])]
|
||||
assert list(toposort(data)) == expected
|
||||
|
||||
# now check the sorted results
|
||||
results = []
|
||||
for item in expected:
|
||||
results.extend(sorted(item))
|
||||
assert toposort_flatten(data) == results
|
||||
|
||||
# and the unsorted results. break the results up into groups to compare them
|
||||
actual = toposort_flatten(data, False)
|
||||
results = [set([i for i in actual[0:3]]), set([i for i in actual[3:5]]), set([i for i in actual[5:8]])]
|
||||
assert results == expected
|
Loading…
Add table
Add a link
Reference in a new issue