public void TestInsertPeek() { var stack = new RandomAccessStack <int>(); stack.Insert(0, 3); stack.Insert(1, 1); stack.Insert(1, 2); Assert.ThrowsException <InvalidOperationException>(() => stack.Insert(4, 2)); Assert.AreEqual(3, stack.Count); CollectionAssert.AreEqual(new int[] { 1, 2, 3 }, stack.Select(u => u).ToArray()); Assert.AreEqual(3, stack.Peek(0)); Assert.AreEqual(2, stack.Peek(1)); Assert.AreEqual(1, stack.Peek(-1)); }
/// <summary> /// Assert result stack /// </summary> /// <param name="stack">Stack</param> /// <param name="result">Result</param> /// <param name="message">Message</param> private void AssertResult(RandomAccessStack <StackItem> stack, VMUTStackItem[] result, string message) { AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + "Stack is different"); for (int x = 0, max = stack.Count; x < max; x++) { AssertAreEqual(ItemToJson(stack.Peek(x)).ToString(Formatting.None), PrepareJsonItem(result[x]).ToString(Formatting.None), message + "Stack item is different"); } }
public IEnumerable <Variable> GetVariables() { for (var i = 0; i < execStack.Count; i++) { var item = execStack.Peek(i); var variable = item.GetVariable(session, i.ToString()); variable.EvaluateName = $"${stackName}[{i}]"; yield return(variable); } }
public override bool TryPeek(int index, out ExecutionContextBase item) { if (_stack.Count <= index) { item = null; return(false); } item = _stack.Peek(index).ConvertFromNative(); return(true); }
public override bool TryPeek(int index, out StackItemBase item) { if (_stack.Count <= index) { item = null; return(false); } item = _stack.Peek(index)?.ConvertFromNative(); return(item != null); }
/// <summary> /// Assert invocation stack /// </summary> /// <param name="stack">Stack</param> /// <param name="result">Result</param> /// <param name="message">Message</param> private void AssertResult(RandomAccessStack <ExecutionContext> stack, VMUTExecutionContextState[] result, string message) { AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + "Stack is different"); for (int x = 0, max = stack.Count; x < max; x++) { var context = stack.Peek(x); AssertAreEqual(context.ScriptHash.ToHexString().ToUpper(), result[x].ScriptHash.ToHexString().ToUpper(), message + "Script hash is different"); AssertAreEqual(context.NextInstruction, result[x].NextInstruction, message + "Next instruction is different"); AssertAreEqual(context.InstructionPointer, result[x].InstructionPointer, message + "Instruction pointer is different"); AssertResult(context.EvaluationStack, result[x].EvaluationStack, message + " [EvaluationStack]"); AssertResult(context.AltStack, result[x].AltStack, message + " [AltStack]"); } }
/// <summary> /// Assert invocation stack /// </summary> /// <param name="stack">Stack</param> /// <param name="result">Result</param> /// <param name="message">Message</param> private void AssertResult(RandomAccessStack <ExecutionContext> stack, VMUTExecutionContextState[] result, string message) { AssertAreEqual(stack.Count, result == null ? 0 : result.Length, message + "Stack is different"); for (int x = 0, max = stack.Count; x < max; x++) { var context = stack.Peek(x); var opcode = context.InstructionPointer >= context.Script.Length ? OpCode.RET : context.Script[context.InstructionPointer]; AssertAreEqual(opcode, result[x].NextInstruction, message + "Next instruction is different"); AssertAreEqual(context.InstructionPointer, result[x].InstructionPointer, message + "Instruction pointer is different"); AssertResult(context.EvaluationStack, result[x].EvaluationStack, message + " [EvaluationStack]"); AssertResult(context.AltStack, result[x].AltStack, message + " [AltStack]"); } }
private static long GetCheckMultiSigPrice(RandomAccessStack <StackItem> stack) { if (stack.Count == 0) { return(0); } var item = stack.Peek(); int n; if (item is VMArray array) { n = array.Count; } else { n = (int)item.GetBigInteger(); } if (n < 1) { return(0); } return(GetPrice(Neo_Crypto_CheckSig, stack) * n); }
private static long GetDeploymentPrice(RandomAccessStack <StackItem> stack) { int size = stack.Peek(0).GetByteLength() + stack.Peek(1).GetByteLength(); return(GasPerByte * size); }
internal long GetPrice(RandomAccessStack <StackItem> stack) { return(methods.TryGetValue(stack.Peek().GetString(), out ContractMethodMetadata method) ? method.Price : 0); }
private static long GetStoragePrice(RandomAccessStack <StackItem> stack) { return((stack.Peek(1).GetByteLength() + stack.Peek(2).GetByteLength()) * GasPerByte); }