public void TestInteropStackItem() { using (var engine = CreateEngine(null)) { using (var o1 = new DisposableDummy()) using (var o2 = new DisposableDummy()) using (var bInterop1 = engine.CreateInterop(o1)) using (var bInterop2 = engine.CreateInterop(o2)) { Assert.AreEqual(bInterop1.Value, o1); Assert.AreEqual(bInterop2.Value, o2); Assert.IsFalse(o1.IsDisposed); Assert.IsFalse(o2.IsDisposed); } } }
public void TestStacksEngine() { using (var engine = CreateEngine(null)) { // Empty stack Assert.AreEqual(engine.ResultStack.Count, 0); Assert.IsFalse(engine.ResultStack.TryPeek(0, out IStackItem obj)); // Check integer foreach (var bi in TestBigIntegers) { using (var it = engine.CreateInteger(bi)) CheckItem(engine, it); } // Check bool using (var it = engine.CreateBool(true)) CheckItem(engine, it); using (var it = engine.CreateBool(false)) CheckItem(engine, it); // Check ByteArray for (int x = 0; x < 100; x++) { using (var it = engine.CreateByteArray(new BigInteger(Rand.Next()).ToByteArray())) CheckItem(engine, it); } // Check Interops var dic = new Dictionary <string, string>() { { "key", "value" } }; using (var it = engine.CreateInterop(dic)) CheckItem(engine, it); // Check disposed object { var dis = new DisposableDummy(); using (var it = engine.CreateInterop(dis)) CheckItem(engine, it); using (var it = engine.CreateInterop(dis)) engine.ResultStack.Push(it); } GC.Collect(); GC.WaitForPendingFinalizers(); using (var id = engine.ResultStack.Pop <InteropStackItem>()) { Assert.IsTrue(id != null && id.Value is DisposableDummy dd && !dd.IsDisposed); } } }