← 返回首页
/******************************************************* * 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)); }