Skip to content

Commit a40de1e

Browse files
authored
Merge pull request #155 from feltech/bug/TensorMap_compound_assignment
Fix TensorMap compound assignment operators
2 parents 76152e2 + 8d0d32b commit a40de1e

2 files changed

Lines changed: 34 additions & 4 deletions

File tree

Fastor/tensor/TensorMap.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,19 +148,19 @@ FASTOR_INLINE void assign(AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Re
148148
trivial_assign(dst.self(),src);
149149
}
150150
template<typename Derived, size_t DIM, typename T, size_t ...Rest>
151-
FASTOR_INLINE void assign_add(const AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
151+
FASTOR_INLINE void assign_add(AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
152152
trivial_assign_add(dst.self(),src);
153153
}
154154
template<typename Derived, size_t DIM, typename T, size_t ...Rest>
155-
FASTOR_INLINE void assign_sub(const AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
155+
FASTOR_INLINE void assign_sub(AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
156156
trivial_assign_sub(dst.self(),src);
157157
}
158158
template<typename Derived, size_t DIM, typename T, size_t ...Rest>
159-
FASTOR_INLINE void assign_mul(const AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
159+
FASTOR_INLINE void assign_mul(AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
160160
trivial_assign_mul(dst.self(),src);
161161
}
162162
template<typename Derived, size_t DIM, typename T, size_t ...Rest>
163-
FASTOR_INLINE void assign_div(const AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
163+
FASTOR_INLINE void assign_div(AbstractTensor<Derived,DIM> &dst, const TensorMap<T,Rest...> &src) {
164164
trivial_assign_div(dst.self(),src);
165165
}
166166

tests/test_tensormap/test_tensormap.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,36 @@ void run() {
5555
FASTOR_EXIT_ASSERT(std::abs(a.sum() - ma.sum()) < Tol);
5656
}
5757

58+
// Compound assignment operators.
59+
{
60+
Tensor<T,4,5> src;
61+
src = 3;
62+
TensorMap<T,4,5> msrc(src);
63+
Tensor<T,4,5> dst;
64+
dst = 0;
65+
Tensor<T,4,5> check;
66+
67+
// +=
68+
check = 3;
69+
dst += msrc;
70+
FASTOR_EXIT_ASSERT(all_of(dst == check));
71+
72+
// *=
73+
check = 9;
74+
dst *= msrc;
75+
FASTOR_EXIT_ASSERT(all_of(dst == check));
76+
77+
// -=
78+
check = 6;
79+
dst -= msrc;
80+
FASTOR_EXIT_ASSERT(all_of(dst == check));
81+
82+
// /=
83+
check = 2;
84+
dst /= msrc;
85+
FASTOR_EXIT_ASSERT(all_of(dst == check));
86+
}
87+
5888
// Map a const array and copy-assign it to a non-const tensor.
5989
{
6090
const T data[] = {1, 2, 3};

0 commit comments

Comments
 (0)