diff --git a/.travis.yml b/.travis.yml
index 9e1e4d3..f486f6d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,9 +9,9 @@ notifications:
 
 python:
   - 2.7
-  - 3.4
   - 3.5
   - 3.6
+  - 3.7
 
 cache:
     directories:
@@ -20,7 +20,7 @@ cache:
 env:
   global:
     # Directory where tests are run from
-    - CONDA_DEPS="pip nose numpy scipy numba"
+    - CONDA_DEPS="pip nose numpy scipy numba pytest<4 coveralls"
 
 before_install:
 - export MINICONDA=$HOME/miniconda
@@ -35,11 +35,10 @@ before_install:
 - conda install python=$TRAVIS_PYTHON_VERSION $CONDA_DEPS
 
 install:
-    - pip install python-coveralls pytest-faulthandler
     - pip install -e .[docs,tests]
 
 script:
-    - py.test
+    - pytest
 
 after_success:
     - coveralls
diff --git a/resampy/core.py b/resampy/core.py
index 1c143c1..13136f7 100644
--- a/resampy/core.py
+++ b/resampy/core.py
@@ -97,7 +97,14 @@ def resample(x, sr_orig, sr_new, axis=-1, filter='kaiser_best', **kwargs):
         raise ValueError('Input signal length={} is too small to '
                          'resample from {}->{}'.format(x.shape[axis], sr_orig, sr_new))
 
-    y = np.zeros(shape, dtype=x.dtype)
+    # Preserve contiguity of input (if it exists)
+    # If not, revert to C-contiguity by default
+    if x.flags['F_CONTIGUOUS']:
+        order = 'F'
+    else:
+        order = 'C'
+
+    y = np.zeros(shape, dtype=x.dtype, order=order)
 
     interp_win, precision, _ = get_filter(filter, **kwargs)
 
diff --git a/setup.py b/setup.py
index 72bf2a1..dab3891 100644
--- a/setup.py
+++ b/setup.py
@@ -29,7 +29,7 @@ setup(
             'numpydoc',
         ],
         'tests': [
-            'pytest',
+            'pytest < 4',
             'pytest-cov',
         ],
     },
@@ -42,8 +42,8 @@ setup(
         "Programming Language :: Python :: 2",
         "Programming Language :: Python :: 2.7",
         "Programming Language :: Python :: 3",
-        "Programming Language :: Python :: 3.4",
         "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: 3.7",
     ],
 )

Resampling does not preserve array byte ordering
The title says it all: if you give a multidimensional array `x` as input, the output may have a different (ie c-contiguous) ordering.

The culprit is this line: https://github.com/bmcfee/resampy/blob/e5238a7120dcf0d76813bcd3e277998ead8fc308/resampy/core.py#L100 which does not propagate the ordering information.

Fixing this is a bit delicate, but it should be doable.
diff --git a/tests/test_core.py b/tests/test_core.py
index c5b9992..01f94fc 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -78,3 +78,17 @@ def test_good_window():
     y = resampy.resample(x, sr_orig, sr_new, filter='sinc_window', window=scipy.signal.blackman)
 
     assert len(y) == 2 * len(x)
+
+
+@pytest.mark.parametrize('order', ['C', 'F'])
+@pytest.mark.parametrize('shape', [(50,), (10, 50), (10, 25, 50)])
+@pytest.mark.parametrize('axis', [0, -1])
+def test_contiguity(order, shape, axis):
+
+    x = np.zeros(shape, dtype=np.float, order=order)
+    sr_orig = 1
+    sr_new = 2
+    y = resampy.resample(x, sr_orig, sr_new, axis=axis)
+
+    assert x.flags['C_CONTIGUOUS'] == y.flags['C_CONTIGUOUS']
+    assert x.flags['F_CONTIGUOUS'] == y.flags['F_CONTIGUOUS']
diff --git a/tests/test_quality.py b/tests/test_quality.py
index 4fabf13..0a43f61 100644
--- a/tests/test_quality.py
+++ b/tests/test_quality.py
@@ -8,13 +8,13 @@ import resampy
 
 
 def make_tone(freq, sr, duration):
-    return np.sin(2 * np.pi * freq / sr * np.arange(sr * duration))
+    return np.sin(2 * np.pi * freq / sr * np.arange(int(sr * duration)))
 
 
 def make_sweep(freq, sr, duration):
     return np.sin(np.cumsum(2 * np.pi * np.logspace(np.log2(2.0 / sr),
                                                     np.log2(float(freq) / sr),
-                                                    num=duration*sr, base=2.0)))
+                                                    num=int(duration*sr), base=2.0)))
 
 
 @pytest.mark.parametrize('sr_orig,sr_new', [(44100, 22050), (22050, 44100)])

pip install -e .[docs,tests]
parse_log_pytest
pytest
pytest pytest-cov
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
Babel==2.11.0
certifi==2021.5.30
charset-normalizer==2.0.12
coverage==6.2
docutils==0.18.1
idna==3.10
imagesize==1.4.1
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
Jinja2==3.0.3
llvmlite==0.36.0
MarkupSafe==2.0.1
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
numba==0.53.1
numpy==1.19.5
numpydoc==1.1.0
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
Pygments==2.14.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-cov==4.0.0
pytz==2025.2
requests==2.27.1
-e git+https://github.com/bmcfee/resampy.git@e5238a7120dcf0d76813bcd3e277998ead8fc308#egg=resampy
scipy==1.5.4
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==1.2.3
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: resampy
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - babel==2.11.0
      - charset-normalizer==2.0.12
      - coverage==6.2
      - docutils==0.18.1
      - idna==3.10
      - imagesize==1.4.1
      - jinja2==3.0.3
      - llvmlite==0.36.0
      - markupsafe==2.0.1
      - numba==0.53.1
      - numpy==1.19.5
      - numpydoc==1.1.0
      - pygments==2.14.0
      - pytest-cov==4.0.0
      - pytz==2025.2
      - requests==2.27.1
      - scipy==1.5.4
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - tomli==1.2.3
      - urllib3==1.26.20
prefix: /opt/conda/envs/resampy

tests/test_core.py::test_contiguity[0-shape1-F] tests/test_core.py::test_contiguity[0-shape2-F] tests/test_core.py::test_contiguity[-1-shape1-F] tests/test_core.py::test_contiguity[-1-shape2-F]
tests/test_core.py::test_shape[0] tests/test_core.py::test_shape[1] tests/test_core.py::test_shape[2] tests/test_core.py::test_dtype[float32] tests/test_core.py::test_dtype[float64] tests/test_core.py::test_dtype[int16] tests/test_core.py::test_dtype[int32] tests/test_core.py::test_dtype[int64] tests/test_core.py::test_good_window tests/test_core.py::test_contiguity[0-shape0-C] tests/test_core.py::test_contiguity[0-shape0-F] tests/test_core.py::test_contiguity[0-shape1-C] tests/test_core.py::test_contiguity[0-shape2-C] tests/test_core.py::test_contiguity[-1-shape0-C] tests/test_core.py::test_contiguity[-1-shape0-F] tests/test_core.py::test_contiguity[-1-shape1-C] tests/test_core.py::test_contiguity[-1-shape2-C] tests/test_quality.py::test_quality_sine[sinc_window-1e-06-44100-22050] tests/test_quality.py::test_quality_sine[sinc_window-1e-06-22050-44100] tests/test_quality.py::test_quality_sine[kaiser_fast-0.0001-44100-22050] tests/test_quality.py::test_quality_sine[kaiser_fast-0.0001-22050-44100] tests/test_quality.py::test_quality_sine[kaiser_best-1e-07-44100-22050] tests/test_quality.py::test_quality_sine[kaiser_best-1e-07-22050-44100] tests/test_quality.py::test_quality_sweep[sinc_window-0.1-44100-22050] tests/test_quality.py::test_quality_sweep[sinc_window-0.1-22050-44100] tests/test_quality.py::test_quality_sweep[kaiser_fast-0.1-44100-22050] tests/test_quality.py::test_quality_sweep[kaiser_fast-0.1-22050-44100] tests/test_quality.py::test_quality_sweep[kaiser_best-0.1-44100-22050] tests/test_quality.py::test_quality_sweep[kaiser_best-0.1-22050-44100]
resampy/core.py .travis.yml setup.py
resampy/core.py .travis.yml setup.py