Skip to content
Snippets Groups Projects
Commit bfb5f567 authored by Paul McCarthy's avatar Paul McCarthy
Browse files

Some tests were inf-looping. Not sure why I had to ensure that slices

covered 'at least two elements' anyway. Maybe this will bite me, I
don't know.
parent 19c62642
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,11 @@ ...@@ -7,6 +7,11 @@
import pytest import pytest
import os.path as op
import random
import numpy as np
def pytest_addoption(parser): def pytest_addoption(parser):
parser.addoption('--niters', parser.addoption('--niters',
...@@ -19,15 +24,33 @@ def pytest_addoption(parser): ...@@ -19,15 +24,33 @@ def pytest_addoption(parser):
action='store', action='store',
help='FSLeyes test data directory') help='FSLeyes test data directory')
parser.addoption('--seed',
type=int,
help='Seed for random number generator')
@pytest.fixture @pytest.fixture
def testdir(request): def testdir(request):
"""FSLeyes test data directory.""" """FSLeyes test data directory."""
return request.config.getoption('--testdir') return op.expanduser(request.config.getoption('--testdir'))
@pytest.fixture @pytest.fixture
def niters(request): def niters(request):
"""Number of test iterations.""" """Number of test iterations."""
return request.config.getoption('--niters') return request.config.getoption('--niters')
@pytest.fixture
def seed(request):
seed = request.config.getoption('--seed')
if seed is None:
seed = np.random.randint(2 ** 32)
np.random.seed(seed)
random .seed(seed)
print('Seed for random number generator: {}'.format(seed))
return seed
...@@ -18,6 +18,13 @@ import fsl.data.image as image ...@@ -18,6 +18,13 @@ import fsl.data.image as image
import fsl.data.imagewrapper as imagewrap import fsl.data.imagewrapper as imagewrap
import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('fsl').setLevel(logging.WARNING)
log = logging.getLogger()
real_print = print real_print = print
def print(*args, **kwargs): def print(*args, **kwargs):
...@@ -37,9 +44,6 @@ def random_coverage(shape, vol_limit=None): ...@@ -37,9 +44,6 @@ def random_coverage(shape, vol_limit=None):
ndims = len(shape) - 1 ndims = len(shape) - 1
nvols = shape[-1] nvols = shape[-1]
print('{}D (shape: {}, {} vectors/slices/volumes)'.format(
ndims, shape, nvols))
# Generate a random coverage. # Generate a random coverage.
# We use the same coverage for # We use the same coverage for
# each vector/slice/volume, so # each vector/slice/volume, so
...@@ -520,7 +524,7 @@ def test_calcExpansion(niters): ...@@ -520,7 +524,7 @@ def test_calcExpansion(niters):
_test_expansion(coverage, slices, vols, exps) _test_expansion(coverage, slices, vols, exps)
def test_ImageWrapper_read(niters): def test_ImageWrapper_read(niters, seed):
for _ in range(niters): for _ in range(niters):
...@@ -577,9 +581,12 @@ def test_ImageWrapper_read(niters): ...@@ -577,9 +581,12 @@ def test_ImageWrapper_read(niters):
if j < nvols - 1: assert not wrapper.covered if j < nvols - 1: assert not wrapper.covered
else: assert wrapper.covered else: assert wrapper.covered
def test_ImageWrapper_write_out(niters): def test_ImageWrapper_write_out(niters, seed):
# This is HORRIBLE # This is HORRIBLE
loop = 0
# Generate a bunch of random coverages # Generate a bunch of random coverages
for _ in range(niters): for _ in range(niters):
...@@ -602,13 +609,14 @@ def test_ImageWrapper_write_out(niters): ...@@ -602,13 +609,14 @@ def test_ImageWrapper_write_out(niters):
# Generate a random coverage # Generate a random coverage
cov = random_coverage(shape, vol_limit=1) cov = random_coverage(shape, vol_limit=1)
print('This is the coverage: {}'.format(cov))
img = nib.Nifti1Image(data, np.eye(4)) img = nib.Nifti1Image(data, np.eye(4))
wrapper = imagewrap.ImageWrapper(img) wrapper = imagewrap.ImageWrapper(img)
applyCoverage(wrapper, cov) applyCoverage(wrapper, cov)
clo, chi = wrapper.dataRange clo, chi = wrapper.dataRange
log.debug('{:3d} / {:3d}'.format(loop, niters))
loop += 1
# Now, we'll simulate some writes # Now, we'll simulate some writes
# outside of the coverage area. # outside of the coverage area.
for _ in range(niters): for _ in range(niters):
...@@ -616,13 +624,13 @@ def test_ImageWrapper_write_out(niters): ...@@ -616,13 +624,13 @@ def test_ImageWrapper_write_out(niters):
# Generate some slices outside # Generate some slices outside
# of the coverage area, making # of the coverage area, making
# sure that the slice covers # sure that the slice covers
# at least two elements # at least one element
while True: while True:
slices = random_slices(cov, shape, 'out') slices = random_slices(cov, shape, 'out')
slices[-1] = [0, 1] slices[-1] = [0, 1]
sliceshape = [hi - lo for lo, hi in slices] sliceshape = [hi - lo for lo, hi in slices]
if np.prod(sliceshape) == 1: if np.prod(sliceshape) == 0:
continue continue
sliceobjs = imagewrap.sliceTupleToSliceObj(slices) sliceobjs = imagewrap.sliceTupleToSliceObj(slices)
...@@ -630,8 +638,8 @@ def test_ImageWrapper_write_out(niters): ...@@ -630,8 +638,8 @@ def test_ImageWrapper_write_out(niters):
sliceshape = sliceshape[:-1] sliceshape = sliceshape[:-1]
break break
print('---------------') # print('---------------')
print('Slice {}'.format(slices)) # print('Slice {}'.format(slices))
# Expected wrapper coverage after the write # Expected wrapper coverage after the write
expCov = imagewrap.adjustCoverage(cov[..., 0], slices) expCov = imagewrap.adjustCoverage(cov[..., 0], slices)
...@@ -669,9 +677,9 @@ def test_ImageWrapper_write_out(niters): ...@@ -669,9 +677,9 @@ def test_ImageWrapper_write_out(niters):
wrapper = imagewrap.ImageWrapper(img) wrapper = imagewrap.ImageWrapper(img)
applyCoverage(wrapper, cov) applyCoverage(wrapper, cov)
print('ndims', ndims) # print('ndims', ndims)
print('sliceshape', sliceshape) # print('sliceshape', sliceshape)
print('sliceobjs', sliceobjs) # print('sliceobjs', sliceobjs)
newData = np.linspace(rlo, rhi, np.prod(sliceshape)) newData = np.linspace(rlo, rhi, np.prod(sliceshape))
newData = newData.reshape(sliceshape) newData = newData.reshape(sliceshape)
...@@ -679,7 +687,7 @@ def test_ImageWrapper_write_out(niters): ...@@ -679,7 +687,7 @@ def test_ImageWrapper_write_out(niters):
# Make sure that the expected low/high values # Make sure that the expected low/high values
# are present in the data being written # are present in the data being written
print('Writing data (shape: {})'.format(newData.shape)) # print('Writing data (shape: {})'.format(newData.shape))
oldCov = wrapper.coverage(0) oldCov = wrapper.coverage(0)
...@@ -688,26 +696,26 @@ def test_ImageWrapper_write_out(niters): ...@@ -688,26 +696,26 @@ def test_ImageWrapper_write_out(niters):
expLo, expHi = coverageDataRange(img.get_data(), cov, slices) expLo, expHi = coverageDataRange(img.get_data(), cov, slices)
newLo, newHi = wrapper.dataRange newLo, newHi = wrapper.dataRange
print('Old range: {} - {}'.format(clo, chi)) # print('Old range: {} - {}'.format(clo, chi))
print('Sim range: {} - {}'.format(rlo, rhi)) # print('Sim range: {} - {}'.format(rlo, rhi))
print('Exp range: {} - {}'.format(expLo, expHi)) # print('Exp range: {} - {}'.format(expLo, expHi))
print('NewDat range: {} - {}'.format(newData.min(), newData.max())) # print('NewDat range: {} - {}'.format(newData.min(), newData.max()))
print('Data range: {} - {}'.format(data.min(), data.max())) # print('Data range: {} - {}'.format(data.min(), data.max()))
print('Expand range: {} - {}'.format(elo, ehi)) # print('Expand range: {} - {}'.format(elo, ehi))
print('New range: {} - {}'.format(newLo, newHi)) # print('New range: {} - {}'.format(newLo, newHi))
newCov = wrapper.coverage(0) newCov = wrapper.coverage(0)
print('Old coverage: {}'.format(oldCov)) # print('Old coverage: {}'.format(oldCov))
print('New coverage: {}'.format(newCov)) # print('New coverage: {}'.format(newCov))
print('Expected coverage: {}'.format(expCov)) # print('Expected coverage: {}'.format(expCov))
print() # print()
print() # print()
assert np.all(newCov == expCov) assert np.all(newCov == expCov)
assert np.isclose(newLo, expLo) assert np.isclose(newLo, expLo)
assert np.isclose(newHi, expHi) assert np.isclose(newHi, expHi)
print('--------------') # print('--------------')
def test_ImageWrapper_write_in_overlap(niters): def test_ImageWrapper_write_in_overlap(niters):
...@@ -741,13 +749,13 @@ def test_ImageWrapper_write_in_overlap(niters): ...@@ -741,13 +749,13 @@ def test_ImageWrapper_write_in_overlap(niters):
# Generate some slices outside # Generate some slices outside
# of the coverage area, making # of the coverage area, making
# sure that the slice covers # sure that the slice covers
# at least two elements # at least one element
while True: while True:
slices = random_slices(cov, shape, random.choice(('in', 'overlap'))) slices = random_slices(cov, shape, random.choice(('in', 'overlap')))
slices[-1] = [0, 1] slices[-1] = [0, 1]
sliceshape = [hi - lo for lo, hi in slices] sliceshape = [hi - lo for lo, hi in slices]
if np.prod(sliceshape) == 1: if np.prod(sliceshape) == 0:
continue continue
sliceobjs = imagewrap.sliceTupleToSliceObj(slices) sliceobjs = imagewrap.sliceTupleToSliceObj(slices)
...@@ -867,7 +875,7 @@ def test_ImageWrapper_write_different_volume(niters): ...@@ -867,7 +875,7 @@ def test_ImageWrapper_write_different_volume(niters):
sliceshape = [hi - lo for lo, hi in slices] sliceshape = [hi - lo for lo, hi in slices]
if np.prod(sliceshape) == 1: if np.prod(sliceshape) == 0:
continue continue
sliceobjs = imagewrap.sliceTupleToSliceObj(slices) sliceobjs = imagewrap.sliceTupleToSliceObj(slices)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment