%%file calc_seq.py
def calc_gc(sequence):
if len(sequence) == 0:
return 0
sequence = sequence.upper()
gc_count = sequence.count('G') + sequence.count('C')
return float(gc_count) / len(sequence)
Overwriting calc_seq.py
%%file test_calc_gc.py
import calc_seq
def test_g():
gc = calc_seq.calc_gc("G")
assert gc == 1, gc
def test_a():
gc = calc_seq.calc_gc("A")
assert gc == 0, gc
def test_empty():
gc = calc_seq.calc_gc("")
assert gc == 0, gc
def test_5050():
gc = calc_seq.calc_gc("GA")
assert gc == 0.5, gc
def test_lowercase():
gc = calc_seq.calc_gc('ga')
assert gc == 0.5, gc
def test_aag():
gc = calc_seq.calc_gc('aag')
assert round(gc, 2) == round(1./3., 2), gc
assert int(gc*100) == int(100./3), gc
def test_long():
gc = calc_seq.calc_gc("agagagagagagagagagagagagag")
assert gc == 1.0 / 2.0
def test_regression():
seq = "ACGACGAGAAGCTGATCTACCGCGCCGAGCGCATC"
gc = calc_seq.calc_gc(seq)
assert round(gc, 5) == round(0.628571428571, 5), gc
Overwriting test_calc_gc.py
!nosetests -v
test_calc_gc.test_g ... ok test_calc_gc.test_a ... ok test_calc_gc.test_empty ... ok test_calc_gc.test_5050 ... ok test_calc_gc.test_lowercase ... ok test_calc_gc.test_aag ... ok test_calc_gc.test_long ... ok test_calc_gc.test_regression ... ok ---------------------------------------------------------------------- Ran 8 tests in 0.005s OK
Unit tests -- small tests that address isolated "units" of functionality Test Driven Development - writing tests first, then writing the code to "fix" them Regression testing -- making sure that for specific inputs and code, you get the same outputs
Stupidity Driven Development -- write code; when it breaks, write a test that breaks it; then fix the code. aka Test Enhanced Development.
Smoke test -- can I even run this code at all?