[arrayfire] 18/41: BUGFIX diagonal extract length is min instead of max of dims
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Mon Mar 21 14:56:22 UTC 2016
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch debian/experimental
in repository arrayfire.
commit 1fc86c44774ccd4b04b44450cf170b1b753d0d07
Author: Shehzan Mohammed <shehzan at arrayfire.com>
Date: Wed Mar 9 15:12:43 2016 -0500
BUGFIX diagonal extract length is min instead of max of dims
---
src/backend/cpu/diagonal.cpp | 2 +-
src/backend/cuda/diagonal.cu | 2 +-
src/backend/opencl/diagonal.cpp | 2 +-
test/diagonal.cpp | 31 +++++++++++++++++++++++++++++++
4 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/src/backend/cpu/diagonal.cpp b/src/backend/cpu/diagonal.cpp
index c818f82..80375ea 100644
--- a/src/backend/cpu/diagonal.cpp
+++ b/src/backend/cpu/diagonal.cpp
@@ -42,7 +42,7 @@ Array<T> diagExtract(const Array<T> &in, const int num)
in.eval();
const dim4 idims = in.dims();
- dim_t size = std::max(idims[0], idims[1]) - std::abs(num);
+ dim_t size = std::min(idims[0], idims[1]) - std::abs(num);
Array<T> out = createEmptyArray<T>(dim4(size, 1, idims[2], idims[3]));
getQueue().enqueue(kernel::diagExtract<T>, out, in, num);
diff --git a/src/backend/cuda/diagonal.cu b/src/backend/cuda/diagonal.cu
index fd023c9..db0d1b4 100644
--- a/src/backend/cuda/diagonal.cu
+++ b/src/backend/cuda/diagonal.cu
@@ -34,7 +34,7 @@ namespace cuda
Array<T> diagExtract(const Array<T> &in, const int num)
{
const dim_t *idims = in.dims().get();
- dim_t size = std::max(idims[0], idims[1]) - std::abs(num);
+ dim_t size = std::min(idims[0], idims[1]) - std::abs(num);
Array<T> out = createEmptyArray<T>(dim4(size, 1, idims[2], idims[3]));
kernel::diagExtract<T>(out, in, num);
diff --git a/src/backend/opencl/diagonal.cpp b/src/backend/opencl/diagonal.cpp
index 79cd758..8693b11 100644
--- a/src/backend/opencl/diagonal.cpp
+++ b/src/backend/opencl/diagonal.cpp
@@ -34,7 +34,7 @@ namespace opencl
Array<T> diagExtract(const Array<T> &in, const int num)
{
const dim_t *idims = in.dims().get();
- dim_t size = std::max(idims[0], idims[1]) - std::abs(num);
+ dim_t size = std::min(idims[0], idims[1]) - std::abs(num);
Array<T> out = createEmptyArray<T>(dim4(size, 1, idims[2], idims[3]));
kernel::diagExtract<T>(out, in, num);
diff --git a/test/diagonal.cpp b/test/diagonal.cpp
index c4becab..3f5e441 100644
--- a/test/diagonal.cpp
+++ b/test/diagonal.cpp
@@ -80,6 +80,37 @@ TYPED_TEST(Diagonal, Extract)
}
}
+TYPED_TEST(Diagonal, ExtractRect)
+{
+ if (noDoubleTests<TypeParam>()) return;
+
+ try {
+ static const int size0 = 1000, size1 = 900;
+ vector<TypeParam> input (size0 * size1);
+ for(int i = 0; i < size0 * size1; i++) {
+ input[i] = i;
+ }
+
+ for(int jj = 10; jj < size0; jj += 100) {
+ for(int kk = 10; kk < size1; kk += 90) {
+ array data(jj, kk, &input.front(), afHost);
+ array out = diag(data, 0);
+
+ vector<TypeParam> h_out(out.elements());
+ out.host(&h_out.front());
+
+ ASSERT_EQ(out.dims(0), std::min(jj, kk));
+
+ for(int i =0; i < (int)out.dims(0); i++) {
+ ASSERT_EQ(input[i * data.dims(0) + i], h_out[i]);
+ }
+ }
+ }
+ } catch (const af::exception& ex) {
+ FAIL() << ex.what() << std::endl;
+ }
+}
+
TEST(Diagonal, ExtractGFOR)
{
dim4 dims = dim4(100, 100, 3);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git
More information about the debian-science-commits
mailing list