Browse Source

feat: add __init__, TestOverlapConsolidation suite

main
Rob Hallam 3 months ago
parent
commit
558739a0cd
2 changed files with 73 additions and 0 deletions
  1. +1
    -0
      test/__init__.py
  2. +72
    -0
      test/test_consolidate.py

+ 1
- 0
test/__init__.py View File

@@ -0,0 +1 @@
"""Test cases for highlight generator"""

+ 72
- 0
test/test_consolidate.py View File

@@ -0,0 +1,72 @@
"""Test consolidators

Consolidators work on a List of Faetures, and Features a constructed from Interval objects.
As such, we need to mock an Interval object and a Feature object to test the consolidators.
"""
import unittest
from pipeline.consolidators import OverlapConsolidator


class TestOverlapConsolidation(unittest.TestCase):
"""overlap consolidator only uses Interval .start and .end attributes, so we can mock them here"""
class MockInterval():
"""Mock interval object for overlap testing -- only has start and end attributes"""
def __init__(self, start, end):
self.start = start
self.end = end
class MockFeature():
"""Mock feature object for overlap testing -- only has interval attribute"""
def __init__(self, interval):
self.interval = interval

def setUp(self):
"""Set up test data"""
self.empty_features = []
self.fakepath = "/tmp/fakepath"
self.featureA = self.MockFeature(interval=self.MockInterval(start=0, end=10))
self.featureB = self.MockFeature(interval=self.MockInterval(start=5, end=15))
self.populated_features = [self.featureA, self.featureB]

def test_init(self):
# test empty features
with self.assertRaises(ValueError):
OverlapConsolidator(self.empty_features)
# test populated features
consolidator = OverlapConsolidator(features=self.populated_features)
self.assertEqual(consolidator.features, self.populated_features)

def test_consolidate(self):
# 4 features for overlap test: ABCD, overlap A-B, C-D
self.featureA = self.MockFeature(interval=self.MockInterval(start=0, end=10))
self.featureB = self.MockFeature(interval=self.MockInterval(start=5, end=15))
self.featureC = self.MockFeature(interval=self.MockInterval(start=20, end=30))
self.featureD = self.MockFeature(interval=self.MockInterval(start=25, end=35))
self.overlapping_features = [self.featureA, self.featureB, self.featureC, self.featureD]
consolidator = OverlapConsolidator(features=self.overlapping_features)
consolidator.consolidate()
# check that A-B and C-D have been merged
self.assertEqual(len(consolidator.features), 2)

# 4 features for no overlap test
self.feature1 = self.MockFeature(interval=self.MockInterval(start=0, end=10))
self.feature2 = self.MockFeature(interval=self.MockInterval(start=15, end=25))
self.feature3 = self.MockFeature(interval=self.MockInterval(start=30, end=40))
self.feature4 = self.MockFeature(interval=self.MockInterval(start=45, end=55))
self.non_overlapping_features = [self.feature1, self.feature2, self.feature3, self.feature4]
consolidator = OverlapConsolidator(features=self.non_overlapping_features)
consolidator.consolidate()
# check that no features have been merged
self.assertEqual(len(consolidator.features), 4)

# 3 features for overlap test: ABC, overlap A-B, B-C
self.featureA = self.MockFeature(interval=self.MockInterval(start=0, end=10))
self.featureB = self.MockFeature(interval=self.MockInterval(start=5, end=15))
self.featureC = self.MockFeature(interval=self.MockInterval(start=12, end=20))
self.overlapping_features = [self.featureA, self.featureB, self.featureC]
consolidator = OverlapConsolidator(features=self.overlapping_features)
consolidator.consolidate()
# check that A-B and B-C have been merged
self.assertEqual(len(consolidator.features), 1)

if __name__ == '__main__':
unittest.main()

Loading…
Cancel
Save