| 1211 | TEST(CAPI, Execute_MatMul_XLA_CPUAsync) { Execute_MatMul_XLA_CPU(true); } |
| 1212 | |
| 1213 | void Execute_Min_XLA_CPU(bool async) { |
| 1214 | TF_Status* status = TF_NewStatus(); |
| 1215 | TFE_ContextOptions* opts = TFE_NewContextOptions(); |
| 1216 | TFE_ContextOptionsSetAsync(opts, static_cast<unsigned char>(async)); |
| 1217 | TFE_Context* ctx = TFE_NewContext(opts, status); |
| 1218 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1219 | TFE_DeleteContextOptions(opts); |
| 1220 | |
| 1221 | TFE_TensorHandle* input = TestMatrixTensorHandle(); |
| 1222 | TFE_TensorHandle* axis = TestAxisTensorHandle(); |
| 1223 | TFE_Op* minOp = MinOp(ctx, input, axis); |
| 1224 | |
| 1225 | TFE_OpSetXLACompilation(minOp, true); |
| 1226 | |
| 1227 | TFE_TensorHandle* retvals[1] = {nullptr}; |
| 1228 | int num_retvals = 1; |
| 1229 | TFE_Execute(minOp, &retvals[0], &num_retvals, status); |
| 1230 | EXPECT_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1231 | TFE_DeleteOp(minOp); |
| 1232 | TFE_DeleteTensorHandle(input); |
| 1233 | TFE_DeleteTensorHandle(axis); |
| 1234 | ASSERT_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1235 | ASSERT_EQ(1, num_retvals); |
| 1236 | |
| 1237 | TF_Tensor* t = TFE_TensorHandleResolve(retvals[0], status); |
| 1238 | TFE_DeleteTensorHandle(retvals[0]); |
| 1239 | ASSERT_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1240 | float output[2] = {0}; |
| 1241 | EXPECT_EQ(sizeof(output), TF_TensorByteSize(t)); |
| 1242 | memcpy(&output[0], TF_TensorData(t), TF_TensorByteSize(t)); |
| 1243 | TF_DeleteTensor(t); |
| 1244 | EXPECT_EQ(1, output[0]); |
| 1245 | EXPECT_EQ(3, output[1]); |
| 1246 | TFE_DeleteContext(ctx); |
| 1247 | TF_DeleteStatus(status); |
| 1248 | } |
| 1249 | TEST(CAPI, Execute_Min_XLA_CPU) { Execute_Min_XLA_CPU(false); } |
| 1250 | TEST(CAPI, Execute_Min_XLA_CPUAsync) { Execute_Min_XLA_CPU(true); } |
| 1251 | #endif // TENSORFLOW_EAGER_USE_XLA |
no test coverage detected