""" Testing Siemens CSA header reader """ import sys import struct from ...py3k import asbytes from ..structreader import Unpacker from nose.tools import (assert_true, assert_false, assert_equal, assert_raises) from numpy.testing import assert_array_equal, assert_array_almost_equal def test_unpacker(): s = asbytes('1234\x00\x01') le_int, = struct.unpack('h', asbytes('\x00\x01')) if sys.byteorder == 'little': native_int = le_int swapped_int = be_int native_code = '<' swapped_code = '>' else: native_int = be_int swapped_int = le_int native_code = '>' swapped_code = '<' up_str = Unpacker(s, endian='<') assert_equal(up_str.read(4), asbytes('1234')) up_str.ptr = 0 assert_equal(up_str.unpack('4s'), (asbytes('1234'),)) assert_equal(up_str.unpack('h'), (le_int,)) up_str = Unpacker(s, endian='>') assert_equal(up_str.unpack('4s'), (asbytes('1234'),)) assert_equal(up_str.unpack('h'), (be_int,)) # now test conflict of endian up_str = Unpacker(s, ptr=4, endian='>') assert_equal(up_str.unpack('h'), (be_int,)) up_str.ptr = 4 assert_equal(up_str.unpack('@h'), (native_int,)) # test -1 for read up_str.ptr = 2 assert_equal(up_str.read(), asbytes('34\x00\x01')) # past end assert_equal(up_str.read(), asbytes('')) # with n_bytes up_str.ptr = 2 assert_equal(up_str.read(2), asbytes('34')) assert_equal(up_str.read(2), asbytes('\x00\x01'))