| 999 | } |
| 1000 | |
| 1001 | void Execute_MatMul_CPU(bool async) { |
| 1002 | TF_Status* status = TF_NewStatus(); |
| 1003 | TFE_ContextOptions* opts = TFE_NewContextOptions(); |
| 1004 | TFE_ContextOptionsSetAsync(opts, static_cast<unsigned char>(async)); |
| 1005 | TFE_Context* ctx = TFE_NewContext(opts, status); |
| 1006 | CHECK_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1007 | TFE_DeleteContextOptions(opts); |
| 1008 | |
| 1009 | TFE_TensorHandle* m = TestMatrixTensorHandle(); |
| 1010 | TFE_Op* matmul = MatMulOp(ctx, m, m); |
| 1011 | TFE_TensorHandle* retvals[2] = {nullptr, nullptr}; |
| 1012 | int num_retvals = 2; |
| 1013 | TFE_Execute(matmul, &retvals[0], &num_retvals, status); |
| 1014 | EXPECT_EQ(1, num_retvals); |
| 1015 | EXPECT_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1016 | TFE_DeleteOp(matmul); |
| 1017 | TFE_DeleteTensorHandle(m); |
| 1018 | |
| 1019 | TF_Tensor* t = TFE_TensorHandleResolve(retvals[0], status); |
| 1020 | ASSERT_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1021 | TFE_DeleteTensorHandle(retvals[0]); |
| 1022 | TFE_DeleteContext(ctx); |
| 1023 | ASSERT_EQ(TF_OK, TF_GetCode(status)) << TF_Message(status); |
| 1024 | float product[4] = {0}; |
| 1025 | EXPECT_EQ(sizeof(product), TF_TensorByteSize(t)); |
| 1026 | memcpy(&product[0], TF_TensorData(t), TF_TensorByteSize(t)); |
| 1027 | TF_DeleteTensor(t); |
| 1028 | EXPECT_EQ(7, product[0]); |
| 1029 | EXPECT_EQ(10, product[1]); |
| 1030 | EXPECT_EQ(15, product[2]); |
| 1031 | EXPECT_EQ(22, product[3]); |
| 1032 | TF_DeleteStatus(status); |
| 1033 | } |
| 1034 | TEST(CAPI, Execute_MatMul_CPU) { Execute_MatMul_CPU(false); } |
| 1035 | TEST(CAPI, Execute_MatMul_CPUAsync) { Execute_MatMul_CPU(true); } |
| 1036 |
no test coverage detected