--- a
+++ b/tests/test_nparr.py
@@ -0,0 +1,146 @@
+from copy import copy
+
+import numpy as np
+import pytest
+
+from janggu.data import Array
+from janggu.data import NanToNumConverter
+from janggu.data import RandomOrientation
+from janggu.data import RandomShift
+from janggu.data import RandomSignalScale
+from janggu.data import ReduceDim
+from janggu.data import SqueezeDim
+
+
+def test_nparr(tmpdir):
+    X = Array("X", np.random.random((1000, 100)))
+    y = Array('y', np.random.randint(2, size=(1000,)))
+
+    np.testing.assert_equal(len(X), len(y))
+    np.testing.assert_equal(len(X), 1000)
+    np.testing.assert_equal(X.shape, (1000, 100,))
+    np.testing.assert_equal(y.shape, (1000, 1))
+    assert y.ndim == 2
+    assert y.shape == (1000, 1)
+    new_X = copy(X)
+
+
+def test_reducedim():
+    x_orig = np.zeros((3,1,1,2))
+
+    np.testing.assert_equal(x_orig.ndim, 4)
+    x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]))
+    x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator='mean')
+    x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator='max')
+    x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator=np.mean)
+    with pytest.raises(ValueError):
+        ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator='nonsense')
+
+    np.testing.assert_equal(len(x_reduce), 3)
+    np.testing.assert_equal(x_reduce.shape, (3,2))
+    np.testing.assert_equal(x_reduce.ndim, 2)
+    assert x_reduce[0].shape == (1, 2)
+    assert x_reduce[:3].shape == (3, 2)
+    assert x_reduce[[0,1]].shape == (2, 2)
+    assert x_reduce.ndim == 2
+    new_x = copy(x_reduce)
+    assert x_reduce[0].shape == new_x[0].shape
+    assert x_reduce.conditions == ["A", "B"]
+
+def test_squeezedim():
+    x_orig = np.zeros((3,1,1,2))
+
+    np.testing.assert_equal(x_orig.ndim, 4)
+    x_sq = SqueezeDim(Array('test', x_orig, conditions=["A", "B"]))
+
+    np.testing.assert_equal(len(x_sq), 3)
+
+    np.testing.assert_equal(x_sq.shape, (3,2))
+
+    np.testing.assert_equal(x_sq.ndim, 2)
+    assert x_sq[0].shape == (2,)
+    assert x_sq[:3].shape == (3, 2)
+    assert x_sq[[0,1]].shape == (2, 2)
+    assert x_sq.ndim == 2
+    new_x = copy(x_sq)
+    assert x_sq[0].shape == new_x[0].shape
+    assert x_sq.conditions == ["A", "B"]
+
+
+def test_nantonumconverter():
+    x_orig = np.zeros((3,1,1,2))
+    x_orig[0,0,0,0] = np.nan
+    arr = Array('test', x_orig, conditions=["A", "B"])
+    assert np.isnan(arr[0].mean())
+
+    x_tr = NanToNumConverter(Array('test', x_orig, conditions=["A", "B"]))
+    assert x_tr[0].shape == (1, 1, 1, 2)
+    assert x_tr[:3].shape == (3, 1, 1, 2)
+    assert x_tr[[0,1]].shape == (2, 1, 1, 2)
+    assert len(x_tr) == 3
+    assert x_tr.shape == (3, 1, 1, 2)
+    assert x_tr.ndim == 4
+    assert not np.isnan(x_tr[0].mean())
+    np.testing.assert_equal(x_tr[0], [[[[0,0]]]])
+    new_x = copy(x_tr)
+    assert x_tr[0].shape == new_x[0].shape
+    assert x_tr.conditions == ["A", "B"]
+
+def test_randomorientation():
+    x_orig = np.zeros((3,1,1,2))
+
+    x_tr = RandomOrientation(Array('test', x_orig, conditions=["A", "B"]))
+    assert x_tr[0].shape == (1, 1, 1, 2)
+    assert x_tr[:3].shape == (3, 1, 1, 2)
+    assert x_tr[[0,1]].shape == (2, 1, 1, 2)
+    np.testing.assert_equal(len(x_tr), 3)
+    assert len(x_tr) == 3
+    assert x_tr.shape == (3, 1, 1, 2)
+    assert x_tr.ndim == 4
+    np.testing.assert_equal(x_tr[0], [[[[0,0]]]])
+    new_x = copy(x_tr)
+    assert x_tr[0].shape == new_x[0].shape
+    assert x_tr.conditions == ["A", "B"]
+
+
+def test_randomsignalscale():
+    x_orig = np.ones((3,1,1,2))
+
+    x_tr = RandomSignalScale(Array('test', x_orig), .1)
+    assert x_tr[0].shape == (1, 1, 1, 2)
+    assert x_tr[:3].shape == (3, 1, 1, 2)
+    assert x_tr[[0,1]].shape == (2, 1, 1, 2)
+    np.testing.assert_equal(len(x_tr), 3)
+    assert len(x_tr) == 3
+    assert x_tr.shape == (3, 1, 1, 2)
+    assert x_tr.ndim == 4
+    new_x = copy(x_tr)
+    assert x_tr[0].shape == new_x[0].shape
+    assert x_tr.conditions == None
+
+
+def test_randomshift():
+    x_orig = np.zeros((1,4,1,4))
+    x_orig[0, 0, 0,0] = 1
+    x_orig[0, 1, 0,1] = 1
+    x_orig[0, 2, 0,2] = 1
+    x_orig[0, 3, 0,3] = 1
+
+    x_tr = RandomShift(Array('test', x_orig), 1)
+    assert x_tr[0].shape == (1, 4, 1, 4)
+    np.testing.assert_equal(len(x_tr), 1)
+    assert x_tr.shape == (1, 4, 1, 4)
+    assert x_tr.ndim == 4
+    new_x = copy(x_tr)
+    assert x_tr[0].shape == new_x[0].shape
+    assert x_tr.conditions == None
+    
+    x_tr = RandomShift(Array('test', x_orig), 1, True)
+    assert x_tr[0].shape == (1, 4, 1, 4)
+    np.testing.assert_equal(len(x_tr), 1)
+    assert x_tr.shape == (1, 4, 1, 4)
+    assert x_tr.ndim == 4
+    new_x = copy(x_tr)
+    assert x_tr[0].shape == new_x[0].shape
+    assert x_tr.conditions == None
+