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.

Eager.OpGetInputAndOutputLengths.cs 3.0 kB

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