def test_reductions():
    arr = YTArray([[1, 2, 3], [4, 5, 6]], 'cm')

    ev_result = arr.dot(YTArray([1, 2, 3], 'cm'))
    res = YTArray([14., 32.], 'cm**2')
    assert_equal(ev_result, res)
    assert_equal(ev_result.units, res.units)
    assert_isinstance(ev_result, YTArray)

    answers = {
        'prod': (YTQuantity(720, 'cm**6'), YTArray([4, 10, 18], 'cm**2'),
                 YTArray([6, 120], 'cm**3')),
        'sum': (
            YTQuantity(21, 'cm'),
            YTArray([5., 7., 9.], 'cm'),
            YTArray([6, 15], 'cm'),
        ),
        'mean': (YTQuantity(3.5, 'cm'), YTArray([2.5, 3.5, 4.5],
                                                'cm'), YTArray([2, 5], 'cm')),
        'std': (YTQuantity(1.707825127659933,
                           'cm'), YTArray([1.5, 1.5, 1.5], 'cm'),
                YTArray([0.81649658, 0.81649658], 'cm')),
    }
    for op, (result1, result2, result3) in answers.items():
        ev_result = getattr(arr, op)()
        assert_almost_equal(ev_result, result1)
        assert_almost_equal(ev_result.units, result1.units)
        assert_isinstance(ev_result, YTQuantity)
        for axis, result in [(0, result2), (1, result3), (-1, result3)]:
            ev_result = getattr(arr, op)(axis=axis)
            assert_almost_equal(ev_result, result)
            assert_almost_equal(ev_result.units, result.units)
            assert_isinstance(ev_result, YTArray)