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.

QueueTest.cs 2.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using Tensorflow;
  7. using static Tensorflow.Binding;
  8. namespace TensorFlowNET.UnitTest
  9. {
  10. [TestClass]
  11. public class QueueTest
  12. {
  13. [TestMethod]
  14. public void PaddingFIFOQueue()
  15. {
  16. var numbers = tf.placeholder(tf.int32);
  17. var queue = tf.PaddingFIFOQueue(10, tf.int32, new TensorShape(-1));
  18. var enqueue = queue.enqueue(numbers);
  19. var dequeue_many = queue.dequeue_many(n: 3);
  20. using(var sess = tf.Session())
  21. {
  22. sess.run(enqueue, (numbers, new[] { 1 }));
  23. sess.run(enqueue, (numbers, new[] { 2, 3 }));
  24. sess.run(enqueue, (numbers, new[] { 3, 4, 5 }));
  25. var result = sess.run(dequeue_many[0]);
  26. Assert.IsTrue(Enumerable.SequenceEqual(new int[] { 1, 0, 0 }, result[0].ToArray<int>()));
  27. Assert.IsTrue(Enumerable.SequenceEqual(new int[] { 2, 3, 0 }, result[1].ToArray<int>()));
  28. Assert.IsTrue(Enumerable.SequenceEqual(new int[] { 3, 4, 5 }, result[2].ToArray<int>()));
  29. }
  30. }
  31. [TestMethod]
  32. public void FIFOQueue()
  33. {
  34. // create a first in first out queue with capacity up to 2
  35. // and data type set as int32
  36. var queue = tf.FIFOQueue(2, tf.int32);
  37. // init queue, push 3 elements into queue.
  38. var init = queue.enqueue_many(new[] { 10, 20 });
  39. // pop out the first element
  40. var x = queue.dequeue();
  41. // add 1
  42. var y = x + 1;
  43. // push back into queue
  44. var inc = queue.enqueue(y);
  45. using (var sess = tf.Session())
  46. {
  47. // init queue
  48. init.run();
  49. // pop out first element and push back calculated y
  50. (int dequeued, _) = sess.run((x, inc));
  51. Assert.AreEqual(10, dequeued);
  52. (dequeued, _) = sess.run((x, inc));
  53. Assert.AreEqual(20, dequeued);
  54. (dequeued, _) = sess.run((x, inc));
  55. Assert.AreEqual(11, dequeued);
  56. (dequeued, _) = sess.run((x, inc));
  57. Assert.AreEqual(21, dequeued);
  58. // thread will hang or block if you run sess.run(x) again
  59. // until queue has more element.
  60. }
  61. }
  62. }
  63. }