| 78 | |
| 79 | template<typename T> |
| 80 | void meanDimTest(string pFileName, dim_t dim, bool isWeighted = false) { |
| 81 | typedef typename meanOutType<T>::type outType; |
| 82 | SUPPORTED_TYPE_CHECK(T); |
| 83 | SUPPORTED_TYPE_CHECK(outType); |
| 84 | |
| 85 | double tol = 1.0e-3; |
| 86 | if ((af_dtype)af::dtype_traits<T>::af_type == f16) tol = 4.e-3; |
| 87 | vector<dim4> numDims; |
| 88 | vector<vector<int>> in; |
| 89 | vector<vector<float>> tests; |
| 90 | |
| 91 | readTestsFromFile<int, float>(pFileName, numDims, in, tests); |
| 92 | |
| 93 | dim4 goldDims = numDims[0]; |
| 94 | goldDims[dim] = 1; |
| 95 | if (!isWeighted) { |
| 96 | dim4 dims = numDims[0]; |
| 97 | vector<T> input(in[0].begin(), in[0].end()); |
| 98 | |
| 99 | array inArray(dims, &(input.front())); |
| 100 | |
| 101 | array outArray = mean(inArray, dim); |
| 102 | |
| 103 | vector<outType> outData(dims.elements()); |
| 104 | |
| 105 | outArray.host((void*)outData.data()); |
| 106 | |
| 107 | vector<outType> currGoldBar(tests[0].begin(), tests[0].end()); |
| 108 | |
| 109 | dim4 goldDims = dims; |
| 110 | goldDims[dim] = 1; |
| 111 | ASSERT_VEC_ARRAY_NEAR(currGoldBar, goldDims, outArray, tol); |
| 112 | } else { |
| 113 | dim4 dims = numDims[0]; |
| 114 | dim4 wdims = numDims[1]; |
| 115 | vector<T> input(in[0].begin(), in[0].end()); |
| 116 | vector<float> weights(in[1].size()); |
| 117 | transform(in[1].begin(), in[1].end(), weights.begin(), |
| 118 | convert_to<float, int>); |
| 119 | |
| 120 | array inArray(dims, &(input.front())); |
| 121 | array wtsArray(wdims, &(weights.front())); |
| 122 | |
| 123 | array outArray = mean(inArray, wtsArray, dim); |
| 124 | |
| 125 | vector<outType> outData(dims.elements()); |
| 126 | |
| 127 | outArray.host((void*)outData.data()); |
| 128 | |
| 129 | vector<outType> currGoldBar(tests[0].begin(), tests[0].end()); |
| 130 | |
| 131 | ASSERT_VEC_ARRAY_NEAR(currGoldBar, goldDims, outArray, tol); |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | TYPED_TEST(Mean, Dim0Matrix) { |
| 136 | meanDimTest<TypeParam>(string(TEST_DIR "/mean/mean_dim0_matrix.test"), 0); |