using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using Tensorflow; using Tensorflow.Eager; using Buffer = System.Buffer; namespace TensorFlowNET.UnitTest.Eager { public partial class CApiEagerTest { /// /// TEST(CAPI, Execute_MatMul_CPU) /// [TestMethod] public unsafe void Execute_MatMul_CPU() { Execute_MatMul_CPU(false); } unsafe void Execute_MatMul_CPU(bool async) { var status = TF_NewStatus(); var opts = TFE_NewContextOptions(); c_api.TFE_ContextOptionsSetAsync(opts, Convert.ToByte(async)); var ctx = TFE_NewContext(opts, status); CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); TFE_DeleteContextOptions(opts); var m = TestMatrixTensorHandle(); var matmul = MatMulOp(ctx, m, m); var retvals = new IntPtr[] { IntPtr.Zero, IntPtr.Zero }; int num_retvals = 2; c_api.TFE_Execute(matmul, retvals, ref num_retvals, status); EXPECT_EQ(1, num_retvals); EXPECT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); TFE_DeleteOp(matmul); TFE_DeleteTensorHandle(m); var t = TFE_TensorHandleResolve(retvals[0], status); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); TFE_DeleteTensorHandle(retvals[0]); TFE_DeleteContext(ctx); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); var product = new float[4]; EXPECT_EQ(product.Length * sizeof(float), (int)TF_TensorByteSize(t)); memcpy(TF_TensorData(t), product, TF_TensorByteSize(t)); c_api.TF_DeleteTensor(t); EXPECT_EQ(7f, product[0]); EXPECT_EQ(10f, product[1]); EXPECT_EQ(15f, product[2]); EXPECT_EQ(22f, product[3]); TF_DeleteStatus(status); } } }