| 253 | ARITH_TESTS_OPS(T, 123, 278, 5, eps) |
| 254 | |
| 255 | ARITH_TESTS(float, 1e-6) |
| 256 | ARITH_TESTS(double, 1e-6) |
| 257 | ARITH_TESTS(cfloat, 1e-4) // This is mostly for complex division in OpenCL |
| 258 | ARITH_TESTS(cdouble, 1e-6) |
| 259 | |
| 260 | // Sparse-Sparse Arithmetic testing function |
| 261 | template<typename T, af_op_t op> |
| 262 | void ssArithmetic(const int m, const int n, int factor, const double eps) { |
| 263 | deviceGC(); |
| 264 | |
| 265 | SUPPORTED_TYPE_CHECK(T); |
| 266 | |
| 267 | #if 1 |
| 268 | array A = cpu_randu<T>(dim4(m, n)); |
| 269 | array B = cpu_randu<T>(dim4(m, n)); |
| 270 | #else |
| 271 | array A = randu(m, n, (dtype)dtype_traits<T>::af_type); |
| 272 | array B = randu(m, n, (dtype)dtype_traits<T>::af_type); |
| 273 | #endif |
| 274 | |
| 275 | A = makeSparse<T>(A, factor); |
| 276 | B = makeSparse<T>(B, factor); |
| 277 | |
| 278 | array spA = sparse(A, AF_STORAGE_CSR); |
| 279 | array spB = sparse(B, AF_STORAGE_CSR); |
| 280 | |
| 281 | arith_op<op> binOp; |
| 282 | |
| 283 | // Arith Op |
| 284 | array resS = binOp(spA, spB); |
| 285 | array resD = binOp(A, B); |
| 286 | ASSERT_ARRAYS_NEAR(resD, resS, eps); |
| 287 | |
| 288 | array revS = binOp(spB, spA); |
| 289 | array revD = binOp(B, A); |
| 290 | ASSERT_ARRAYS_NEAR(revD, revS, eps); |
| 291 | } |
| 292 | |
| 293 | #define SP_SP_ARITH_TEST(type, m, n, factor, eps) \ |
| 294 | TEST(SparseSparseArith, type##_Addition_##m##_##n) { \ |
| 295 | ssArithmetic<type, af_add_t>(m, n, factor, eps); \ |
| 296 | } \ |
| 297 | TEST(SparseSparseArith, type##_Subtraction_##m##_##n) { \ |
| 298 | ssArithmetic<type, af_sub_t>(m, n, factor, eps); \ |
| 299 | } |
| 300 | |
| 301 | #define SP_SP_ARITH_TESTS(T, eps) \ |
| 302 | SP_SP_ARITH_TEST(T, 10, 10, 5, eps) \ |
| 303 | SP_SP_ARITH_TEST(T, 1024, 1024, 5, eps) \ |
| 304 | SP_SP_ARITH_TEST(T, 100, 100, 1, eps) \ |
| 305 | SP_SP_ARITH_TEST(T, 2048, 1000, 6, eps) \ |
| 306 | SP_SP_ARITH_TEST(T, 123, 278, 5, eps) |
| 307 | |
| 308 | SP_SP_ARITH_TESTS(float, 1e-6) |
| 309 | SP_SP_ARITH_TESTS(double, 1e-6) |
| 310 | SP_SP_ARITH_TESTS(cfloat, |
| 311 | 1e-4) // This is mostly for complex division in OpenCL |
| 312 | SP_SP_ARITH_TESTS(cdouble, 1e-6) |
nothing calls this directly
no test coverage detected