File size: 1,800 Bytes
9375c9a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
from random import Random
from dlib import chinese_whispers
from pytest import raises
def test_chinese_whispers():
assert len(chinese_whispers([])) == 0
assert len(chinese_whispers([(0, 0), (1, 1)])) == 2
# Test that values from edges are actually used and that correct values are returned
labels = chinese_whispers([(0, 0), (0, 1), (1, 1)])
assert len(labels) == 2
assert labels[0] == labels[1]
labels = chinese_whispers([(0, 0), (1, 1)])
assert len(labels) == 2
assert labels[0] != labels[1]
def test_chinese_whispers_with_distance():
assert len(chinese_whispers([(0, 0, 1)])) == 1
assert len(chinese_whispers([(0, 0, 1), (0, 1, 0.5), (1, 1, 1)])) == 2
# Test that values from edges and distances are actually used and that correct values are returned
labels = chinese_whispers([(0, 0, 1), (0, 1, 1), (1, 1, 1)])
assert len(labels) == 2
assert labels[0] == labels[1]
labels = chinese_whispers([(0, 0, 1), (0, 1, 0.0), (1, 1, 1)])
assert len(labels) == 2
assert labels[0] != labels[1]
# Non-trivial test
edges = []
r = Random(0)
for i in range(100):
edges.append((i, i, 1))
edges.append((i, r.randint(0, 99), r.random()))
assert len(chinese_whispers(edges)) == 100
def test_chinese_whispers_type_checks():
"""
Tests contract (expected errors) in case client provides wrong types
"""
with raises(TypeError):
chinese_whispers()
with raises(TypeError):
chinese_whispers('foo')
with raises(RuntimeError):
chinese_whispers(['foo'])
with raises(IndexError):
chinese_whispers([(0,)])
with raises(IndexError):
chinese_whispers([(0, 1, 2, 3)])
with raises(RuntimeError):
chinese_whispers([('foo', 'bar')])
|