You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

CApi.Eager.OpGetInputAndOutputLengths.cs 3.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using System;
  3. using Tensorflow;
  4. using Tensorflow.Eager;
  5. namespace TensorFlowNET.UnitTest.NativeAPI
  6. {
  7. public partial class CApiEagerTest
  8. {
  9. /// <summary>
  10. /// TEST(CAPI, TestTFE_OpGetInputAndOutputLengths)
  11. /// </summary>
  12. [TestMethod]
  13. public unsafe void OpGetInputAndOutputLengths()
  14. {
  15. using var status = TF_NewStatus();
  16. static SafeContextHandle NewContext(SafeStatusHandle status)
  17. {
  18. using var opts = c_api.TFE_NewContextOptions();
  19. return c_api.TFE_NewContext(opts, status);
  20. }
  21. using var ctx = NewContext(status);
  22. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  23. using var input1 = TestMatrixTensorHandle();
  24. using var input2 = TestMatrixTensorHandle();
  25. var retvals = new SafeTensorHandleHandle[2];
  26. using (var identityOp = TFE_NewOp(ctx, "IdentityN", status))
  27. {
  28. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  29. // Try to retrieve lengths before building the attributes (should fail)
  30. EXPECT_EQ(-1, TFE_OpGetInputLength(identityOp, "input", status));
  31. CHECK_NE(TF_OK, TF_GetCode(status), TF_Message(status));
  32. EXPECT_EQ(-1, TFE_OpGetOutputLength(identityOp, "output", status));
  33. CHECK_NE(TF_OK, TF_GetCode(status), TF_Message(status));
  34. var inputs = new SafeTensorHandleHandle[] { input1, input2 };
  35. TFE_OpAddInputList(identityOp, inputs, 2, status);
  36. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  37. // Try to retrieve lengths before executing the op (should work)
  38. EXPECT_EQ(2, TFE_OpGetInputLength(identityOp, "input", status));
  39. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  40. EXPECT_EQ(2, TFE_OpGetOutputLength(identityOp, "output", status));
  41. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  42. int num_retvals;
  43. TFE_Execute(identityOp, retvals, out num_retvals, status);
  44. EXPECT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  45. EXPECT_EQ(2, num_retvals);
  46. try
  47. {
  48. // Try to retrieve lengths after executing the op (should work)
  49. EXPECT_EQ(2, TFE_OpGetInputLength(identityOp, "input", status));
  50. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  51. EXPECT_EQ(2, TFE_OpGetOutputLength(identityOp, "output", status));
  52. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  53. }
  54. finally
  55. {
  56. retvals[0].Dispose();
  57. retvals[1].Dispose();
  58. }
  59. }
  60. }
  61. }
  62. }