예제 #1
0
        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());
        }
예제 #2
0
 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()
     });
예제 #3
0
 /// <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))
     });
예제 #4
0
 public ByteArrayWrapper(VM.Types.Buffer value)
 {
     this.array = value.GetSpan().ToArray();
 }
예제 #5
0
 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
     )
 {
 }