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, Variables) /// [TestMethod] public unsafe void Variables() { using var status = c_api.TF_NewStatus(); var opts = TFE_NewContextOptions(); var ctx = TFE_NewContext(opts, status); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); TFE_DeleteContextOptions(opts); var var_handle = CreateVariable(ctx, 12.0f, status); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); var op = TFE_NewOp(ctx, "ReadVariableOp", status); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); TFE_OpSetAttrType(op, "dtype", TF_FLOAT); TFE_OpAddInput(op, var_handle, status); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); int num_retvals = 1; var value_handle = new[] { IntPtr.Zero }; TFE_Execute(op, value_handle, ref num_retvals, status); TFE_DeleteOp(op); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); ASSERT_EQ(1, num_retvals); EXPECT_EQ(TF_FLOAT, TFE_TensorHandleDataType(value_handle[0])); EXPECT_EQ(0, TFE_TensorHandleNumDims(value_handle[0], status)); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); var value = 0f; // new float[1]; var t = TFE_TensorHandleResolve(value_handle[0], status); ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); ASSERT_EQ(sizeof(float), (int)TF_TensorByteSize(t)); memcpy(&value, TF_TensorData(t).ToPointer(), sizeof(float)); c_api.TF_DeleteTensor(t); EXPECT_EQ(12.0f, value); TFE_DeleteTensorHandle(var_handle); TFE_DeleteTensorHandle(value_handle[0]); TFE_DeleteContext(ctx); CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status)); } } }