|
|
""" |
|
|
Unit tests for sequence validation functions. |
|
|
""" |
|
|
import unittest |
|
|
from Bio.SeqUtils.ProtParam import ProteinAnalysis |
|
|
from modules.validate_sequences import SequenceValidator |
|
|
|
|
|
class TestSequenceValidator(unittest.TestCase): |
|
|
def setUp(self): |
|
|
|
|
|
self.test_sequences = { |
|
|
"acidic": "DDDEEEDDEE", |
|
|
"basic": "KKRRKKKRKR", |
|
|
"neutral": "GGGAAAGGG", |
|
|
"mixed": "DEDKRKDEKR" |
|
|
} |
|
|
|
|
|
def test_pi_calculation(self): |
|
|
"""Test that pI calculations match BioPython's results.""" |
|
|
for name, seq in self.test_sequences.items(): |
|
|
validator = SequenceValidator(seq) |
|
|
our_properties = validator.calculate_properties() |
|
|
our_pi = our_properties["pI"] |
|
|
biopython_analysis = ProteinAnalysis(seq) |
|
|
biopython_pi = biopython_analysis.isoelectric_point() |
|
|
|
|
|
print(f"\nTesting {name} sequence:") |
|
|
print(f"Sequence: {seq}") |
|
|
print(f"Our pI: {our_pi}") |
|
|
print(f"BioPython pI: {biopython_pi}") |
|
|
print(f"Charge at pH 7: {validator.charge_at_ph(7.0)}") |
|
|
print(f"BioPython charge at pH 7: {biopython_analysis.charge_at_pH(7.0)}") |
|
|
|
|
|
self.assertAlmostEqual( |
|
|
our_pi, |
|
|
biopython_pi, |
|
|
places=1, |
|
|
msg=f"pI calculation failed for {name} sequence" |
|
|
) |
|
|
|
|
|
def test_gravy_calculation(self): |
|
|
"""Test GRAVY calculations.""" |
|
|
hydrophobic = "ILVAAA" |
|
|
hydrophilic = "RKDENN" |
|
|
|
|
|
validator_hydrophobic = SequenceValidator(hydrophobic) |
|
|
validator_hydrophilic = SequenceValidator(hydrophilic) |
|
|
|
|
|
gravy_hydrophobic = validator_hydrophobic.calculate_properties()["GRAVY"] |
|
|
gravy_hydrophilic = validator_hydrophilic.calculate_properties()["GRAVY"] |
|
|
|
|
|
self.assertGreater(gravy_hydrophobic, 0) |
|
|
self.assertLess(gravy_hydrophilic, 0) |
|
|
|
|
|
if __name__ == '__main__': |
|
|
unittest.main() |