[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/arrayfire/arrayfire/feature/optional-graphics/test/empty.cpp [Back]  [Original]

/*******************************************************
 * Copyright (c) 2016, ArrayFire
 * All rights reserved.
 *
 * This file is distributed under 3-clause BSD license.
 * The complete license agreement can be obtained at:
 * http://arrayfire.com/licenses/BSD-3-Clause
 ********************************************************/

#include 
#include 

#include 
#include 
#include 

using namespace af;

template
class Array : public ::testing::Test {};

TEST(Array, TestEmptyAssignment) {
    array A     = randu(5, f32);
    array C     = constant(0, 0);
    array B     = A(isNaN(A));
    A(isNaN(A)) = C;
    ASSERT_EQ(B.numdims(), 0u);
    ASSERT_EQ(A.numdims(), 1u);
    ASSERT_EQ(lookup(constant(1, 9), constant(0, 0)).numdims(), 0u);
}

TEST(Array, TestEmptySigProc) {
    ASSERT_EQ(convolve(constant(1, 1), constant(0, 0)).numdims(), 1u);
    ASSERT_EQ(convolve(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(convolve2(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(convolve3(constant(0, 0), constant(0, 0)).numdims(), 0u);

    ASSERT_EQ(iir(constant(0, 0), constant(0, 0), constant(0, 0)).numdims(),
              0u);

    ASSERT_EQ(approx1(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(approx1(constant(0, 0), seq(0, 10)).numdims(), 0u);
    ASSERT_EQ(approx2(constant(0, 0), constant(0, 0), constant(0, 0)).numdims(),
              0u);
    ASSERT_EQ(approx2(constant(0, 0), seq(0, 10), seq(0, 10)).numdims(), 0u);
}

TEST(Array, TestEmptySet) {
    ASSERT_EQ(setIntersect(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(setUnique(constant(0, 0)).numdims(), 0u);

    array A = randu(5, f32);
    array B = constant(0, 0);

    ASSERT_EQ(setUnion(A, B).elements(), 5);
    ASSERT_EQ(setUnion(B, A).elements(), 5);
}

TEST(Array, TestEmptyOperators) {
    ASSERT_EQ((constant(0, 0) + constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) && constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) - constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) & constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) | constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) ^ constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) > constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) / constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) == constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) = constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) > constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) < constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(-constant(0, 0).numdims(), 0u);
    ASSERT_EQ((!constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) != constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) += 1).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) -= 1).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) *= 1).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) /= 1).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) || constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) % constant(0, 0)).numdims(), 0u);
    ASSERT_EQ((constant(0, 0) * constant(0, 0)).numdims(), 0u);
}

TEST(Array, TestEmptyFFT) {
    array arr = constant(0, 0);
    fftInPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);
    fft2InPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);
    fft3InPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);
    ifftInPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);
    ifft2InPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);
    ifft3InPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);

    ASSERT_EQ((fft(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fftNorm(constant(0, 0), 0.5)).numdims(), 0u);
    ASSERT_EQ((fft2(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fft2Norm(constant(0, 0), 0.5)).numdims(), 0u);
    ASSERT_EQ((fft3(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fft3Norm(constant(0, 0), 0.5)).numdims(), 0u);
    ASSERT_EQ((fftC2R(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fftR2C(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fftC2R(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fftR2C(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fftC2R(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((fftR2C(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((ifft(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((ifftNorm(constant(0, 0), 0.5)).numdims(), 0u);
    ASSERT_EQ((ifft2(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((ifft2Norm(constant(0, 0), 0.5)).numdims(), 0u);
    ASSERT_EQ((ifft3(constant(0, 0))).numdims(), 0u);
    ASSERT_EQ((ifft3Norm(constant(0, 0), 0.5)).numdims(), 0u);
}

TEST(Array, TestEmptyDiff) {
    ASSERT_EQ(diff1(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(diff1(constant(1, 1)).numdims(), 0u);
    ASSERT_EQ(diff1(constant(1, 2)).numdims(), 1u);
    ASSERT_EQ(diff2(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(diff2(constant(1, 1)).numdims(), 0u);
    ASSERT_EQ(diff2(constant(1, 2)).numdims(), 0u);
    ASSERT_EQ(diff2(constant(1, 3)).numdims(), 1u);
}

TEST(Array, TestEmptyLinAlg) {
    ASSERT_EQ(det(constant(0, 0)), 1);
    ASSERT_EQ(det(constant(0, 0)).real, 1);
    ASSERT_EQ(det(constant(0, 0)).real, 1);
    ASSERT_EQ(norm(constant(0, 0)), 0);
    ASSERT_EQ(rank(constant(0, 0)), 0u);

    array tau_qr, arr = constant(0, 0);
    qrInPlace(tau_qr, arr);
    ASSERT_EQ(tau_qr.numdims(), 0u);

    array out_qr;
    qr(out_qr, tau_qr, constant(0, 0));
    ASSERT_EQ(out_qr.numdims(), 0u);
    ASSERT_EQ(tau_qr.numdims(), 0u);
    ASSERT_EQ(solve(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(solveLU(constant(0, 0), constant(0, 0), constant(0, 0)).numdims(),
              0u);

    array out_lu, piv_lu;
    lu(out_lu, piv_lu, constant(0, 0));
    ASSERT_EQ(out_lu.numdims(), 0u);
    ASSERT_EQ(piv_lu.numdims(), 0u);

    array low_lu, up_lu;
    lu(low_lu, up_lu, piv_lu, constant(0, 0));
    ASSERT_EQ(low_lu.numdims(), 0u);
    ASSERT_EQ(up_lu.numdims(), 0u);
    ASSERT_EQ(piv_lu.numdims(), 0u);

    luInPlace(piv_lu, arr, true);
    ASSERT_EQ(piv_lu.numdims(), 0u);
    ASSERT_EQ(arr.numdims(), 0u);

    array u, s, v;
    svd(u, s, v, constant(0, 0));
    svdInPlace(u, s, v, arr);
    ASSERT_EQ(dot(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(transpose(constant(0, 0)).numdims(), 0u);
    choleskyInPlace(arr);
    ASSERT_EQ(arr.numdims(), 0u);
    array out;
    cholesky(out, constant(0, 0));
    ASSERT_EQ(out.numdims(), 0u);
}

TEST(Array, TestEmptyMath) {
    ASSERT_EQ(acos(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(acosh(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(abs(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(asin(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(asinh(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(atan(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(atan2(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(atanh(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(cos(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(cosh(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(log(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(log10(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(log1p(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(sin(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(sinh(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(tan(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(tanh(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(sqrt(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(real(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(imag(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(conjg(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(erf(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(erfc(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(exp(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(expm1(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(cbrt(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(ceil(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(lgamma(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(pow(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(root(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(tgamma(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(arg(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(floor(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(hypot(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(rem(constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(round(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(sign(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(trunc(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(factorial(constant(0, 0)).numdims(), 0u);
    // ASSERT_EQ(complex(constant(0,0), constant(0,0)).numdims(), 0u);
}

TEST(Array, TestEmptyVecOp) {
    ASSERT_EQ(accum(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(allTrue(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(anyTrue(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(count(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(where(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(max(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(min(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(product(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(sum(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(sort(constant(0, 0)).numdims(), 0u);

    array skeys, svals;
    sort(skeys, svals, constant(0, 0), constant(0, 0));
    ASSERT_EQ(skeys.numdims(), 0u);
    ASSERT_EQ(svals.numdims(), 0u);

    array sout, sind;
    sort(sout, sind, constant(0, 0));
    ASSERT_EQ(sout.numdims(), 0u);
    ASSERT_EQ(sind.numdims(), 0u);
}

TEST(Array, TestEmptyArrMod) {
    ASSERT_EQ(diag(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(diag(constant(0, 0), true).numdims(), 0u);
    ASSERT_EQ(identity(0).numdims(), 0u);
    ASSERT_EQ(iota(dim4(0)).numdims(), 0u);
    ASSERT_EQ(lower(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(upper(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(constant(0, 0).as(u8).numdims(), 0u);
    ASSERT_EQ(isNaN(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(isInf(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(iszero(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(flat(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(flip(constant(0, 0), 0).numdims(), 0u);
    ASSERT_EQ(moddims(constant(0, 0), dim4(0)).numdims(), 0u);
    ASSERT_EQ(reorder(constant(0, 0), 0).numdims(), 0u);
    ASSERT_EQ(shift(constant(0, 0), 1).numdims(), 0u);
    ASSERT_EQ(tile(constant(0, 0), 1).numdims(), 0u);

    ASSERT_EQ(join(0, constant(0, 0), constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(join(0, randu(3), constant(0, 0)).elements(), 3);
    ASSERT_EQ(join(0, constant(0, 0), randn(3)).elements(), 3);

    ASSERT_EQ(select(constant(0, 0), constant(0, 0), constant(0, 0)).numdims(),
              0u);

    array arr = constant(0, 0);
    replace(arr, constant(0, 0), constant(0, 0));
    ASSERT_EQ(arr.numdims(), 0u);
}

TEST(Array, TestEmptyImage) {
    ASSERT_EQ(histogram(constant(0, 0), 1).numdims(), 0u);
    ASSERT_EQ(hsv2rgb(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(gray2rgb(constant(0, 0)).numdims(), 0u);
    ASSERT_EQ(rotate(constant(0, 0), 0).numdims(), 0u);

    af_array h, hout;
    dim_t ds[1];
    af_constant(&h, 0, 0, ds, f32);
    af_histogram(&hout, h, 10, 0.0, 1.0);

    unsigned nd;
    af_get_numdims(&nd, h);
    ASSERT_EQ(nd, 0u);
    af_get_numdims(&nd, hout);
    ASSERT_EQ(nd, 0u);
    ASSERT_SUCCESS(af_release_array(h));
    ASSERT_SUCCESS(af_release_array(hout));
}

Web Proxy Viewer  |  New URL  |  Original Page