Skip to content

Commit ec07000

Browse files
committed
[libevmasm] Add more tests.
1 parent 756e9ae commit ec07000

File tree

1 file changed

+50
-9
lines changed

1 file changed

+50
-9
lines changed

test/libevmasm/Assembler.cpp

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
5555
{
5656
map<string, unsigned> indices = {
5757
{ "root.asm", 0 },
58-
{ "sub.asm", 1 }
58+
{ "sub.asm", 1 },
59+
{ "verbatim.asm", 2 }
5960
};
6061
Assembly _assembly;
6162
auto root_asm = make_shared<string>("root.asm");
@@ -64,11 +65,22 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
6465
Assembly _subAsm;
6566
auto sub_asm = make_shared<string>("sub.asm");
6667
_subAsm.setSourceLocation({6, 8, sub_asm});
68+
69+
Assembly _verbatimAsm;
70+
auto verbatim_asm = make_shared<string>("verbatim.asm");
71+
_verbatimAsm.setSourceLocation({8, 18, verbatim_asm});
72+
6773
// PushImmutable
6874
_subAsm.appendImmutable("someImmutable");
75+
_subAsm.append(AssemblyItem(PushTag, 0));
6976
_subAsm.append(Instruction::INVALID);
7077
shared_ptr<Assembly> _subAsmPtr = make_shared<Assembly>(_subAsm);
7178

79+
_verbatimAsm.appendVerbatim({0xff,0xff}, 0, 0);
80+
_verbatimAsm.appendVerbatim({0x74, 0x65, 0x73, 0x74}, 0, 1);
81+
_verbatimAsm.append(Instruction::MSTORE);
82+
shared_ptr<Assembly> _verbatimAsmPtr = make_shared<Assembly>(_verbatimAsm);
83+
7284
// Tag
7385
auto tag = _assembly.newTag();
7486
_assembly.append(tag);
@@ -89,6 +101,10 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
89101
auto sub = _assembly.appendSubroutine(_subAsmPtr);
90102
// PushSub
91103
_assembly.pushSubroutineOffset(static_cast<size_t>(sub.data()));
104+
// PushSubSize
105+
auto verbatim_sub = _assembly.appendSubroutine(_verbatimAsmPtr);
106+
// PushSub
107+
_assembly.pushSubroutineOffset(static_cast<size_t>(verbatim_sub.data()));
92108
// PushDeployTimeAddress
93109
_assembly.append(PushDeployTimeAddress);
94110
// AssignImmutable.
@@ -105,12 +121,12 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
105121

106122
BOOST_CHECK_EQUAL(
107123
_assembly.assemble().toHex(),
108-
"5b6001600220606f73__$bf005014d9d0f534b8fcb268bd84c491a2$__"
109-
"6000566067602260457300000000000000000000000000000000000000005050"
124+
"5b6001600220607c73__$bf005014d9d0f534b8fcb268bd84c491a2$__"
125+
"6000566074602460496007606d7300000000000000000000000000000000000000005050"
110126
"600260010152"
111127
"00fe"
112128
"7f0000000000000000000000000000000000000000000000000000000000000000"
113-
"fe010203044266eeaa"
129+
"6000feffff7465737452010203044266eeaa"
114130
);
115131
BOOST_CHECK_EQUAL(
116132
_assembly.assemblyString(),
@@ -123,6 +139,8 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
123139
" data_a6885b3731702da62e8e4a8f584ac46a7f6822f4e2ba50fba902f67b1588d23b\n"
124140
" dataSize(sub_0)\n"
125141
" dataOffset(sub_0)\n"
142+
" dataSize(sub_1)\n"
143+
" dataOffset(sub_1)\n"
126144
" deployTimeAddress()\n"
127145
" assignImmutable(\"0xc3978657661c4d8e32e3d5f42597c009f0d3859e9f9d0d94325268f9799e2bfb\")\n"
128146
" 0x02\n"
@@ -134,13 +152,20 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
134152
"sub_0: assembly {\n"
135153
" /* \"sub.asm\":6:8 */\n"
136154
" immutable(\"0x26f2c0195e9d408feff3abd77d83f2971f3c9a18d1e8a9437c7835ae4211fc9f\")\n"
155+
" tag_0\n"
137156
" invalid\n"
138157
"}\n"
139158
"\n"
159+
"sub_1: assembly {\n"
160+
" /* \"verbatim.asm\":8:18 */\n"
161+
" verbatimbytecode_ffff\n"
162+
" verbatimbytecode_74657374\n"
163+
" mstore\n"
164+
"}\n"
165+
"\n"
140166
"auxdata: 0x4266eeaa\n"
141167
);
142-
BOOST_CHECK_EQUAL(
143-
util::jsonCompactPrint(_assembly.assemblyJSON(indices)),
168+
string json{
144169
"{\".auxdata\":\"4266eeaa\",\".code\":["
145170
"{\"begin\":1,\"end\":3,\"name\":\"tag\",\"source\":0,\"value\":\"1\"},"
146171
"{\"begin\":1,\"end\":3,\"name\":\"JUMPDEST\",\"source\":0},"
@@ -154,16 +179,32 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
154179
"{\"begin\":1,\"end\":3,\"name\":\"PUSH data\",\"source\":0,\"value\":\"A6885B3731702DA62E8E4A8F584AC46A7F6822F4E2BA50FBA902F67B1588D23B\"},"
155180
"{\"begin\":1,\"end\":3,\"name\":\"PUSH #[$]\",\"source\":0,\"value\":\"0000000000000000000000000000000000000000000000000000000000000000\"},"
156181
"{\"begin\":1,\"end\":3,\"name\":\"PUSH [$]\",\"source\":0,\"value\":\"0000000000000000000000000000000000000000000000000000000000000000\"},"
182+
"{\"begin\":1,\"end\":3,\"name\":\"PUSH #[$]\",\"source\":0,\"value\":\"0000000000000000000000000000000000000000000000000000000000000001\"},"
183+
"{\"begin\":1,\"end\":3,\"name\":\"PUSH [$]\",\"source\":0,\"value\":\"0000000000000000000000000000000000000000000000000000000000000001\"},"
157184
"{\"begin\":1,\"end\":3,\"name\":\"PUSHDEPLOYADDRESS\",\"source\":0},"
158185
"{\"begin\":1,\"end\":3,\"name\":\"ASSIGNIMMUTABLE\",\"source\":0,\"value\":\"someOtherImmutable\"},"
159186
"{\"begin\":1,\"end\":3,\"name\":\"PUSH\",\"source\":0,\"value\":\"2\"},"
160187
"{\"begin\":1,\"end\":3,\"name\":\"ASSIGNIMMUTABLE\",\"source\":0,\"value\":\"someImmutable\"},"
161188
"{\"begin\":1,\"end\":3,\"name\":\"STOP\",\"source\":0}"
162189
"],\".data\":{\"0\":{\".code\":["
163190
"{\"begin\":6,\"end\":8,\"name\":\"PUSHIMMUTABLE\",\"source\":1,\"value\":\"someImmutable\"},"
191+
"{\"begin\":6,\"end\":8,\"name\":\"PUSH [ErrorTag]\",\"source\":1},"
164192
"{\"begin\":6,\"end\":8,\"name\":\"INVALID\",\"source\":1}"
165-
"]},\"A6885B3731702DA62E8E4A8F584AC46A7F6822F4E2BA50FBA902F67B1588D23B\":\"01020304\"}}"
166-
);
193+
"]},"
194+
"\"1\":{\".code\":["
195+
"{\"begin\":8,\"end\":18,\"name\":\"VERBATIM\",\"source\":2,\"value\":\"ffff\"},"
196+
"{\"begin\":8,\"end\":18,\"name\":\"VERBATIM\",\"source\":2,\"value\":\"74657374\"},"
197+
"{\"begin\":8,\"end\":18,\"name\":\"MSTORE\",\"source\":2}"
198+
"]},\"A6885B3731702DA62E8E4A8F584AC46A7F6822F4E2BA50FBA902F67B1588D23B\":\"01020304\"},\"sourceList\":[\"root.asm\",\"sub.asm\",\"verbatim.asm\"]}"
199+
};
200+
Json::Value jsonValue;
201+
BOOST_CHECK(util::jsonParseStrict(json, jsonValue));
202+
BOOST_CHECK_EQUAL(util::jsonCompactPrint(_assembly.assemblyJSON(indices)), util::jsonCompactPrint(jsonValue));
203+
204+
Assembly _assemblyFromJson;
205+
_assemblyFromJson.loadFromAssemblyJSON(_assembly.assemblyJSON(indices));
206+
BOOST_CHECK_EQUAL(util::jsonCompactPrint(_assemblyFromJson.assemblyJSON(indices)), util::jsonCompactPrint(jsonValue));
207+
BOOST_CHECK_EQUAL(_assembly.assemble().toHex(), _assemblyFromJson.assemble().toHex());
167208
}
168209

169210
BOOST_AUTO_TEST_CASE(immutables_and_its_source_maps)
@@ -342,7 +383,7 @@ BOOST_AUTO_TEST_CASE(immutable)
342383
"{\"begin\":6,\"end\":8,\"name\":\"PUSHIMMUTABLE\",\"source\":1,\"value\":\"someImmutable\"},"
343384
"{\"begin\":6,\"end\":8,\"name\":\"PUSHIMMUTABLE\",\"source\":1,\"value\":\"someOtherImmutable\"},"
344385
"{\"begin\":6,\"end\":8,\"name\":\"PUSHIMMUTABLE\",\"source\":1,\"value\":\"someImmutable\"}"
345-
"]}}}"
386+
"]}},\"sourceList\":[\"root.asm\",\"sub.asm\"]}"
346387
);
347388
}
348389

0 commit comments

Comments
 (0)