| 95 | |
| 96 | template<typename T> |
| 97 | void transformTest(string pTestFile, string pHomographyFile, |
| 98 | const af_interp_type method, const bool invert) { |
| 99 | SUPPORTED_TYPE_CHECK(T); |
| 100 | IMAGEIO_ENABLED_CHECK(); |
| 101 | |
| 102 | af_array sceneArray = 0; |
| 103 | af_array goldArray = 0; |
| 104 | af_array outArray = 0; |
| 105 | af_array HArray = 0; |
| 106 | |
| 107 | dim_t odim0 = 0; |
| 108 | dim_t odim1 = 0; |
| 109 | |
| 110 | genTestData<T>(&goldArray, &sceneArray, &HArray, &odim0, &odim1, pTestFile, |
| 111 | pHomographyFile); |
| 112 | |
| 113 | ASSERT_SUCCESS(af_transform(&outArray, sceneArray, HArray, odim0, odim1, |
| 114 | method, invert)); |
| 115 | |
| 116 | // Get gold data |
| 117 | dim_t goldEl = 0; |
| 118 | ASSERT_SUCCESS(af_get_elements(&goldEl, goldArray)); |
| 119 | vector<T> goldData(goldEl); |
| 120 | ASSERT_SUCCESS(af_get_data_ptr((void *)&goldData.front(), goldArray)); |
| 121 | |
| 122 | // Get result |
| 123 | dim_t outEl = 0; |
| 124 | ASSERT_SUCCESS(af_get_elements(&outEl, outArray)); |
| 125 | vector<T> outData(outEl); |
| 126 | ASSERT_SUCCESS(af_get_data_ptr((void *)&outData.front(), outArray)); |
| 127 | |
| 128 | const float thr = 1.1f; |
| 129 | |
| 130 | // Maximum number of wrong pixels must be <= 0.01% of number of elements, |
| 131 | // this metric is necessary due to rounding errors between different |
| 132 | // backends for AF_INTERP_NEAREST and AF_INTERP_LOWER |
| 133 | const size_t maxErr = goldEl * 0.0001f; |
| 134 | size_t err = 0; |
| 135 | |
| 136 | for (dim_t elIter = 0; elIter < goldEl; elIter++) { |
| 137 | err += fabs((float)floor(outData[elIter]) - |
| 138 | (float)floor(goldData[elIter])) > thr; |
| 139 | if (err > maxErr) { |
| 140 | ASSERT_LE(err, maxErr) << "at: " << elIter << endl; |
| 141 | } |
| 142 | } |
| 143 | |
| 144 | if (HArray != 0) { af_release_array(HArray); } |
| 145 | if (outArray != 0) { af_release_array(outArray); } |
| 146 | if (goldArray != 0) { af_release_array(goldArray); } |
| 147 | if (sceneArray != 0) { af_release_array(sceneArray); } |
| 148 | } |
| 149 | |
| 150 | TYPED_TEST(Transform, PerspectiveNearest) { |
| 151 | transformTest<TypeParam>(string(TEST_DIR "/transform/tux_nearest.test"), |
nothing calls this directly
no test coverage detected