Skip to content

Commit e5d6443

Browse files
committed
TST: Exercise Cifti2 classes more thoroughly
Use a counter to ensure that each class is made at least once while loading test files. Test read/write loop more thoroughly. Causes a failure for LabelTable, currently not read correctly
1 parent b95ce80 commit e5d6443

File tree

1 file changed

+82
-3
lines changed

1 file changed

+82
-3
lines changed

nibabel/cifti2/tests/test_cifti2io.py

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,85 @@ def test_readwritedata():
7575
img = nib.load(name)
7676
nib.save(img, 'test.nii')
7777
img2 = nib.load('test.nii')
78-
assert_equal(len(img.header.matrix.mims), len(img2.header.matrix.mims))
79-
assert_array_almost_equal(img.data,
80-
img2.data)
78+
assert_equal(len(img.header.matrix.mims),
79+
len(img2.header.matrix.mims))
80+
# Order should be preserved in load/save
81+
for mim1, mim2 in zip(img.header.matrix.mims,
82+
img2.header.matrix.mims):
83+
assert_equal(len(mim1.named_maps), len(mim2.named_maps))
84+
for map1, map2 in zip(mim1.named_maps, mim2.named_maps):
85+
assert_equal(map1.map_name, map2.map_name)
86+
if map1.label_table is None:
87+
assert_true(map2.label_table is None)
88+
else:
89+
assert_equal(len(map1.label_table.labels),
90+
len(map2.label_table.labels))
91+
assert_array_almost_equal(img.data, img2.data)
92+
93+
94+
def test_cifti2types():
95+
"""Check that we instantiate Cifti2 classes correctly, and that our
96+
test files exercise all classes"""
97+
counter = {ci.Cifti2LabelTable: 0,
98+
ci.Cifti2Label: 0,
99+
ci.Cifti2NamedMap: 0,
100+
ci.Cifti2Surface: 0,
101+
ci.Cifti2VoxelIndicesIJK: 0,
102+
ci.Cifti2Vertices: 0,
103+
ci.Cifti2Parcel: 0,
104+
ci.Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ: 0,
105+
ci.Cifti2Volume: 0,
106+
ci.Cifti2VertexIndices: 0,
107+
ci.Cifti2BrainModel: 0,
108+
ci.Cifti2MatrixIndicesMap: 0,
109+
}
110+
for name in datafiles:
111+
hdr = nib.load(name).header
112+
# Matrix and MetaData aren't conditional, so don't bother counting
113+
assert_true(isinstance(hdr.matrix, ci.Cifti2Matrix))
114+
assert_true(isinstance(hdr.matrix.metadata, ci.Cifti2MetaData))
115+
assert_true(isinstance(hdr.matrix.mims, list))
116+
for mim in hdr.matrix.mims:
117+
assert_true(isinstance(mim, ci.Cifti2MatrixIndicesMap))
118+
counter[ci.Cifti2MatrixIndicesMap] += 1
119+
assert_true(isinstance(mim.brain_models, list))
120+
for bm in mim.brain_models:
121+
assert_true(isinstance(bm, ci.Cifti2BrainModel))
122+
counter[ci.Cifti2BrainModel] += 1
123+
if isinstance(bm.vertex_indices, ci.Cifti2VertexIndices):
124+
counter[ci.Cifti2VertexIndices] += 1
125+
if isinstance(bm.voxel_indices_ijk, ci.Cifti2VoxelIndicesIJK):
126+
counter[ci.Cifti2VoxelIndicesIJK] += 1
127+
assert_true(isinstance(mim.named_maps, list))
128+
for nm in mim.named_maps:
129+
assert_true(isinstance(nm, ci.Cifti2NamedMap))
130+
counter[ci.Cifti2NamedMap] += 1
131+
assert_true(isinstance(nm.metadata, ci.Cifti2MetaData))
132+
if isinstance(nm.label_table, ci.Cifti2LabelTable):
133+
counter[ci.Cifti2LabelTable] += 1
134+
assert_true(isinstance(nm.label_table.labels, list))
135+
for label in nm.label_table.labels:
136+
assert_true(isinstance(label, ci.Cifti2Label))
137+
counter[ci.Cifti2Label] += 1
138+
assert_true(isinstance(mim.parcels, list))
139+
for parc in mim.parcels:
140+
assert_true(isinstance(parc, ci.Cifti2Parcel))
141+
counter[ci.Cifti2Parcel] += 1
142+
if isinstance(parc.voxel_indices_ijk,
143+
ci.Cifti2VoxelIndicesIJK):
144+
counter[ci.Cifti2VoxelIndicesIJK] += 1
145+
assert_true(isinstance(parc.vertices, list))
146+
for vtcs in parc.vertices:
147+
assert_true(isinstance(vtcs, ci.Cifti2Vertices))
148+
counter[ci.Cifti2Vertices] += 1
149+
assert_true(isinstance(mim.surfaces, list))
150+
for surf in mim.surfaces:
151+
assert_true(isinstance(surf, ci.Cifti2Surface))
152+
counter[ci.Cifti2Surface] += 1
153+
if isinstance(mim.volume, ci.Cifti2Volume):
154+
counter[ci.Cifti2Volume] += 1
155+
if isinstance(mim.volume.transformation_matrix_voxel_indices_ijk_to_xyz,
156+
ci.Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ):
157+
counter[ci.Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ] += 1
158+
for klass, count in counter.items():
159+
assert_true(count > 0, "No exercise of " + klass.__name__)

0 commit comments

Comments
 (0)