summaryrefslogtreecommitdiff
path: root/data/transactions/logic/assembler_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'data/transactions/logic/assembler_test.go')
-rw-r--r--data/transactions/logic/assembler_test.go182
1 files changed, 97 insertions, 85 deletions
diff --git a/data/transactions/logic/assembler_test.go b/data/transactions/logic/assembler_test.go
index 0035d3f10..fd53d458b 100644
--- a/data/transactions/logic/assembler_test.go
+++ b/data/transactions/logic/assembler_test.go
@@ -344,7 +344,16 @@ itxna Logs 3
const v6Nonsense = v5Nonsense + `
itxn_next
+gitxn 4 CreatedAssetID
+gitxna 3 Logs 12
base64_decode URLEncoding
+int 0
+dup
+gloadss
+byte 0x0123456789abcd
+bsqrt
+txn Sender
+acct_params_get AcctBalance
`
var nonsense = map[uint64]string{
@@ -362,7 +371,7 @@ var compiled = map[uint64]string{
3: "032008b7a60cf8acd19181cf959a12f8acd19181cf951af8acd19181cf15f8acd191810f01020026050212340c68656c6c6f20776f726c6421208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d024242047465737400320032013202320328292929292a0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e0102222324252104082209240a220b230c240d250e230f23102311231223132314181b1c2b171615400003290349483403350222231d4a484848482a50512a63222352410003420000432105602105612105270463484821052b62482b642b65484821052b2106662b21056721072b682b692107210570004848210771004848361c0037001a0031183119311b311d311e311f3120210721051e312131223123312431253126312731283129312a312b312c312d312e312f4478222105531421055427042106552105082106564c4d4b02210538212106391c0081e80780046a6f686e",
4: "042004010200b7a60c26040242420c68656c6c6f20776f726c6421208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292a0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482a50512a632223524100034200004322602261222b634848222862482864286548482228236628226724286828692422700048482471004848361c0037001a0031183119311b311d311e311f312024221e312131223123312431253126312731283129312a312b312c312d312e312f44782522531422542b2355220823564c4d4b0222382123391c0081e80780046a6f686e2281d00f24231f880003420001892223902291922394239593a0a1a2a3a4a5a6a7a8a9aaabacadae23af3a00003b003c003d8164",
5: "052004010002b7a60c26050242420c68656c6c6f20776f726c6421070123456789abcd208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292b0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482b50512a632223524100034200004322602261222704634848222862482864286548482228246628226723286828692322700048482371004848361c0037001a0031183119311b311d311e311f312023221e312131223123312431253126312731283129312a312b312c312d312e312f447825225314225427042455220824564c4d4b0222382124391c0081e80780046a6f686e2281d00f23241f880003420001892224902291922494249593a0a1a2a3a4a5a6a7a8a9aaabacadae24af3a00003b003c003d816472064e014f012a57000823810858235b235a2359b03139330039b1b200b322c01a23c1001a2323c21a23c3233e233f8120af06002a494905002a49490700b53a03",
- 6: "062004010002b7a60c26050242420c68656c6c6f20776f726c6421070123456789abcd208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292b0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482b50512a632223524100034200004322602261222704634848222862482864286548482228246628226723286828692322700048482371004848361c0037001a0031183119311b311d311e311f312023221e312131223123312431253126312731283129312a312b312c312d312e312f447825225314225427042455220824564c4d4b0222382124391c0081e80780046a6f686e2281d00f23241f880003420001892224902291922494249593a0a1a2a3a4a5a6a7a8a9aaabacadae24af3a00003b003c003d816472064e014f012a57000823810858235b235a2359b03139330039b1b200b322c01a23c1001a2323c21a23c3233e233f8120af06002a494905002a49490700b53a03b65c00",
+ 6: "062004010002b7a60c26050242420c68656c6c6f20776f726c6421070123456789abcd208dae2087fbba51304eb02b91f656948397a7946390e8cb70fc9ea4d95f92251d047465737400320032013202320380021234292929292b0431003101310231043105310731083109310a310b310c310d310e310f3111311231133114311533000033000133000233000433000533000733000833000933000a33000b33000c33000d33000e33000f3300113300123300133300143300152d2e01022581f8acd19181cf959a1281f8acd19181cf951a81f8acd19181cf1581f8acd191810f082209240a220b230c240d250e230f23102311231223132314181b1c28171615400003290349483403350222231d4a484848482b50512a632223524100034200004322602261222704634848222862482864286548482228246628226723286828692322700048482371004848361c0037001a0031183119311b311d311e311f312023221e312131223123312431253126312731283129312a312b312c312d312e312f447825225314225427042455220824564c4d4b0222382124391c0081e80780046a6f686e2281d00f23241f880003420001892224902291922494249593a0a1a2a3a4a5a6a7a8a9aaabacadae24af3a00003b003c003d816472064e014f012a57000823810858235b235a2359b03139330039b1b200b322c01a23c1001a2323c21a23c3233e233f8120af06002a494905002a49490700b53a03b6b7043cb8033a0c5c002349c42a9631007300",
}
func pseudoOp(opcode string) bool {
@@ -431,7 +440,7 @@ pop
require.Equal(t, ops1.Program, ops2.Program)
}
-type expect struct {
+type Expect struct {
l int
s string
}
@@ -449,7 +458,7 @@ func testMatch(t testing.TB, actual, expected string) {
}
}
-func testProg(t testing.TB, source string, ver uint64, expected ...expect) *OpStream {
+func testProg(t testing.TB, source string, ver uint64, expected ...Expect) *OpStream {
t.Helper()
program := strings.ReplaceAll(source, ";", "\n")
ops, err := AssembleStringWithVersion(program, ver)
@@ -463,7 +472,7 @@ func testProg(t testing.TB, source string, ver uint64, expected ...expect) *OpSt
require.NotNil(t, ops.Program)
// It should always be possible to Disassemble
dis, err := Disassemble(ops.Program)
- require.NoError(t, err)
+ require.NoError(t, err, program)
// And, while the disassembly may not match input
// exactly, the assembly of the disassembly should
// give the same bytecode
@@ -520,7 +529,7 @@ func testLine(t *testing.T, line string, ver uint64, expected string) {
testProg(t, source, ver)
return
}
- testProg(t, source, ver, expect{2, expected})
+ testProg(t, source, ver, Expect{2, expected})
}
func TestAssembleTxna(t *testing.T) {
@@ -528,30 +537,30 @@ func TestAssembleTxna(t *testing.T) {
testLine(t, "txna Accounts 256", AssemblerMaxVersion, "txna array index beyond 255: 256")
testLine(t, "txna ApplicationArgs 256", AssemblerMaxVersion, "txna array index beyond 255: 256")
- testLine(t, "txna Sender 256", AssemblerMaxVersion, "txna unknown field: \"Sender\"")
+ testLine(t, "txna Sender 256", AssemblerMaxVersion, "txna found scalar field \"Sender\"...")
testLine(t, "gtxna 0 Accounts 256", AssemblerMaxVersion, "gtxna array index beyond 255: 256")
testLine(t, "gtxna 0 ApplicationArgs 256", AssemblerMaxVersion, "gtxna array index beyond 255: 256")
- testLine(t, "gtxna 256 Accounts 0", AssemblerMaxVersion, "gtxna group index beyond 255: 256")
- testLine(t, "gtxna 0 Sender 256", AssemblerMaxVersion, "gtxna unknown field: \"Sender\"")
+ testLine(t, "gtxna 256 Accounts 0", AssemblerMaxVersion, "gtxna transaction index beyond 255: 256")
+ testLine(t, "gtxna 0 Sender 256", AssemblerMaxVersion, "gtxna found scalar field \"Sender\"...")
testLine(t, "txn Accounts 0", 1, "txn expects one argument")
testLine(t, "txn Accounts 0 1", 2, "txn expects one or two arguments")
testLine(t, "txna Accounts 0 1", AssemblerMaxVersion, "txna expects two immediate arguments")
testLine(t, "txnas Accounts 1", AssemblerMaxVersion, "txnas expects one immediate argument")
- testLine(t, "txna Accounts a", AssemblerMaxVersion, "strconv.ParseUint...")
+ testLine(t, "txna Accounts a", AssemblerMaxVersion, "txna unable to parse...")
testLine(t, "gtxn 0 Sender 0", 1, "gtxn expects two arguments")
testLine(t, "gtxn 0 Sender 1 2", 2, "gtxn expects two or three arguments")
testLine(t, "gtxna 0 Accounts 1 2", AssemblerMaxVersion, "gtxna expects three arguments")
- testLine(t, "gtxna a Accounts 0", AssemblerMaxVersion, "strconv.ParseUint...")
- testLine(t, "gtxna 0 Accounts a", AssemblerMaxVersion, "strconv.ParseUint...")
+ testLine(t, "gtxna a Accounts 0", AssemblerMaxVersion, "gtxna unable to parse...")
+ testLine(t, "gtxna 0 Accounts a", AssemblerMaxVersion, "gtxna unable to parse...")
testLine(t, "gtxnas Accounts 1 2", AssemblerMaxVersion, "gtxnas expects two immediate arguments")
testLine(t, "txn ABC", 2, "txn unknown field: \"ABC\"")
testLine(t, "gtxn 0 ABC", 2, "gtxn unknown field: \"ABC\"")
- testLine(t, "gtxn a ABC", 2, "strconv.ParseUint...")
- testLine(t, "txn Accounts", AssemblerMaxVersion, "found array field \"Accounts\" in txn op")
- testLine(t, "txn Accounts", 1, "found array field \"Accounts\" in txn op")
+ testLine(t, "gtxn a ABC", 2, "gtxn unable to parse...")
+ testLine(t, "txn Accounts", AssemblerMaxVersion, "txn found array field \"Accounts\"...")
+ testLine(t, "txn Accounts", 1, "txn found array field \"Accounts\"...")
testLine(t, "txn Accounts 0", AssemblerMaxVersion, "")
- testLine(t, "gtxn 0 Accounts", AssemblerMaxVersion, "found array field \"Accounts\" in gtxn op")
- testLine(t, "gtxn 0 Accounts", 1, "found array field \"Accounts\" in gtxn op")
+ testLine(t, "gtxn 0 Accounts", AssemblerMaxVersion, "gtxn found array field \"Accounts\"...")
+ testLine(t, "gtxn 0 Accounts", 1, "gtxn found array field \"Accounts\"...")
testLine(t, "gtxn 0 Accounts 1", AssemblerMaxVersion, "")
}
@@ -570,7 +579,7 @@ int 1
+
// comment
`
- testProg(t, source, AssemblerMaxVersion, expect{3, "+ arg 0 wanted type uint64 got []byte"})
+ testProg(t, source, AssemblerMaxVersion, Expect{3, "+ arg 0 wanted type uint64 got []byte"})
}
// mutateProgVersion replaces version (first two symbols) in hex-encoded program
@@ -709,10 +718,10 @@ func TestAssembleBytes(t *testing.T) {
}
for _, b := range bad {
- testProg(t, b[0], v, expect{1, b[1]})
+ testProg(t, b[0], v, Expect{1, b[1]})
// pushbytes should produce the same errors
if v >= 3 {
- testProg(t, strings.Replace(b[0], "byte", "pushbytes", 1), v, expect{1, b[1]})
+ testProg(t, strings.Replace(b[0], "byte", "pushbytes", 1), v, Expect{1, b[1]})
}
}
})
@@ -1181,7 +1190,7 @@ bnz wat
int 2`
for v := uint64(1); v < backBranchEnabledVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- testProg(t, source, v, expect{3, "label \"wat\" is a back reference..."})
+ testProg(t, source, v, Expect{3, "label \"wat\" is a back reference..."})
})
}
for v := uint64(backBranchEnabledVersion); v <= AssemblerMaxVersion; v++ {
@@ -1235,7 +1244,7 @@ bnz nowhere
int 2`
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
- testProg(t, source, v, expect{2, "reference to undefined label \"nowhere\""})
+ testProg(t, source, v, Expect{2, "reference to undefined label \"nowhere\""})
})
}
}
@@ -1268,8 +1277,8 @@ int 2`
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
t.Run(fmt.Sprintf("v=%d", v), func(t *testing.T) {
testProg(t, source, v,
- expect{2, "reference to undefined label \"nowhere\""},
- expect{4, "txn unknown field: \"XYZ\""})
+ Expect{2, "reference to undefined label \"nowhere\""},
+ Expect{4, "txn unknown field: \"XYZ\""})
})
}
}
@@ -1314,6 +1323,9 @@ global LatestTimestamp
global CurrentApplicationID
global CreatorAddress
global GroupID
+global OpcodeBudget
+global CallerApplicationID
+global CallerApplicationAddress
txn Sender
txn Fee
bnz label1
@@ -1463,15 +1475,15 @@ func TestConstantArgs(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
for v := uint64(1); v <= AssemblerMaxVersion; v++ {
- testProg(t, "int", v, expect{1, "int needs one argument"})
- testProg(t, "intc", v, expect{1, "intc operation needs one argument"})
- testProg(t, "byte", v, expect{1, "byte operation needs byte literal argument"})
- testProg(t, "bytec", v, expect{1, "bytec operation needs one argument"})
- testProg(t, "addr", v, expect{1, "addr operation needs one argument"})
+ testProg(t, "int", v, Expect{1, "int needs one argument"})
+ testProg(t, "intc", v, Expect{1, "intc operation needs one argument"})
+ testProg(t, "byte", v, Expect{1, "byte operation needs byte literal argument"})
+ testProg(t, "bytec", v, Expect{1, "bytec operation needs one argument"})
+ testProg(t, "addr", v, Expect{1, "addr operation needs one argument"})
}
for v := uint64(3); v <= AssemblerMaxVersion; v++ {
- testProg(t, "pushint", v, expect{1, "pushint needs one argument"})
- testProg(t, "pushbytes", v, expect{1, "pushbytes operation needs byte literal argument"})
+ testProg(t, "pushint", v, Expect{1, "pushint needs one argument"})
+ testProg(t, "pushbytes", v, Expect{1, "pushbytes operation needs byte literal argument"})
}
}
@@ -1608,7 +1620,7 @@ balance
int 1
==`
for v := uint64(2); v < directRefEnabledVersion; v++ {
- testProg(t, source, v, expect{2, "balance arg 0 wanted type uint64 got []byte"})
+ testProg(t, source, v, Expect{2, "balance arg 0 wanted type uint64 got []byte"})
}
for v := uint64(directRefEnabledVersion); v <= AssemblerMaxVersion; v++ {
testProg(t, source, v)
@@ -1625,7 +1637,7 @@ min_balance
int 1
==`
for v := uint64(3); v < directRefEnabledVersion; v++ {
- testProg(t, source, v, expect{2, "min_balance arg 0 wanted type uint64 got []byte"})
+ testProg(t, source, v, Expect{2, "min_balance arg 0 wanted type uint64 got []byte"})
}
for v := uint64(directRefEnabledVersion); v <= AssemblerMaxVersion; v++ {
testProg(t, source, v)
@@ -1639,16 +1651,16 @@ func TestAssembleAsset(t *testing.T) {
introduction := OpsByName[LogicVersion]["asset_holding_get"].Version
for v := introduction; v <= AssemblerMaxVersion; v++ {
testProg(t, "asset_holding_get ABC 1", v,
- expect{1, "asset_holding_get ABC 1 expects 2 stack arguments..."})
+ Expect{1, "asset_holding_get ABC 1 expects 2 stack arguments..."})
testProg(t, "int 1; asset_holding_get ABC 1", v,
- expect{2, "asset_holding_get ABC 1 expects 2 stack arguments..."})
+ Expect{2, "asset_holding_get ABC 1 expects 2 stack arguments..."})
testProg(t, "int 1; int 1; asset_holding_get ABC 1", v,
- expect{3, "asset_holding_get expects one argument"})
+ Expect{3, "asset_holding_get expects one argument"})
testProg(t, "int 1; int 1; asset_holding_get ABC", v,
- expect{3, "asset_holding_get unknown field: \"ABC\""})
+ Expect{3, "asset_holding_get unknown field: \"ABC\""})
testProg(t, "byte 0x1234; asset_params_get ABC 1", v,
- expect{2, "asset_params_get ABC 1 arg 0 wanted type uint64..."})
+ Expect{2, "asset_params_get ABC 1 arg 0 wanted type uint64..."})
testLine(t, "asset_params_get ABC 1", v, "asset_params_get expects one argument")
testLine(t, "asset_params_get ABC", v, "asset_params_get unknown field: \"ABC\"")
@@ -2032,15 +2044,15 @@ func TestPragmas(t *testing.T) {
}
testProg(t, `#pragma version 100`, assemblerNoVersion,
- expect{1, "unsupported version: 100"})
+ Expect{1, "unsupported version: 100"})
- testProg(t, `int 1`, 99, expect{0, "Can not assemble version 99"})
+ testProg(t, `int 1`, 99, Expect{0, "Can not assemble version 99"})
- testProg(t, `#pragma version 0`, assemblerNoVersion,
- expect{1, "unsupported version: 0"})
+ // Allow this on the off chance someone needs to reassemble an old logigsig
+ testProg(t, `#pragma version 0`, assemblerNoVersion)
testProg(t, `#pragma version a`, assemblerNoVersion,
- expect{1, `bad #pragma version: "a"`})
+ Expect{1, `bad #pragma version: "a"`})
// will default to 1
ops := testProg(t, "int 3", assemblerNoVersion)
@@ -2054,24 +2066,24 @@ func TestPragmas(t *testing.T) {
require.Equal(t, uint64(2), ops.Version)
// changing version is not allowed
- testProg(t, "#pragma version 1", 2, expect{1, "version mismatch..."})
- testProg(t, "#pragma version 2", 1, expect{1, "version mismatch..."})
+ testProg(t, "#pragma version 1", 2, Expect{1, "version mismatch..."})
+ testProg(t, "#pragma version 2", 1, Expect{1, "version mismatch..."})
testProg(t, "#pragma version 2\n#pragma version 1", assemblerNoVersion,
- expect{2, "version mismatch..."})
+ Expect{2, "version mismatch..."})
// repetitive, but fine
ops = testProg(t, "#pragma version 2\n#pragma version 2", assemblerNoVersion)
require.Equal(t, uint64(2), ops.Version)
testProg(t, "\nint 1\n#pragma version 2", assemblerNoVersion,
- expect{3, "#pragma version is only allowed before instructions"})
+ Expect{3, "#pragma version is only allowed before instructions"})
testProg(t, "#pragma run-mode 2", assemblerNoVersion,
- expect{1, `unsupported pragma directive: "run-mode"`})
+ Expect{1, `unsupported pragma directive: "run-mode"`})
testProg(t, "#pragma versions", assemblerNoVersion,
- expect{1, `unsupported pragma directive: "versions"`})
+ Expect{1, `unsupported pragma directive: "versions"`})
ops = testProg(t, "#pragma version 1", assemblerNoVersion)
require.Equal(t, uint64(1), ops.Version)
@@ -2079,10 +2091,10 @@ func TestPragmas(t *testing.T) {
ops = testProg(t, "\n#pragma version 1", assemblerNoVersion)
require.Equal(t, uint64(1), ops.Version)
- testProg(t, "#pragma", assemblerNoVersion, expect{1, "empty pragma"})
+ testProg(t, "#pragma", assemblerNoVersion, Expect{1, "empty pragma"})
testProg(t, "#pragma version", assemblerNoVersion,
- expect{1, "no version value"})
+ Expect{1, "no version value"})
ops = testProg(t, " #pragma version 5 ", assemblerNoVersion)
require.Equal(t, uint64(5), ops.Version)
@@ -2101,8 +2113,8 @@ int 1
require.NoError(t, err)
require.Equal(t, ops1.Program, ops.Program)
- testProg(t, text, 0, expect{1, "version mismatch..."})
- testProg(t, text, 2, expect{1, "version mismatch..."})
+ testProg(t, text, 0, Expect{1, "version mismatch..."})
+ testProg(t, text, 2, Expect{1, "version mismatch..."})
testProg(t, text, assemblerNoVersion)
ops, err = AssembleStringWithVersion(text, assemblerNoVersion)
@@ -2118,8 +2130,8 @@ int 1
require.NoError(t, err)
require.Equal(t, ops2.Program, ops.Program)
- testProg(t, text, 0, expect{1, "version mismatch..."})
- testProg(t, text, 1, expect{1, "version mismatch..."})
+ testProg(t, text, 0, Expect{1, "version mismatch..."})
+ testProg(t, text, 1, Expect{1, "version mismatch..."})
ops, err = AssembleStringWithVersion(text, assemblerNoVersion)
require.NoError(t, err)
@@ -2139,7 +2151,7 @@ len
require.Equal(t, ops2.Program, ops.Program)
testProg(t, "#pragma unk", assemblerNoVersion,
- expect{1, `unsupported pragma directive: "unk"`})
+ Expect{1, `unsupported pragma directive: "unk"`})
}
func TestAssembleConstants(t *testing.T) {
@@ -2211,29 +2223,29 @@ func TestSwapTypeCheck(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
/* reconfirm that we detect this type error */
- testProg(t, "int 1; byte 0x1234; +", AssemblerMaxVersion, expect{3, "+ arg 1..."})
+ testProg(t, "int 1; byte 0x1234; +", AssemblerMaxVersion, Expect{3, "+ arg 1..."})
/* despite swap, we track types */
- testProg(t, "int 1; byte 0x1234; swap; +", AssemblerMaxVersion, expect{4, "+ arg 0..."})
- testProg(t, "byte 0x1234; int 1; swap; +", AssemblerMaxVersion, expect{4, "+ arg 1..."})
+ testProg(t, "int 1; byte 0x1234; swap; +", AssemblerMaxVersion, Expect{4, "+ arg 0..."})
+ testProg(t, "byte 0x1234; int 1; swap; +", AssemblerMaxVersion, Expect{4, "+ arg 1..."})
}
func TestDigAsm(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
- testProg(t, "int 1; dig; +", AssemblerMaxVersion, expect{2, "dig expects 1 immediate..."})
- testProg(t, "int 1; dig junk; +", AssemblerMaxVersion, expect{2, "...invalid syntax..."})
+ testProg(t, "int 1; dig; +", AssemblerMaxVersion, Expect{2, "dig expects 1 immediate..."})
+ testProg(t, "int 1; dig junk; +", AssemblerMaxVersion, Expect{2, "dig unable to parse..."})
testProg(t, "int 1; byte 0x1234; int 2; dig 2; +", AssemblerMaxVersion)
testProg(t, "byte 0x32; byte 0x1234; int 2; dig 2; +", AssemblerMaxVersion,
- expect{5, "+ arg 1..."})
+ Expect{5, "+ arg 1..."})
testProg(t, "byte 0x32; byte 0x1234; int 2; dig 3; +", AssemblerMaxVersion,
- expect{4, "dig 3 expects 4..."})
+ Expect{4, "dig 3 expects 4..."})
testProg(t, "int 1; byte 0x1234; int 2; dig 12; +", AssemblerMaxVersion,
- expect{4, "dig 12 expects 13..."})
+ Expect{4, "dig 12 expects 13..."})
// Confirm that digging something out does not ruin our knowledge about the types in the middle
testProg(t, "int 1; byte 0x1234; byte 0x1234; dig 2; dig 3; +; pop; +", AssemblerMaxVersion,
- expect{8, "+ arg 1..."})
+ Expect{8, "+ arg 1..."})
testProg(t, "int 3; pushbytes \"123456\"; int 1; dig 2; substring3", AssemblerMaxVersion)
}
@@ -2241,39 +2253,39 @@ func TestDigAsm(t *testing.T) {
func TestEqualsTypeCheck(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
- testProg(t, "int 1; byte 0x1234; ==", AssemblerMaxVersion, expect{3, "== arg 0..."})
- testProg(t, "int 1; byte 0x1234; !=", AssemblerMaxVersion, expect{3, "!= arg 0..."})
- testProg(t, "byte 0x1234; int 1; ==", AssemblerMaxVersion, expect{3, "== arg 0..."})
- testProg(t, "byte 0x1234; int 1; !=", AssemblerMaxVersion, expect{3, "!= arg 0..."})
+ testProg(t, "int 1; byte 0x1234; ==", AssemblerMaxVersion, Expect{3, "== arg 0..."})
+ testProg(t, "int 1; byte 0x1234; !=", AssemblerMaxVersion, Expect{3, "!= arg 0..."})
+ testProg(t, "byte 0x1234; int 1; ==", AssemblerMaxVersion, Expect{3, "== arg 0..."})
+ testProg(t, "byte 0x1234; int 1; !=", AssemblerMaxVersion, Expect{3, "!= arg 0..."})
}
func TestDupTypeCheck(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
- testProg(t, "byte 0x1234; dup; int 1; +", AssemblerMaxVersion, expect{4, "+ arg 0..."})
+ testProg(t, "byte 0x1234; dup; int 1; +", AssemblerMaxVersion, Expect{4, "+ arg 0..."})
testProg(t, "byte 0x1234; int 1; dup; +", AssemblerMaxVersion)
- testProg(t, "byte 0x1234; int 1; dup2; +", AssemblerMaxVersion, expect{4, "+ arg 0..."})
- testProg(t, "int 1; byte 0x1234; dup2; +", AssemblerMaxVersion, expect{4, "+ arg 1..."})
+ testProg(t, "byte 0x1234; int 1; dup2; +", AssemblerMaxVersion, Expect{4, "+ arg 0..."})
+ testProg(t, "int 1; byte 0x1234; dup2; +", AssemblerMaxVersion, Expect{4, "+ arg 1..."})
- testProg(t, "byte 0x1234; int 1; dup; dig 1; len", AssemblerMaxVersion, expect{5, "len arg 0..."})
- testProg(t, "int 1; byte 0x1234; dup; dig 1; !", AssemblerMaxVersion, expect{5, "! arg 0..."})
+ testProg(t, "byte 0x1234; int 1; dup; dig 1; len", AssemblerMaxVersion, Expect{5, "len arg 0..."})
+ testProg(t, "int 1; byte 0x1234; dup; dig 1; !", AssemblerMaxVersion, Expect{5, "! arg 0..."})
- testProg(t, "byte 0x1234; int 1; dup2; dig 2; len", AssemblerMaxVersion, expect{5, "len arg 0..."})
- testProg(t, "int 1; byte 0x1234; dup2; dig 2; !", AssemblerMaxVersion, expect{5, "! arg 0..."})
+ testProg(t, "byte 0x1234; int 1; dup2; dig 2; len", AssemblerMaxVersion, Expect{5, "len arg 0..."})
+ testProg(t, "int 1; byte 0x1234; dup2; dig 2; !", AssemblerMaxVersion, Expect{5, "! arg 0..."})
}
func TestSelectTypeCheck(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
- testProg(t, "int 1; int 2; int 3; select; len", AssemblerMaxVersion, expect{5, "len arg 0..."})
- testProg(t, "byte 0x1234; byte 0x5678; int 3; select; !", AssemblerMaxVersion, expect{5, "! arg 0..."})
+ testProg(t, "int 1; int 2; int 3; select; len", AssemblerMaxVersion, Expect{5, "len arg 0..."})
+ testProg(t, "byte 0x1234; byte 0x5678; int 3; select; !", AssemblerMaxVersion, Expect{5, "! arg 0..."})
}
func TestSetBitTypeCheck(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
- testProg(t, "int 1; int 2; int 3; setbit; len", AssemblerMaxVersion, expect{5, "len arg 0..."})
- testProg(t, "byte 0x1234; int 2; int 3; setbit; !", AssemblerMaxVersion, expect{5, "! arg 0..."})
+ testProg(t, "int 1; int 2; int 3; setbit; len", AssemblerMaxVersion, Expect{5, "len arg 0..."})
+ testProg(t, "byte 0x1234; int 2; int 3; setbit; !", AssemblerMaxVersion, Expect{5, "! arg 0..."})
}
func TestCoverAsm(t *testing.T) {
@@ -2281,7 +2293,7 @@ func TestCoverAsm(t *testing.T) {
t.Parallel()
testProg(t, `int 4; byte "john"; int 5; cover 2; pop; +`, AssemblerMaxVersion)
testProg(t, `int 4; byte "ayush"; int 5; cover 1; pop; +`, AssemblerMaxVersion)
- testProg(t, `int 4; byte "john"; int 5; cover 2; +`, AssemblerMaxVersion, expect{5, "+ arg 1..."})
+ testProg(t, `int 4; byte "john"; int 5; cover 2; +`, AssemblerMaxVersion, Expect{5, "+ arg 1..."})
}
@@ -2291,15 +2303,15 @@ func TestUncoverAsm(t *testing.T) {
testProg(t, `int 4; byte "john"; int 5; uncover 2; +`, AssemblerMaxVersion)
testProg(t, `int 4; byte "ayush"; int 5; uncover 1; pop; +`, AssemblerMaxVersion)
testProg(t, `int 1; byte "jj"; byte "ayush"; byte "john"; int 5; uncover 4; +`, AssemblerMaxVersion)
- testProg(t, `int 4; byte "ayush"; int 5; uncover 1; +`, AssemblerMaxVersion, expect{5, "+ arg 1..."})
+ testProg(t, `int 4; byte "ayush"; int 5; uncover 1; +`, AssemblerMaxVersion, Expect{5, "+ arg 1..."})
}
func TestTxTypes(t *testing.T) {
- testProg(t, "itxn_begin; itxn_field Sender", 5, expect{2, "itxn_field Sender expects 1 stack argument..."})
- testProg(t, "itxn_begin; int 1; itxn_field Sender", 5, expect{3, "...wanted type []byte got uint64"})
+ testProg(t, "itxn_begin; itxn_field Sender", 5, Expect{2, "itxn_field Sender expects 1 stack argument..."})
+ testProg(t, "itxn_begin; int 1; itxn_field Sender", 5, Expect{3, "...wanted type []byte got uint64"})
testProg(t, "itxn_begin; byte 0x56127823; itxn_field Sender", 5)
- testProg(t, "itxn_begin; itxn_field Amount", 5, expect{2, "itxn_field Amount expects 1 stack argument..."})
- testProg(t, "itxn_begin; byte 0x87123376; itxn_field Amount", 5, expect{3, "...wanted type uint64 got []byte"})
+ testProg(t, "itxn_begin; itxn_field Amount", 5, Expect{2, "itxn_field Amount expects 1 stack argument..."})
+ testProg(t, "itxn_begin; byte 0x87123376; itxn_field Amount", 5, Expect{3, "...wanted type uint64 got []byte"})
testProg(t, "itxn_begin; int 1; itxn_field Amount", 5)
}