Add simple_trie fixture and blackbox tests
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
b491ce97f0
commit
6d39e15532
5 changed files with 83 additions and 2 deletions
|
@ -7,8 +7,7 @@ steps:
|
||||||
image: python:3
|
image: python:3
|
||||||
commands:
|
commands:
|
||||||
- pip install mypy pytest
|
- pip install mypy pytest
|
||||||
- mypy bytetrie/bytetrie.py
|
- mypy bytetrie/*.py
|
||||||
- mypy bytetrie/util.py
|
|
||||||
- python -m pytest
|
- python -m pytest
|
||||||
|
|
||||||
- name: publish
|
- name: publish
|
||||||
|
|
5
tests/conftest.py
Normal file
5
tests/conftest.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
pytest_plugins = [
|
||||||
|
"tries.simple_trie"
|
||||||
|
]
|
49
tests/test_bytetrie_blackbox.py
Normal file
49
tests/test_bytetrie_blackbox.py
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append("tests/tries/")
|
||||||
|
|
||||||
|
from bytetrie import ByteTrie
|
||||||
|
|
||||||
|
import simple_trie
|
||||||
|
|
||||||
|
def test_find_all(simple_trie):
|
||||||
|
r = simple_trie.find(b"A")
|
||||||
|
ls = [n.value() for n in r]
|
||||||
|
expected = ["A", "AA", "AACDEGG", "AACDEF", "AACDEH", "AB", "ABCDE"]
|
||||||
|
not_expected = ["AACDE"]
|
||||||
|
|
||||||
|
for e in expected:
|
||||||
|
assert e in ls
|
||||||
|
for ne in not_expected:
|
||||||
|
assert not ne in ls
|
||||||
|
|
||||||
|
def test_find_single_terminal(simple_trie):
|
||||||
|
r = simple_trie.find(b"AACDEH")
|
||||||
|
assert len(r) == 1
|
||||||
|
assert r[0].value() == "AACDEH"
|
||||||
|
assert r[0].key() == b"AACDEH"
|
||||||
|
|
||||||
|
def test_unknown_prefix_empty(simple_trie):
|
||||||
|
r = simple_trie.find(b"AAD")
|
||||||
|
assert len(r) == 0
|
||||||
|
|
||||||
|
def test_partial_prefix_find_subnodes(simple_trie):
|
||||||
|
r = simple_trie.find(b"AACD")
|
||||||
|
ls = [n.value() for n in r]
|
||||||
|
|
||||||
|
expected = ["AACDEGG", "AACDEF", "AACDEH"]
|
||||||
|
not_expected = ["A", "AA", "AB", "ABCDE", "AACDE"]
|
||||||
|
|
||||||
|
assert len(r) == 3
|
||||||
|
for e in expected:
|
||||||
|
assert e in ls
|
||||||
|
for ne in not_expected:
|
||||||
|
assert not ne in ls
|
||||||
|
|
||||||
|
def test_partial_prefix_find_terminal(simple_trie):
|
||||||
|
r = simple_trie.find(b"ABC")
|
||||||
|
assert len(r) == 1
|
||||||
|
assert r[0].key() == b"ABCDE"
|
||||||
|
assert r[0].value() == "ABCDE"
|
BIN
tests/tries/simple_trie.png
Normal file
BIN
tests/tries/simple_trie.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
28
tests/tries/simple_trie.py
Normal file
28
tests/tries/simple_trie.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
"""
|
||||||
|
Create a simple ByteTrie fixture for testing basic functionality. Without edge
|
||||||
|
cases. Single-valued.
|
||||||
|
|
||||||
|
See simple_trie.png
|
||||||
|
"""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from bytetrie import ByteTrie
|
||||||
|
|
||||||
|
def insert(trie):
|
||||||
|
""" Shall only be used to insert strings """
|
||||||
|
t = trie
|
||||||
|
def _insert(*vals):
|
||||||
|
for val in vals:
|
||||||
|
t.insert(val.encode('utf-8'), val)
|
||||||
|
return _insert
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def simple_trie():
|
||||||
|
t = ByteTrie()
|
||||||
|
ins = insert(t)
|
||||||
|
ins("A")
|
||||||
|
ins("AA", "AB")
|
||||||
|
ins("ABCDE")
|
||||||
|
ins("AACDEF", "AACDEGG", "AACDEH")
|
||||||
|
return t
|
Loading…
Reference in a new issue