Skip to content

Commit fede660

Browse files
committed
RF/TEST: Check endianness rather than ignoring
1 parent 821b6b6 commit fede660

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

nibabel/freesurfer/mghformat.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
import numpy as np
1515

1616
from ..affines import voxel_sizes, from_matvec
17-
from ..volumeutils import (array_to_file, array_from_file, Recoder)
17+
from ..volumeutils import (array_to_file, array_from_file, endian_codes,
18+
Recoder)
1819
from ..spatialimages import HeaderDataError, SpatialImage
1920
from ..fileholders import FileHolder
2021
from ..arrayproxy import ArrayProxy, reshape_dataobj
@@ -347,10 +348,10 @@ def default_structarr(klass, endianness=None):
347348
348349
Ignores byte order; always big endian
349350
'''
350-
structarr = super(MGHHeader, klass).default_structarr()
351-
# This should not be reachable even to test
352-
if structarr.newbyteorder('>') != structarr:
353-
raise ValueError("Default structarr is not big-endian")
351+
if endianness is not None and endian_codes[endianness] != '>':
352+
raise ValueError('MGHHeader must always be big endian')
353+
structarr = super(MGHHeader,
354+
klass).default_structarr(endianness=endianness)
354355
structarr['version'] = 1
355356
structarr['dims'] = 1
356357
structarr['type'] = 3

nibabel/freesurfer/tests/test_mghformat.py

+37
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from ..mghformat import MGHHeader, MGHError, MGHImage
1919
from ...tmpdirs import InTemporaryDirectory
2020
from ...fileholders import FileHolder
21+
from ...volumeutils import sys_is_le
2122

2223
from nose.tools import assert_true, assert_false
2324

@@ -286,6 +287,42 @@ def test_mgh_set_data_shape():
286287
hdr.set_data_shape((5, 4, 3, 2, 1))
287288

288289

290+
def test_mghheader_default_structarr():
291+
hdr = MGHHeader.default_structarr()
292+
assert_equal(hdr['version'], 1)
293+
assert_array_equal(hdr['dims'], 1)
294+
assert_equal(hdr['type'], 3)
295+
assert_equal(hdr['dof'], 0)
296+
assert_equal(hdr['goodRASFlag'], 1)
297+
assert_array_equal(hdr['delta'], 1)
298+
assert_array_equal(hdr['Mdc'], [[-1, 0, 0], [0, 0, 1], [0, -1, 0]])
299+
assert_array_equal(hdr['Pxyz_c'], 0)
300+
assert_equal(hdr['tr'], 0)
301+
assert_equal(hdr['flip_angle'], 0)
302+
assert_equal(hdr['te'], 0)
303+
assert_equal(hdr['ti'], 0)
304+
assert_equal(hdr['fov'], 0)
305+
306+
big_codes = ('>', 'big', 'BIG', 'b', 'be', 'B', 'BE')
307+
little_codes = ('<', 'little', 'l', 'le', 'L', 'LE')
308+
309+
if sys_is_le:
310+
big_codes += ('swapped', 's', 'S', '!')
311+
little_codes += ('native', 'n', 'N', '=', '|', 'i', 'I')
312+
else:
313+
big_codes += ('native', 'n', 'N', '=', '|', 'i', 'I')
314+
little_codes += ('swapped', 's', 'S', '!')
315+
316+
for endianness in big_codes:
317+
hdr2 = MGHHeader.default_structarr(endianness=endianness)
318+
assert_equal(hdr2, hdr)
319+
assert_equal(hdr2.newbyteorder('>'), hdr)
320+
321+
for endianness in little_codes:
322+
with assert_raises(ValueError):
323+
MGHHeader.default_structarr(endianness=endianness)
324+
325+
289326
class TestMGHImage(tsi.TestSpatialImage, tsi.MmapImageMixin):
290327
""" Apply general image tests to MGHImage
291328
"""

0 commit comments

Comments
 (0)