From dd91a8208ae1a5af7474519f858e8cbe51d788ef Mon Sep 17 00:00:00 2001 From: Yaron Wittenstein Date: Thu, 1 Aug 2019 08:48:20 +0300 Subject: [PATCH] changes after PR review https://github.com/wasmerio/wasmer/pull/602#pullrequestreview-269368270 --- lib/runtime-c-api/tests/.gitignore | 3 +- lib/runtime-c-api/tests/test-context | Bin 13908 -> 14164 bytes lib/runtime-c-api/tests/test-context.c | 97 ++++++++++++++++--------- 3 files changed, 64 insertions(+), 36 deletions(-) diff --git a/lib/runtime-c-api/tests/.gitignore b/lib/runtime-c-api/tests/.gitignore index ed3b6ed6e..267572c94 100644 --- a/lib/runtime-c-api/tests/.gitignore +++ b/lib/runtime-c-api/tests/.gitignore @@ -22,4 +22,5 @@ test-module-exports test-module-imports test-module-serialize test-tables -test-validate \ No newline at end of file +test-validate +test-context diff --git a/lib/runtime-c-api/tests/test-context b/lib/runtime-c-api/tests/test-context index 7b968acf6404940066f64987364d3dfc686b04f5..782fbe97b9db7c85821fb2445bb136adc35599bd 100755 GIT binary patch literal 14164 zcmeHOZEPGz8J^2Wo2Cutwh4qnn^T3WfD)gb)*}6I@uj|Yqxz_6Vo?P}o6FrgKIMEq z?jvz3LY+E?vf3OnYFr|q5J5pvDl?#QY^+t0_JP_q)xAJ$0^!Jq8oHh{`f}u) z;`Z0^X$%IU^Vd0Y;sr`qk_Do_8tQsBm*1MLG`aoVbGzg3+e)L1%La>-Kh+)Lqd&dd zNT!Vpl-&M~D1Yaa17haAQs%@L%jPnP)HbEy_V?@^PJFk?Bnm-XU21$opzHb6&O|D% zCsJL#64%bh@CwHt=bVMu?Zc5cHRp9L`quTf(8f@eB;fdwFBF@BW#J2k!g<9zCm&*6 zPbKy2uAZ&ENj;s*e4;;PF8$HIT$ul5WdN${+j^^BlR5tC0#1C3lnt@l-)EGJMAwti zYsI%5_MC#lR7N4L_Q&xqr$80v%~@CN>%aPFxNUuTO*Fdl2F$XN4p2zgPr2NQbt_d+ zaV(2K*OrB#t-up7s9WR2#<^r1 zr|<;u+=M5X&t`(j#MWSZS27OF@;N+=YBk;>+bL@Kzm zH?uvM?FsITW_yfGFc-~iGjhRY02hm*_F{m>x|h8ZfHF)^gYE zcWqU_zKiFv{rIlr0J|p>s4(ZrD_#b?40svvGT>#v%Yc^w zF9Ti%ybO35@G{_Kz{`M_f&ZrrbZX|GwSfyAnz`H7EIh^LAkLBO-{F8xGs9D8n`(N) z9DkXIGMae`ZIfo?toVO#vH7h@9b)L0<;wYo76H1Y(&R{VYHukR&bL_uTZQnY_q^v)}!!`3YbN3}PKdYH<+wb9&8zIkF`Af35 z^a2Y4_S?u>bv-EU_gv_Qb<=2j5eY3uMw;Gjx0bAf$B1=9yBUGM-IHeiEZmx>+RgAm z&5R71;r;eg?8AzT0wb4^aZpauBqnLUOjPHf71`fzg%5^aVn*#G49xHmD}O{Qw&bBQ zEbLaaS$Rxs3o~to_n~bS+amV;k+UKHfs>*B4@;r`bH0%O*cmPMjy7-+YJ2^AdEN-K zN7+@ed4nWNegN|Fz3lAgI4GM2BL;RK@%ayo-c$O5&wp%Od8nA*9FWdkHZO>Rg$mZAWKjO5~f1`gzn<&2@SPz&L&UELDlXcEgWKudX zcVkB0MzkaLG%Q2rXq#Lqm~}HejuFh*?^N0+FbJB##0PdtGedkmF_)n_&=M?!W*w)I zW=VI}kRvZrzs)KT*&k5NEcBJAR+OZ8Tq7zrzr@)rE;|NdKSw{sg*z~gaMP$(EVfFW zp*E1v%h15C@Y`_HyKUxs>&o()-L@)vD z=p&6Xbc`r6sF`Q9;!!zx^F2-GykCY<>|^iGb1JO@d2L{{5jl`f&C?nt${M1o-7lxR z#iIXB7deE&taLFXWB@IDAi+A0OFeXXx-bJdrye7cs+Lp@nG;&^IAv|-$F@wtwvKjMzRVdDY8ldxIn5=#0crkU{99;r7@M1}<$6ZtuH%rkR?t2%DhkAR`iKJ0Ga?FwVJRX*6 ziuXY9t{c~J@@dAsG7B+ZnwxM3Rfk8F3R7-y)1~TO`3^-_D!N9|2NZo+(GEp7DH>Na zrD&g`Pb<1#(J^%&{+6PXik?&Sf}$TQDwN$~Mcr|G*vo*I0WSky2D}V-8SpaTWx&gT zmjN#WUIx4jco~?Rft&AKzJ=dS-_ok{)AeXZZ{vhU7T=)AESHw*5GIpL3A6=V-nycRB->Y_y(^aN%^F0FM7?Q4nye+r7|}Q- ztqzb{8u_eYY^R`uAZH|{wvJ8&9rVRu0}oDK#dE%%D2#sU<6+f&F@Yn+ zd9jMQ=}TPk^$dQH(%%53QC2gohJ&c4))3x}Z`xN4`&t`Yhv)NT7KJYTK7Kjvd>@aa zFkl>Nqt`AP?hlnUf?w@i zSug-qD+XI3))r2pYZfUs^{TD8W{a1ba!re~>6dqCwKuC>nZyukCsuoKdG{^vyQJKt z%6n~jm%Y~ZdNmpM)k=HKhB~*^y^~&BLq=EL>?@v?5AL0F%*&f*t-#qW=lo}sua6M_ E26vyM!vFvP literal 13908 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 IdoYau01yFqTL1t6 diff --git a/lib/runtime-c-api/tests/test-context.c b/lib/runtime-c-api/tests/test-context.c index db967be3c..32bfcc21f 100644 --- a/lib/runtime-c-api/tests/test-context.c +++ b/lib/runtime-c-api/tests/test-context.c @@ -5,18 +5,61 @@ #include typedef struct { - int32_t amount; - int32_t value; + int32_t amount; + int32_t value; } counter_data; +typedef struct { + uint8_t* bytes; + long bytes_len; +} wasm_file_t; + +wasm_file_t read_wasm_file(const char* file_name) { + wasm_file_t wasm_file; + + FILE *file = fopen(file_name, "r"); + fseek(file, 0, SEEK_END); + wasm_file.bytes_len = ftell(file); + + wasm_file.bytes = malloc(wasm_file.bytes_len); + fseek(file, 0, SEEK_SET); + fread(wasm_file.bytes, 1, wasm_file.bytes_len, file); + fclose(file); + + return wasm_file; +} + void inc_counter(wasmer_instance_context_t *ctx) { - counter_data* data = (counter_data*)wasmer_instance_context_data_get(ctx); - data->value = data->value + data->amount; + counter_data* data = (counter_data*)wasmer_instance_context_data_get(ctx); + data->value = data->value + data->amount; } int32_t get_counter(wasmer_instance_context_t *ctx) { - counter_data* data = (counter_data*)wasmer_instance_context_data_get(ctx); - return data->value; + counter_data* data = (counter_data*)wasmer_instance_context_data_get(ctx); + return data->value; +} + +counter_data *init_counter(int32_t value, int32_t amount) { + counter_data* counter = malloc(sizeof(counter_data)); + counter->value = value; + counter->amount = amount; + return counter; +} + +void assert_counter(wasmer_instance_t *instance, int32_t expected) { + wasmer_value_t result_one; + wasmer_value_t params[] = {}; + wasmer_value_t results[] = {result_one}; + + wasmer_result_t call1_result = wasmer_instance_call(instance, "inc_and_get", params, 0, results, 1); + printf("Call result: %d\n", call1_result); + printf("Result: %d\n", results[0].value.I32); + assert(results[0].value.I32 == expected); + assert(call1_result == WASMER_OK); + + const wasmer_instance_context_t *ctx = wasmer_instance_context_get(instance); + counter_data *cd = (counter_data*)wasmer_instance_context_data_get(ctx); + assert(cd->value == expected); } wasmer_import_t create_import(char* module_name, char* import_name, wasmer_import_func_t *func) { @@ -41,7 +84,7 @@ wasmer_import_t create_import(char* module_name, char* import_name, wasmer_impor int main() { - // Imports + // Prepare Imports wasmer_value_tag inc_params_sig[] = {}; wasmer_value_tag inc_returns_sig[] = {}; wasmer_import_func_t *inc_func = wasmer_import_func_new((void (*)(void *)) inc_counter, inc_params_sig, 0, inc_returns_sig, 0); @@ -54,46 +97,30 @@ int main() wasmer_import_t imports[] = {inc_import, get_import}; - // Read the wasm file bytes - FILE *file = fopen("assets/inc.wasm", "r"); - fseek(file, 0, SEEK_END); - long len = ftell(file); - uint8_t *bytes = malloc(len); - fseek(file, 0, SEEK_SET); - fread(bytes, 1, len, file); - fclose(file); + // Read the wasm file + wasm_file_t wasm_file = read_wasm_file("assets/inc.wasm"); + // Instantiate instance printf("Instantiating\n"); wasmer_instance_t *instance = NULL; - wasmer_result_t compile_result = wasmer_instantiate(&instance, bytes, len, imports, 2); + wasmer_result_t compile_result = wasmer_instantiate(&instance, wasm_file.bytes, wasm_file.bytes_len, imports, 2); printf("Compile result: %d\n", compile_result); - counter_data* counter = malloc(sizeof(counter_data)); - counter->value = 2; - counter->amount = 5; + // Init counter + counter_data *counter = init_counter(2, 5); wasmer_instance_context_data_set(instance, counter); - wasmer_value_t result_one; - wasmer_value_t params[] = {}; - wasmer_value_t results[] = {result_one}; - - wasmer_result_t call1_result = wasmer_instance_call(instance, "inc_and_get", params, 0, results, 1); - printf("Call result: %d\n", call1_result); - printf("Result: %d\n", results[0].value.I32); - assert(results[0].value.I32 == 7); - assert(call1_result == WASMER_OK); - - wasmer_result_t call2_result = wasmer_instance_call(instance, "inc_and_get", params, 0, results, 1); - printf("Call result: %d\n", call2_result); - printf("Result: %d\n", results[0].value.I32); - assert(results[0].value.I32 == 12); - assert(call2_result == WASMER_OK); + // Run `instance.inc_and_get` and assert + assert_counter(instance, 7); + assert_counter(instance, 12); + assert_counter(instance, 17); + // Clear resources wasmer_import_func_destroy(inc_func); wasmer_import_func_destroy(get_func); wasmer_instance_destroy(instance); free(counter); - free(bytes); + free(wasm_file.bytes); return 0; }