Skip to content

Commit 6278961

Browse files
Jim8yshargon
andauthored
[Neo Core Add] add char support (#3441)
* add char support * Update src/Neo/VM/Helper.cs * add char unit test --------- Co-authored-by: Shargon <shargon@gmail.com>
1 parent 450cb61 commit 6278961

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/Neo/VM/Helper.cs

+3
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ public static ScriptBuilder EmitPush(this ScriptBuilder builder, object obj)
217217
case short data:
218218
builder.EmitPush(data);
219219
break;
220+
case char data:
221+
builder.EmitPush((ushort)data);
222+
break;
220223
case ushort data:
221224
builder.EmitPush(data);
222225
break;

tests/Neo.UnitTests/VM/UT_Helper.cs

+36-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using Neo.SmartContract.Native;
1919
using Neo.VM;
2020
using Neo.VM.Types;
21+
using Org.BouncyCastle.Asn1.Tsp;
2122
using System;
2223
using System.Collections.Generic;
2324
using System.Linq;
@@ -152,7 +153,7 @@ public void TestEmitAppCall3()
152153
sb.EmitDynamicCall(UInt160.Zero, "AAAAA", true);
153154
byte[] tempArray = new byte[38];
154155
tempArray[0] = (byte)OpCode.PUSHT;
155-
tempArray[1] = (byte)OpCode.PUSH1;//arg.Length
156+
tempArray[1] = (byte)OpCode.PUSH1;//arg.Length
156157
tempArray[2] = (byte)OpCode.PACK;
157158
tempArray[3] = (byte)OpCode.PUSH15;//(byte)CallFlags.All;
158159
tempArray[4] = (byte)OpCode.PUSHDATA1;
@@ -401,6 +402,7 @@ public void TestEmitPush3()
401402
TestEmitPush3Byte();
402403
TestEmitPush3Short();
403404
TestEmitPush3Ushort();
405+
TestEmitPush3Char();
404406
TestEmitPush3Int();
405407
TestEmitPush3Uint();
406408
TestEmitPush3Long();
@@ -472,6 +474,16 @@ private void TestEmitPush3Ushort()
472474
CollectionAssert.AreEqual(tempArray, sb.ToArray());
473475
}
474476

477+
private void TestEmitPush3Char()
478+
{
479+
ScriptBuilder sb = new ScriptBuilder();
480+
char temp = char.MinValue;
481+
VM.Helper.EmitPush(sb, temp);
482+
byte[] tempArray = new byte[1];
483+
tempArray[0] = (byte)OpCode.PUSH0;
484+
CollectionAssert.AreEqual(tempArray, sb.ToArray());
485+
}
486+
475487
private void TestEmitPush3Short()
476488
{
477489
ScriptBuilder sb = new ScriptBuilder();
@@ -630,5 +642,28 @@ private void TestToParaMeter2VMArray()
630642
Assert.AreEqual(ContractParameterType.Array, parameter.Type);
631643
Assert.AreEqual(0, ((List<ContractParameter>)parameter.Value).Count);
632644
}
645+
646+
[TestMethod]
647+
public void TestCharAsUInt16()
648+
{
649+
Assert.AreEqual(ushort.MaxValue, char.MaxValue);
650+
Assert.AreEqual(ushort.MinValue, char.MinValue);
651+
652+
// test every char in a loop
653+
for (int i = ushort.MinValue; i < char.MinValue; i++)
654+
{
655+
var c = Convert.ToChar(i);
656+
Assert.AreEqual(i, c);
657+
}
658+
659+
for (int i = ushort.MinValue; i < ushort.MaxValue; i++)
660+
{
661+
using var sbUInt16 = new ScriptBuilder();
662+
using var sbChar = new ScriptBuilder();
663+
sbUInt16.EmitPush((ushort)i);
664+
sbChar.EmitPush(Convert.ToChar(i));
665+
CollectionAssert.AreEqual(sbUInt16.ToArray(), sbChar.ToArray());
666+
}
667+
}
633668
}
634669
}

0 commit comments

Comments
 (0)