public void HashCodeTest() { StackItem itemA = "NEO"; StackItem itemB = "NEO"; StackItem itemC = "SmartEconomy"; Assert.IsTrue(itemA.GetHashCode() == itemB.GetHashCode()); Assert.IsTrue(itemA.GetHashCode() != itemC.GetHashCode()); itemA = new VM.Types.Buffer(1); itemB = new VM.Types.Buffer(1); Assert.IsTrue(itemA.GetHashCode() != itemB.GetHashCode()); itemA = true; itemB = true; itemC = false; Assert.IsTrue(itemA.GetHashCode() == itemB.GetHashCode()); Assert.IsTrue(itemA.GetHashCode() != itemC.GetHashCode()); itemA = 1; itemB = 1; itemC = 123; Assert.IsTrue(itemA.GetHashCode() == itemB.GetHashCode()); Assert.IsTrue(itemA.GetHashCode() != itemC.GetHashCode()); itemA = new Null(); itemB = new Null(); Assert.IsTrue(itemA.GetHashCode() == itemB.GetHashCode()); itemA = new VM.Types.Array(); Assert.ThrowsException <System.NotSupportedException>(() => itemA.GetHashCode()); itemA = new Struct(); Assert.ThrowsException <System.NotSupportedException>(() => itemA.GetHashCode()); itemA = new Map(); Assert.ThrowsException <System.NotSupportedException>(() => itemA.GetHashCode()); itemA = new InteropInterface(123); itemB = new InteropInterface(123); Assert.IsTrue(itemA.GetHashCode() == itemB.GetHashCode()); var script = new Script(new byte[0]); itemA = new Pointer(script, 123); itemB = new Pointer(script, 123); itemC = new Pointer(script, 1234); Assert.IsTrue(itemA.GetHashCode() == itemB.GetHashCode()); Assert.IsTrue(itemA.GetHashCode() != itemC.GetHashCode()); }
protected internal IEnumerator CreateEnumerator(StackItem item) { return(item switch { Array array => new ArrayWrapper(array), VM.Types.Buffer buffer => new ByteArrayWrapper(buffer), PrimitiveType primitive => new ByteArrayWrapper(primitive), _ => throw new ArgumentException() });
/// <summary> /// The implementation of System.Iterator.Create. /// Creates an <see cref="IIterator"/> with the specified <see cref="StackItem"/>. /// </summary> /// <param name="item">The <see cref="StackItem"/> wrapped by the iterator.</param> /// <returns>The created iterator.</returns> protected internal IIterator CreateIterator(StackItem item) { return(item switch { Array array => new ArrayWrapper(array), Map map => new MapWrapper(map, ReferenceCounter), VM.Types.Buffer buffer => new ByteArrayWrapper(buffer), PrimitiveType primitive => new ByteArrayWrapper(primitive), _ => throw new ArgumentException(null, nameof(item)) });
public ByteArrayWrapper(VM.Types.Buffer value) { this.array = value.GetSpan().ToArray(); }
public void VMTypes( VM.Types.Boolean p1, VM.Types.Integer p2, VM.Types.ByteString p3, VM.Types.Buffer p4, VM.Types.Array p5, VM.Types.Struct p6, VM.Types.Map p7, VM.Types.StackItem p8 ) { }