test_basic.py 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python3
  3. #
  4. # Copyright (C) 2019 Intel Corporation. All rights reserved.
  5. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. #
  7. # pylint: disable=missing-class-docstring
  8. # pylint: disable=missing-function-docstring
  9. # pylint: disable=missing-module-docstring
  10. import ctypes as c
  11. import unittest
  12. from venv import create
  13. from wamr.wasmcapi.ffi import *
  14. # It is a module likes:
  15. # (module
  16. # (import "mod" "g0" (global i32))
  17. # (import "mod" "f0" (func (param f32) (result f64)))
  18. #
  19. # (func (export "f1") (param i32 i64))
  20. # (global (export "g1") (mut f32) (f32.const 3.14))
  21. # (memory 1 2)
  22. # (table 1 funcref)
  23. # )
  24. MODULE_BINARY = (
  25. b"\x00asm\x01\x00\x00\x00\x01\x0b\x02`\x01}\x01|`\x02\x7f~\x00"
  26. b"\x02\x14\x02\x03mod\x02g0\x03\x7f\x00\x03mod\x02f0\x00\x00\x03"
  27. b"\x02\x01\x01\x04\x04\x01p\x00\x01\x05\x04\x01\x01\x01\x02\x06\t"
  28. b"\x01}\x01C\xc3\xf5H@\x0b\x07\x0b\x02\x02f1\x00\x01\x02g1\x03\x01\n"
  29. b"\x04\x01\x02\x00\x0b"
  30. )
  31. @wasm_func_cb_decl
  32. def callback(args, results):
  33. # pylint: disable=unused-argument
  34. print("summer")
  35. @wasm_func_with_env_cb_decl
  36. def callback_with_env(env, args, results):
  37. # pylint: disable=unused-argument
  38. print("summer")
  39. class BasicTestSuite(unittest.TestCase):
  40. @classmethod
  41. def setUpClass(cls):
  42. cls._wasm_engine = wasm_engine_new()
  43. cls._wasm_store = wasm_store_new(cls._wasm_engine)
  44. def assertIsNullPointer(self, c_pointer):
  45. if not is_null_pointer(c_pointer):
  46. self.fail("not a null pointer")
  47. def assertIsNotNullPointer(self, c_pointer):
  48. if is_null_pointer(c_pointer):
  49. self.fail("not a non-null pointer")
  50. def test_wasm_valkind(self):
  51. self.assertEqual(
  52. [WASM_I32, WASM_I64, WASM_F32, WASM_F64, WASM_EXTERNREF, WASM_FUNCREF],
  53. [0, 1, 2, 3, 128, 129],
  54. )
  55. def test_wasm_valtype_new_pos(self):
  56. vt = wasm_valtype_new(WASM_I32)
  57. self.assertIsNotNullPointer(vt)
  58. wasm_valtype_delete(vt)
  59. def test_wasm_valtype_new_neg(self):
  60. vt = wasm_valtype_new(37)
  61. self.assertIsNullPointer(vt)
  62. wasm_valtype_delete(vt)
  63. def test_wasm_valtype_kind_pos(self):
  64. vt = wasm_valtype_new(WASM_I64)
  65. self.assertEqual(wasm_valtype_kind(vt), WASM_I64)
  66. wasm_valtype_delete(vt)
  67. def test_wasm_valtype_kind_neg(self):
  68. wasm_valtype_kind(create_null_pointer(wasm_valtype_t))
  69. def test_wasm_valtype_delete_pos(self):
  70. vt = wasm_valtype_new(WASM_FUNCREF)
  71. wasm_valtype_delete(vt)
  72. def test_wasm_valtype_delete_neg(self):
  73. wasm_valtype_delete(create_null_pointer(wasm_valtype_t))
  74. def test_wasm_valtype_copy_pos(self):
  75. vt1 = wasm_valtype_new(WASM_FUNCREF)
  76. vt2 = wasm_valtype_copy(vt1)
  77. self.assertIsNotNone(vt1)
  78. self.assertIsNotNullPointer(vt1)
  79. self.assertEqual(dereference(vt1), dereference(vt2))
  80. wasm_valtype_delete(vt1)
  81. wasm_valtype_delete(vt2)
  82. def test_wasm_valtype_copy_neg(self):
  83. vt = wasm_valtype_copy(create_null_pointer(wasm_valtype_t))
  84. self.assertIsNotNone(vt)
  85. self.assertIsNullPointer(vt)
  86. def test_list_to_carray(self):
  87. v1 = wasm_valtype_new(WASM_I64)
  88. v2 = wasm_valtype_new(WASM_F32)
  89. v3 = wasm_valtype_new(WASM_FUNCREF)
  90. data = list_to_carray(c.POINTER(wasm_valtype_t), v1, v2, v3)
  91. self.assertIsNotNone(data)
  92. self.assertTrue(isinstance(data, c.Array))
  93. self.assertEqual(data._length_, 3)
  94. self.assertEqual(dereference(data[0]), dereference(v1))
  95. self.assertEqual(dereference(data[1]), dereference(v2))
  96. self.assertEqual(dereference(data[2]), dereference(v3))
  97. wasm_valtype_delete(v1)
  98. wasm_valtype_delete(v2)
  99. wasm_valtype_delete(v3)
  100. def test_wasm_valtype_vec_new_pos(self):
  101. def_vt_list = [
  102. wasm_valtype_new(WASM_I32),
  103. wasm_valtype_new(WASM_F64),
  104. wasm_valtype_new(WASM_FUNCREF),
  105. ]
  106. data = list_to_carray(c.POINTER(wasm_valtype_t), *def_vt_list)
  107. vt_vec = wasm_valtype_vec_t()
  108. wasm_valtype_vec_new(vt_vec, 3, data)
  109. self.assertEqual(vt_vec.size, 3)
  110. self.assertEqual(vt_vec.num_elems, 3)
  111. self.assertIsNotNullPointer(vt_vec.data)
  112. ret_vt_list = wasm_vec_to_list(vt_vec)
  113. ret_vt_list = [dereference(vt) for vt in ret_vt_list]
  114. def_vt_list = [dereference(vt) for vt in def_vt_list]
  115. self.assertEqual(ret_vt_list, def_vt_list)
  116. wasm_valtype_vec_delete(vt_vec)
  117. def test_wasm_valtype_vec_new_neg(self):
  118. data = list_to_carray(
  119. c.POINTER(wasm_valtype_t),
  120. wasm_valtype_new(WASM_I32),
  121. wasm_valtype_new(WASM_F64),
  122. wasm_valtype_new(WASM_FUNCREF),
  123. )
  124. vt_vec = wasm_valtype_vec_t()
  125. wasm_valtype_vec_new(vt_vec, 1_000_000_000, data)
  126. self.assertEqual(vt_vec.size, 0)
  127. self.assertIsNullPointer(vt_vec.data)
  128. wasm_valtype_vec_delete(vt_vec)
  129. def test_wasm_valtype_vec_new_null_out(self):
  130. data = list_to_carray(
  131. c.POINTER(wasm_valtype_t),
  132. wasm_valtype_new(WASM_I32),
  133. wasm_valtype_new(WASM_F64),
  134. wasm_valtype_new(WASM_FUNCREF),
  135. )
  136. wasm_valtype_vec_new(create_null_pointer(wasm_valtype_vec_t), 10, data)
  137. def test_wasm_valtype_vec_new_null_data(self):
  138. vt_vec = wasm_valtype_vec_t()
  139. wasm_valtype_vec_new(vt_vec, 3, create_null_pointer(wasm_valtype_t))
  140. self.assertIsNotNone(vt_vec)
  141. self.assertIsNotNullPointer(c.pointer(vt_vec))
  142. def test_wasm_valtype_vec_new_uninitialized_pos(self):
  143. vt_vec = wasm_valtype_vec_t()
  144. wasm_valtype_vec_new_uninitialized((vt_vec), 2)
  145. self.assertEqual(2, vt_vec.size)
  146. wasm_valtype_vec_delete(vt_vec)
  147. def test_wasm_valtype_vec_new_uninitialized_neg(self):
  148. vt_vec = wasm_valtype_vec_t()
  149. wasm_valtype_vec_new_uninitialized(vt_vec, 1_000_000_000)
  150. self.assertEqual(vt_vec.size, 0)
  151. self.assertIsNullPointer(vt_vec.data)
  152. wasm_valtype_vec_delete(vt_vec)
  153. def test_wasm_valtype_vec_new_uninitialized_null_out(self):
  154. wasm_valtype_vec_new_uninitialized(create_null_pointer(wasm_valtype_vec_t), 2)
  155. def test_wasm_valtype_vec_new_empty_pos(self):
  156. vt_vec = wasm_valtype_vec_t()
  157. wasm_valtype_vec_new_empty(vt_vec)
  158. self.assertEqual(0, vt_vec.size)
  159. self.assertIsNullPointer(vt_vec.data)
  160. wasm_valtype_vec_delete(vt_vec)
  161. def test_wasm_valtype_vec_new_empty_neg(self):
  162. wasm_valtype_vec_new_empty(create_null_pointer(wasm_valtype_vec_t))
  163. def test_wasm_valtype_vec_copy_pos(self):
  164. vt_vec1 = wasm_valtype_vec_t()
  165. vt1 = wasm_valtype_new(WASM_F32)
  166. vt2 = wasm_valtype_new(WASM_I32)
  167. data = list_to_carray(c.POINTER(wasm_valtype_t), vt1, vt2)
  168. wasm_valtype_vec_new(vt_vec1, 2, data)
  169. vt_vec2 = wasm_valtype_vec_t()
  170. wasm_valtype_vec_copy(vt_vec2, vt_vec1)
  171. print(f"{vt_vec1} --> {vt_vec2}")
  172. self.assertEqual(vt_vec2.size, 2)
  173. self.assertEqual(vt_vec2.num_elems, 2)
  174. self.assertEqual(dereference(vt_vec2.data[0]), dereference(vt1))
  175. self.assertEqual(dereference(vt_vec2.data[1]), dereference(vt2))
  176. wasm_valtype_vec_delete(vt_vec1)
  177. wasm_valtype_vec_delete(vt_vec2)
  178. def test_wasm_valtype_vec_copy_null_src(self):
  179. dst = wasm_valtype_vec_t()
  180. wasm_valtype_vec_copy(dst, create_null_pointer(wasm_valtype_vec_t))
  181. self.assertIsNotNullPointer(c.pointer(dst))
  182. self.assertIsNullPointer(dst.data)
  183. def test_wasm_valtype_vec_copy_null_dst(self):
  184. src = wasm_valtype_vec_t()
  185. wasm_valtype_vec_new_empty(src)
  186. wasm_valtype_vec_copy(create_null_pointer(wasm_valtype_vec_t), src)
  187. wasm_valtype_vec_delete(src)
  188. def test_wasm_valtype_vec_delete_pos(self):
  189. vt_vec = wasm_valtype_vec_t()
  190. wasm_valtype_vec_new_uninitialized(vt_vec, 10)
  191. wasm_valtype_vec_delete(vt_vec)
  192. vt_vec = wasm_valtype_vec_t()
  193. wasm_valtype_vec_new_empty(vt_vec)
  194. wasm_valtype_vec_delete(vt_vec)
  195. def test_wasm_valtype_vec_delete_neg(self):
  196. wasm_valtype_vec_delete(create_null_pointer(wasm_valtype_vec_t))
  197. def test_wasm_functype_new_0_0(self):
  198. ft = wasm_functype_new_0_0()
  199. self.assertIsNotNullPointer(ft)
  200. self.assertEqual(0, dereference(wasm_functype_params(ft)).size)
  201. self.assertEqual(0, dereference(wasm_functype_results(ft)).size)
  202. wasm_functype_delete(ft)
  203. def test_wasm_functype_new_1_0(self):
  204. vt = wasm_valtype_new(WASM_I64)
  205. ft = wasm_functype_new_1_0(vt)
  206. self.assertIsNotNullPointer(ft)
  207. params = wasm_vec_to_list(wasm_functype_params(ft))
  208. self.assertEqual([dereference(p) for p in params], [dereference(vt)])
  209. wasm_functype_delete(ft)
  210. def test_wasm_functype_new_2_0(self):
  211. vt1 = wasm_valtype_new(WASM_I64)
  212. vt2 = wasm_valtype_new(WASM_F64)
  213. ft = wasm_functype_new_2_0(vt1, vt2)
  214. self.assertIsNotNullPointer(ft)
  215. self.assertEqual(2, dereference(wasm_functype_params(ft)).size)
  216. self.assertEqual(0, dereference(wasm_functype_results(ft)).size)
  217. wasm_functype_delete(ft)
  218. def test_wasm_functype_new_3_0(self):
  219. vt_list = [
  220. wasm_valtype_new(WASM_I64),
  221. wasm_valtype_new(WASM_F64),
  222. wasm_valtype_new(WASM_I64),
  223. ]
  224. ft = wasm_functype_new_3_0(*vt_list)
  225. params = wasm_vec_to_list(wasm_functype_params(ft))
  226. self.assertEqual(
  227. [dereference(p) for p in params],
  228. [dereference(vt) for vt in vt_list],
  229. )
  230. wasm_functype_delete(ft)
  231. def test_wasm_functype_new_0_1(self):
  232. vt1 = wasm_valtype_new(WASM_I64)
  233. ft = wasm_functype_new_0_1(vt1)
  234. self.assertIsNotNullPointer(ft)
  235. self.assertEqual(0, dereference(wasm_functype_params(ft)).size)
  236. self.assertEqual(1, dereference(wasm_functype_results(ft)).size)
  237. wasm_functype_delete(ft)
  238. def test_wasm_functype_new_1_1(self):
  239. vt1 = wasm_valtype_new(WASM_I64)
  240. vt2 = wasm_valtype_new(WASM_F64)
  241. ft = wasm_functype_new_1_1(vt1, vt2)
  242. params = wasm_vec_to_list(wasm_functype_params(ft))
  243. self.assertEqual(dereference(params[0]), dereference(vt1))
  244. results = wasm_vec_to_list(wasm_functype_results(ft))
  245. self.assertEqual(dereference(results[0]), dereference(vt2))
  246. wasm_functype_delete(ft)
  247. def test_wasm_functype_new_2_1(self):
  248. vt_list = [
  249. wasm_valtype_new(WASM_I64),
  250. wasm_valtype_new(WASM_F64),
  251. wasm_valtype_new(WASM_I64),
  252. ]
  253. ft = wasm_functype_new_2_1(*vt_list)
  254. self.assertIsNotNullPointer(ft)
  255. self.assertEqual(2, dereference(wasm_functype_params(ft)).size)
  256. self.assertEqual(1, dereference(wasm_functype_results(ft)).size)
  257. wasm_functype_delete(ft)
  258. def test_wasm_functype_new_3_1(self):
  259. vt_list = [
  260. wasm_valtype_new(WASM_I64),
  261. wasm_valtype_new(WASM_F64),
  262. wasm_valtype_new(WASM_I64),
  263. wasm_valtype_new(WASM_I32),
  264. ]
  265. ft = wasm_functype_new_3_1(*vt_list)
  266. params = wasm_vec_to_list(wasm_functype_params(ft))
  267. self.assertEqual(
  268. [dereference(p) for p in params], [dereference(vt) for vt in vt_list[:3]]
  269. )
  270. results = wasm_vec_to_list(wasm_functype_results(ft))
  271. self.assertEqual(dereference(results[0]), dereference(vt_list[-1]))
  272. wasm_functype_delete(ft)
  273. def test_wasm_functype_new_neg(self):
  274. ft = wasm_functype_new(
  275. create_null_pointer(wasm_valtype_vec_t),
  276. create_null_pointer(wasm_valtype_vec_t),
  277. )
  278. self.assertIsNotNullPointer(ft)
  279. wasm_functype_delete(ft)
  280. def test_wasm_functype_delete_pos(self):
  281. ft = wasm_functype_new_0_0()
  282. wasm_functype_delete(ft)
  283. def test_wasm_functype_delete_neg(self):
  284. wasm_functype_delete(create_null_pointer(wasm_functype_t))
  285. def test_wasm_functype_params_pos(self):
  286. vt_list = [
  287. wasm_valtype_new(WASM_I64),
  288. wasm_valtype_new(WASM_F64),
  289. wasm_valtype_new(WASM_I64),
  290. ]
  291. ft = wasm_functype_new_3_0(*vt_list)
  292. params = wasm_vec_to_list(wasm_functype_params(ft))
  293. self.assertEqual(
  294. [dereference(p) for p in params],
  295. [dereference(vt) for vt in vt_list],
  296. )
  297. wasm_functype_delete(ft)
  298. def test_wasm_functype_params_neg(self):
  299. params = wasm_functype_params(create_null_pointer(wasm_functype_t))
  300. self.assertIsNullPointer(params)
  301. def test_wasm_functype_results_pos(self):
  302. vt1 = wasm_valtype_new(WASM_I64)
  303. ft = wasm_functype_new_0_1(vt1)
  304. results = wasm_vec_to_list(wasm_functype_results(ft))
  305. self.assertEqual(dereference(results[0]), dereference(vt1))
  306. wasm_functype_delete(ft)
  307. def test_wasm_functype_results_neg(self):
  308. results = wasm_functype_results(create_null_pointer(wasm_functype_t))
  309. self.assertIsNullPointer(results)
  310. def test_wasm_functype_copy_pos(self):
  311. ft1 = wasm_functype_new_2_1(
  312. wasm_valtype_new(WASM_I64),
  313. wasm_valtype_new(WASM_F64),
  314. wasm_valtype_new(WASM_I64),
  315. )
  316. ft2 = wasm_functype_copy(ft1)
  317. self.assertIsNotNullPointer(ft2)
  318. self.assertEqual(2, dereference(wasm_functype_params(ft1)).size)
  319. self.assertEqual(1, dereference(wasm_functype_results(ft2)).size)
  320. wasm_functype_delete(ft1)
  321. wasm_functype_delete(ft2)
  322. def test_wasm_functype_copy_neg(self):
  323. ft2 = wasm_functype_copy(create_null_pointer(wasm_functype_t))
  324. self.assertIsNullPointer(ft2)
  325. wasm_functype_delete(ft2)
  326. def test_wasm_globaltype_new_pos(self):
  327. vt = wasm_valtype_new(WASM_FUNCREF)
  328. gt = wasm_globaltype_new(vt, True)
  329. self.assertIsNotNullPointer(gt)
  330. wasm_globaltype_delete(gt)
  331. def test_wasm_globaltype_new_neg(self):
  332. gt = wasm_globaltype_new(create_null_pointer(wasm_valtype_t), True)
  333. self.assertIsNullPointer(gt)
  334. wasm_globaltype_delete(gt)
  335. def test_wasm_globaltype_delete_pos(self):
  336. vt = wasm_valtype_new(WASM_FUNCREF)
  337. gt = wasm_globaltype_new(vt, False)
  338. wasm_globaltype_delete(gt)
  339. def test_wasm_globaltype_delete_neg(self):
  340. wasm_globaltype_delete(create_null_pointer(wasm_globaltype_t))
  341. def test_wasm_globaltype_content_pos(self):
  342. vt = wasm_valtype_new(WASM_FUNCREF)
  343. gt = wasm_globaltype_new(vt, True)
  344. gt_ret = wasm_globaltype_content(gt)
  345. self.assertEqual(dereference(vt), dereference(gt_ret))
  346. wasm_globaltype_delete(gt)
  347. def test_wasm_globaltype_content_neg(self):
  348. gt_ret = wasm_globaltype_content(create_null_pointer(wasm_globaltype_t))
  349. self.assertIsNullPointer(gt_ret)
  350. def test_wasm_globaltype_mutability_pos(self):
  351. vt1 = wasm_valtype_new(WASM_F32)
  352. gt1 = wasm_globaltype_new(vt1, False)
  353. vt2 = wasm_valtype_new(WASM_F32)
  354. gt2 = wasm_globaltype_new(vt2, True)
  355. self.assertFalse(wasm_globaltype_mutability(gt1))
  356. self.assertTrue(wasm_globaltype_mutability(gt2))
  357. wasm_globaltype_delete(gt1)
  358. wasm_globaltype_delete(gt2)
  359. def test_wasm_globaltype_mutability_neg(self):
  360. self.assertFalse(
  361. wasm_globaltype_mutability(create_null_pointer(wasm_globaltype_t))
  362. )
  363. def test_wasm_globaltype_copy_pos(self):
  364. vt = wasm_valtype_new(WASM_I32)
  365. gt1 = wasm_globaltype_new(vt, True)
  366. gt2 = wasm_globaltype_copy(gt1)
  367. self.assertEqual(dereference(gt1), dereference(gt2))
  368. wasm_globaltype_delete(gt1)
  369. wasm_globaltype_delete(gt2)
  370. def test_wasm_globaltype_copy_neg(self):
  371. gt2 = wasm_globaltype_copy(create_null_pointer(wasm_globaltype_t))
  372. self.assertIsNullPointer(gt2)
  373. wasm_globaltype_delete(gt2)
  374. def test_wasm_limit_new(self):
  375. limit = wasm_limits_new(10, 20)
  376. self.assertIsNotNullPointer(limit)
  377. self.assertEqual(dereference(limit).min, 10)
  378. self.assertEqual(dereference(limit).max, 20)
  379. def test_wasm_tabletype_new_pos(self):
  380. vt = wasm_valtype_new(WASM_FUNCREF)
  381. limit = wasm_limits_new(0, 0xFF)
  382. tt = wasm_tabletype_new(vt, limit)
  383. self.assertIsNotNullPointer(tt)
  384. wasm_tabletype_delete(tt)
  385. def test_wasm_tabletype_new_null_val_type(self):
  386. limit = wasm_limits_new(0, 0xFFFFFFFF)
  387. tt = wasm_tabletype_new(create_null_pointer(wasm_valtype_t), limit)
  388. self.assertIsNullPointer(tt)
  389. wasm_tabletype_delete(tt)
  390. def test_wasm_tabletype_new_null_limits(self):
  391. vt = wasm_valtype_new(WASM_FUNCREF)
  392. tt = wasm_tabletype_new(vt, create_null_pointer(wasm_limits_t))
  393. self.assertIsNullPointer(tt)
  394. wasm_tabletype_delete(tt)
  395. def test_wasm_tabletype_delete_pos(self):
  396. vt = wasm_valtype_new(WASM_FUNCREF)
  397. limit = wasm_limits_new(0, 0xFFFFFFFF)
  398. tt = wasm_tabletype_new(vt, limit)
  399. wasm_tabletype_delete(tt)
  400. def test_wasm_tabletype_delete_neg(self):
  401. wasm_tabletype_delete(create_null_pointer(wasm_tabletype_t))
  402. def test_wasm_tabletype_element_pos(self):
  403. vt = wasm_valtype_new(WASM_FUNCREF)
  404. limit = wasm_limits_new(0, 0xFFFFFFFF)
  405. tt = wasm_tabletype_new(vt, limit)
  406. vt_ret = wasm_tabletype_element(tt)
  407. self.assertEqual(dereference(vt), dereference(vt_ret))
  408. wasm_tabletype_delete(tt)
  409. def test_wasm_tabletype_element_neg(self):
  410. vt_ret = wasm_tabletype_element(create_null_pointer(wasm_tabletype_t))
  411. self.assertIsNullPointer(vt_ret)
  412. def test_wasm_tabletype_limits_pos(self):
  413. vt = wasm_valtype_new(WASM_FUNCREF)
  414. limit = wasm_limits_new(100, 256)
  415. tt = wasm_tabletype_new(vt, limit)
  416. limit_ret = wasm_tabletype_limits(tt)
  417. self.assertEqual(dereference(limit), dereference(limit_ret))
  418. wasm_tabletype_delete(tt)
  419. def test_wasm_tabletype_limits_neg(self):
  420. limit_ret = wasm_tabletype_limits(create_null_pointer(wasm_tabletype_t))
  421. self.assertIsNullPointer(limit_ret)
  422. def test_wasm_tabletype_copy_pos(self):
  423. vt = wasm_valtype_new(WASM_FUNCREF)
  424. limit = wasm_limits_new(13, 19)
  425. tt1 = wasm_tabletype_new(vt, limit)
  426. tt2 = wasm_tabletype_copy(tt1)
  427. self.assertEqual(dereference(tt1), dereference(tt2))
  428. wasm_tabletype_delete(tt1)
  429. wasm_tabletype_delete(tt2)
  430. def test_wasm_tabletype_copy_neg(self):
  431. tt2 = wasm_tabletype_copy(create_null_pointer(wasm_tabletype_t))
  432. self.assertIsNullPointer(tt2)
  433. wasm_tabletype_delete(tt2)
  434. def test_wasm_memorytype_new_pos(self):
  435. limit = wasm_limits_new(0, 3)
  436. mt = wasm_memorytype_new(limit)
  437. self.assertIsNotNullPointer(mt)
  438. wasm_memorytype_delete(mt)
  439. def test_wasm_memorytype_new_neg(self):
  440. mt = wasm_memorytype_new(None)
  441. self.assertIsNullPointer(mt)
  442. wasm_memorytype_delete(mt)
  443. def test_wasm_memorytype_delete_pos(self):
  444. limit = wasm_limits_new(1, 2)
  445. mt = wasm_memorytype_new(limit)
  446. wasm_memorytype_delete(mt)
  447. def test_wasm_memorytype_delete_neg(self):
  448. wasm_memorytype_delete(create_null_pointer(wasm_memorytype_t))
  449. def test_wasm_memorytype_limits_pos(self):
  450. limit = wasm_limits_new(3, 8)
  451. mt = wasm_memorytype_new(limit)
  452. limit_ret = wasm_memorytype_limits(mt)
  453. self.assertEqual(dereference(limit), dereference(limit_ret))
  454. wasm_memorytype_delete(mt)
  455. def test_wasm_memorytype_limits_neg(self):
  456. wasm_memorytype_limits(create_null_pointer(wasm_memorytype_t))
  457. def test_wasm_memorytype_copy_pos(self):
  458. limit = wasm_limits_new(7, 13)
  459. mt1 = wasm_memorytype_new(limit)
  460. mt2 = wasm_memorytype_copy(mt1)
  461. self.assertEqual(
  462. dereference(mt1),
  463. dereference(mt2),
  464. )
  465. wasm_memorytype_delete(mt1)
  466. wasm_memorytype_delete(mt2)
  467. def test_wasm_memorytype_copy_neg(self):
  468. mt2 = wasm_memorytype_copy(create_null_pointer(wasm_memorytype_t))
  469. self.assertIsNullPointer(mt2)
  470. wasm_memorytype_delete(mt2)
  471. def test_wasm_externtype_kind_pos(self):
  472. ft = wasm_functype_new_0_0()
  473. gt = wasm_globaltype_new(wasm_valtype_new(WASM_FUNCREF), True)
  474. mt = wasm_memorytype_new(wasm_limits_new(1, 2))
  475. tt = wasm_tabletype_new(wasm_valtype_new(WASM_FUNCREF), wasm_limits_new(10, 20))
  476. ets = [
  477. wasm_functype_as_externtype(ft),
  478. wasm_globaltype_as_externtype(gt),
  479. wasm_memorytype_as_externtype(mt),
  480. wasm_tabletype_as_externtype(tt),
  481. ]
  482. type_kinds = [wasm_externtype_kind(et) for et in ets]
  483. self.assertEqual(
  484. type_kinds,
  485. [
  486. WASM_EXTERN_FUNC,
  487. WASM_EXTERN_GLOBAL,
  488. WASM_EXTERN_MEMORY,
  489. WASM_EXTERN_TABLE,
  490. ],
  491. )
  492. [wasm_externtype_delete(et) for et in ets]
  493. def test_wasm_externtype_kind_neg(self):
  494. et = wasm_memorytype_as_externtype(create_null_pointer(wasm_memorytype_t))
  495. self.assertIsNullPointer(et)
  496. def test_wasm_externtype_delete_pos(self):
  497. mt = wasm_memorytype_new(wasm_limits_new(10, 20))
  498. et = wasm_memorytype_as_externtype(mt)
  499. wasm_externtype_delete(et)
  500. def test_wasm_externtype_delete_neg(self):
  501. et = wasm_globaltype_as_externtype(create_null_pointer(wasm_globaltype_t))
  502. wasm_externtype_delete(et)
  503. def test_wasm_externtype_copy_pos(self):
  504. tt1 = wasm_tabletype_new(
  505. wasm_valtype_new(WASM_FUNCREF), wasm_limits_new(10, 20)
  506. )
  507. et1 = wasm_tabletype_as_externtype(tt1)
  508. et2 = wasm_externtype_copy(et1)
  509. tt2 = wasm_externtype_as_tabletype(et2)
  510. self.assertEqual(dereference(tt1), dereference(tt2))
  511. wasm_externtype_delete(et2)
  512. wasm_externtype_delete(et1)
  513. def test_wasm_externtype_copy_neg(self):
  514. et1 = create_null_pointer(wasm_externtype_t)
  515. et2 = wasm_externtype_copy(et1)
  516. wasm_externtype_delete(et2)
  517. wasm_externtype_delete(et1)
  518. def test_wasm_name_new_from_string(self):
  519. s = "let the stars shine upon you"
  520. name = wasm_name_new_from_string(s)
  521. name_data = c.cast(name.data, c.c_char_p)
  522. name_data = bytes.decode(name_data.value)
  523. self.assertEqual(name_data, s)
  524. def test_wasm_importtype_new_pos(self):
  525. module_name = "mA"
  526. field_name = "func#1"
  527. module_name = wasm_name_new_from_string(module_name)
  528. field_name = wasm_name_new_from_string(field_name)
  529. ft = wasm_functype_new_0_0()
  530. et = wasm_functype_as_externtype(ft)
  531. it = wasm_importtype_new(module_name, field_name, et)
  532. self.assertIsNotNullPointer(it)
  533. self.assertEqual(dereference(wasm_importtype_module(it)), module_name)
  534. self.assertEqual(dereference(wasm_importtype_name(it)), field_name)
  535. self.assertEqual(dereference(wasm_importtype_type(it)), dereference(et))
  536. wasm_importtype_delete(it)
  537. def test_wasm_importtype_new_null_ext_type(self):
  538. module_name = "mA"
  539. field_name = "func#1"
  540. module_name = wasm_name_new_from_string(module_name)
  541. field_name = wasm_name_new_from_string(field_name)
  542. it = wasm_importtype_new(
  543. module_name,
  544. field_name,
  545. create_null_pointer(wasm_externtype_t),
  546. )
  547. self.assertIsNullPointer(it)
  548. wasm_importtype_delete(it)
  549. def test_wasm_importtype_new_null_module(self):
  550. field_name = "func#1"
  551. field_name = wasm_name_new_from_string(field_name)
  552. ft = wasm_functype_new_0_0()
  553. et = wasm_functype_as_externtype(ft)
  554. it = wasm_importtype_new(create_null_pointer(wasm_name_t), field_name, et)
  555. self.assertIsNullPointer(it)
  556. wasm_importtype_delete(it)
  557. def test_wasm_importtype_new_null_field(self):
  558. module_name = "mA"
  559. module_name = wasm_name_new_from_string(module_name)
  560. ft = wasm_functype_new_0_0()
  561. et = wasm_functype_as_externtype(ft)
  562. it = wasm_importtype_new(module_name, create_null_pointer(wasm_name_t), et)
  563. self.assertIsNullPointer(it)
  564. wasm_importtype_delete(it)
  565. def test_wasm_importtype_copy_pos(self):
  566. module_name = "mA"
  567. field_name = "memory#1"
  568. module_name = wasm_name_new_from_string(module_name)
  569. field_name = wasm_name_new_from_string(field_name)
  570. mt = wasm_memorytype_new(wasm_limits_new(10, 20))
  571. et = wasm_memorytype_as_externtype(mt)
  572. it1 = wasm_importtype_new(module_name, field_name, et)
  573. it2 = wasm_importtype_copy(it1)
  574. self.assertEqual(dereference(it1), dereference(it2))
  575. wasm_importtype_delete(it1)
  576. wasm_importtype_delete(it2)
  577. def test_wasm_importtype_copy_neg(self):
  578. it1 = create_null_pointer(wasm_importtype_t)
  579. it2 = wasm_importtype_copy(it1)
  580. wasm_importtype_delete(it1)
  581. wasm_importtype_delete(it2)
  582. def test_wasm_importtype_delete_pos(self):
  583. module_name = "mA"
  584. field_name = "memory#1"
  585. module_name = wasm_name_new_from_string(module_name)
  586. field_name = wasm_name_new_from_string(field_name)
  587. tt = wasm_tabletype_new(wasm_valtype_new(WASM_FUNCREF), wasm_limits_new(10, 20))
  588. et = wasm_tabletype_as_externtype(tt)
  589. it = wasm_importtype_new(module_name, field_name, et)
  590. wasm_importtype_delete(it)
  591. def test_wasm_importtype_delete_neg(self):
  592. wasm_importtype_delete(create_null_pointer(wasm_importtype_t))
  593. def test_wasm_importtype_module_pos(self):
  594. module_name = "mA"
  595. field_name = "func#1"
  596. module_name = wasm_name_new_from_string(module_name)
  597. field_name = wasm_name_new_from_string(field_name)
  598. ft = wasm_functype_new_0_0()
  599. et = wasm_functype_as_externtype(ft)
  600. it = wasm_importtype_new(module_name, field_name, et)
  601. module_name_ret = wasm_importtype_module(it)
  602. self.assertEqual(dereference(module_name_ret), module_name)
  603. wasm_importtype_delete(it)
  604. def test_wasm_importtype_module_neg(self):
  605. it = create_null_pointer(wasm_importtype_t)
  606. wasm_importtype_module(it)
  607. wasm_importtype_delete(it)
  608. def test_wasm_importtype_name_pos(self):
  609. module_name = "mA"
  610. field_name = "func#1"
  611. module_name = wasm_name_new_from_string(module_name)
  612. field_name = wasm_name_new_from_string(field_name)
  613. ft = wasm_functype_new_0_0()
  614. et = wasm_functype_as_externtype(ft)
  615. it = wasm_importtype_new(module_name, field_name, et)
  616. field_name_ret = wasm_importtype_name(it)
  617. self.assertEqual(dereference(field_name_ret), field_name)
  618. wasm_importtype_delete(it)
  619. def test_wasm_importtype_name_neg(self):
  620. it = create_null_pointer(wasm_importtype_t)
  621. wasm_importtype_name(it)
  622. wasm_importtype_delete(it)
  623. def test_wasm_importtype_type_pos(self):
  624. module_name = "mA"
  625. field_name = "func#1"
  626. module_name = wasm_name_new_from_string(module_name)
  627. field_name = wasm_name_new_from_string(field_name)
  628. ft = wasm_functype_new_0_0()
  629. et = wasm_functype_as_externtype(ft)
  630. it = wasm_importtype_new(module_name, field_name, et)
  631. et_ret = wasm_importtype_type(it)
  632. self.assertEqual(dereference(et_ret), dereference(et))
  633. wasm_importtype_delete(it)
  634. def test_wasm_importtype_type_neg(self):
  635. it = create_null_pointer(wasm_importtype_t)
  636. wasm_importtype_type(it)
  637. wasm_importtype_delete(it)
  638. def test_wasm_exporttype_new_pos(self):
  639. name = "hello"
  640. name = wasm_name_new_from_string(name)
  641. ft = wasm_functype_new_0_0()
  642. ft = wasm_functype_as_externtype(ft)
  643. et = wasm_exporttype_new(name, ft)
  644. self.assertIsNotNullPointer(et)
  645. wasm_exporttype_delete(et)
  646. def test_wasm_exporttype_new_null_name(self):
  647. name = create_null_pointer(wasm_name_t)
  648. ft = wasm_functype_new_0_0()
  649. ft = wasm_functype_as_externtype(ft)
  650. et = wasm_exporttype_new(name, ft)
  651. self.assertIsNullPointer(et)
  652. wasm_exporttype_delete(et)
  653. def test_wasm_exporttype_new_null_ext_type(self):
  654. name = "hello"
  655. name = wasm_name_new_from_string(name)
  656. ext_type = create_null_pointer(wasm_externtype_t)
  657. et = wasm_exporttype_new(name, ext_type)
  658. self.assertIsNullPointer(et)
  659. wasm_exporttype_delete(et)
  660. def test_wasm_exporttype_copy_pos(self):
  661. name = "hello"
  662. name = wasm_name_new_from_string(name)
  663. gt = wasm_globaltype_new(wasm_valtype_new(WASM_F32), True)
  664. gt = wasm_globaltype_as_externtype(gt)
  665. et1 = wasm_exporttype_new(name, gt)
  666. et2 = wasm_exporttype_copy(et1)
  667. self.assertEqual(
  668. dereference(et1),
  669. dereference(et2),
  670. )
  671. wasm_exporttype_delete(et1)
  672. wasm_exporttype_delete(et2)
  673. def test_wasm_exporttype_copy_neg(self):
  674. et1 = create_null_pointer(wasm_exporttype_t)
  675. et2 = wasm_exporttype_copy(et1)
  676. wasm_exporttype_delete(et1)
  677. wasm_exporttype_delete(et2)
  678. def test_wasm_exporttype_delete_pos(self):
  679. name = "hello"
  680. name = wasm_name_new_from_string(name)
  681. mt = wasm_memorytype_new(wasm_limits_new(10, 20))
  682. mt = wasm_memorytype_as_externtype(mt)
  683. et = wasm_exporttype_new(name, mt)
  684. wasm_exporttype_delete(et)
  685. def test_wasm_exporttype_delete_neg(self):
  686. et = create_null_pointer(wasm_exporttype_t)
  687. wasm_exporttype_delete(et)
  688. def test_wasm_exporttype_name_pos(self):
  689. name = "hello"
  690. name = wasm_name_new_from_string(name)
  691. tt = wasm_tabletype_new(wasm_valtype_new(WASM_FUNCREF), wasm_limits_new(10, 20))
  692. tt = wasm_tabletype_as_externtype(tt)
  693. et = wasm_exporttype_new(name, tt)
  694. name_ret = wasm_exporttype_name(et)
  695. self.assertEqual(dereference(name_ret), name)
  696. wasm_exporttype_delete(et)
  697. def test_wasm_exporttype_name_neg(self):
  698. et = create_null_pointer(wasm_exporttype_t)
  699. wasm_exporttype_name(et)
  700. wasm_exporttype_delete(et)
  701. def test_wasm_exporttype_type_pos(self):
  702. name = "hello"
  703. name = wasm_name_new_from_string(name)
  704. tt = wasm_tabletype_new(wasm_valtype_new(WASM_FUNCREF), wasm_limits_new(10, 20))
  705. tt = wasm_tabletype_as_externtype(tt)
  706. et = wasm_exporttype_new(name, tt)
  707. tt_ret = wasm_exporttype_type(et)
  708. self.assertEqual(dereference(tt_ret), dereference(tt))
  709. wasm_exporttype_delete(et)
  710. def test_wasm_exporttype_type_neg(self):
  711. et = create_null_pointer(wasm_exporttype_t)
  712. wasm_exporttype_type(et)
  713. wasm_exporttype_delete(et)
  714. def test_wasm_i32_val(self):
  715. val = wasm_i32_val(100)
  716. self.assertEqual(val.kind, WASM_I32)
  717. self.assertEqual(val.of.i32, 100)
  718. # can not use wasm_val_delete() because it is not malloced
  719. def test_wasm_i64_val(self):
  720. val = wasm_i64_val(-100)
  721. self.assertEqual(val.kind, WASM_I64)
  722. self.assertEqual(val.of.i64, -100)
  723. # can not use wasm_val_delete() because it is not malloced
  724. def test_wasm_f32_val(self):
  725. val = wasm_f32_val(100)
  726. self.assertEqual(val.kind, WASM_F32)
  727. self.assertEqual(val.of.f32, 100.0)
  728. # can not use wasm_val_delete() because it is not malloced
  729. def test_wasm_f64_val(self):
  730. val = wasm_f64_val(-100)
  731. self.assertEqual(val.kind, WASM_F64)
  732. self.assertEqual(val.of.f64, -100.0)
  733. # can not use wasm_val_delete() because it is not malloced
  734. # there is no wasm_val_new() to malloc a wasm_val_t
  735. def test_wasm_val_delete(self):
  736. pass
  737. def test_wasm_val_copy(self):
  738. v1 = wasm_f32_val(3.14)
  739. v2 = wasm_val_t()
  740. wasm_val_copy(v1, v2)
  741. self.assertEqual(v1, v2)
  742. # can not use wasm_val_delete() because it is not malloced
  743. def test_wasm_ref_delete_neg(self):
  744. ref = create_null_pointer(wasm_ref_t)
  745. wasm_ref_delete(ref)
  746. ref = wasm_ref_t()
  747. wasm_ref_delete(ref)
  748. def test_wasm_trap_new_pos(self):
  749. # can't create a trap with traces(wasm_frame_vec_t)
  750. msg = wasm_name_new_from_string("a fake trap")
  751. trap = wasm_trap_new(self._wasm_store, msg)
  752. self.assertIsNotNone(trap)
  753. wasm_trap_delete(trap)
  754. def test_wasm_trap_new_null_msg(self):
  755. trap = wasm_trap_new(self._wasm_store, create_null_pointer(wasm_name_t))
  756. self.assertIsNotNone(trap)
  757. self.assertIsNotNullPointer(trap)
  758. wasm_trap_delete(trap)
  759. def test_wasm_trap_message_pos(self):
  760. msg = wasm_name_new_from_string("a fake trap")
  761. trap = wasm_trap_new(self._wasm_store, msg)
  762. msg_in_trap = wasm_message_t()
  763. wasm_trap_message(trap, msg_in_trap)
  764. self.assertEqual(
  765. msg,
  766. msg_in_trap,
  767. )
  768. wasm_trap_delete(trap)
  769. def test_wasm_trap_message_null_trap(self):
  770. msg = wasm_name_new_from_string("a fake trap")
  771. wasm_trap_message(create_null_pointer(wasm_trap_t), msg)
  772. def test_wasm_trap_message_null_out(self):
  773. msg = wasm_name_new_from_string("a fake trap")
  774. trap = wasm_trap_new(self._wasm_store, msg)
  775. wasm_trap_message(trap, create_null_pointer(wasm_message_t))
  776. wasm_trap_delete(trap)
  777. # test those APIs in advance:
  778. # wasm_trap_origin
  779. # wasm_trap_trace
  780. # wasm_frame_delete
  781. # wasm_frame_copy
  782. # wasm_frame_module_offset
  783. # wasm_frame_instance
  784. # wasm_frame_func_index
  785. # wasm_frame_func_offset
  786. def test_wasm_foreign_new_pos(self):
  787. foreign = wasm_foreign_new(self._wasm_store)
  788. self.assertIsNotNone(foreign)
  789. self.assertIsNotNullPointer(foreign)
  790. wasm_foreign_delete(foreign)
  791. def test_wasm_foreign_new_neg(self):
  792. foreign = wasm_foreign_new(create_null_pointer(wasm_store_t))
  793. self.assertIsNotNone(foreign)
  794. self.assertIsNullPointer(foreign)
  795. wasm_foreign_delete(foreign)
  796. def test_wasm_foreign_delete_pos(self):
  797. foreign = wasm_foreign_new(self._wasm_store)
  798. wasm_foreign_delete(foreign)
  799. def test_wasm_foreign_delete_neg(self):
  800. wasm_foreign_delete(create_null_pointer(wasm_foreign_t))
  801. # wasm_egnine_new()/wasm_engine_delete()
  802. # wasm_store_new()/wasm_store_delete()
  803. # used in setUpClass() and tearDownClass
  804. def test_wasm_module_new_pos(self):
  805. binary = load_module_file(MODULE_BINARY)
  806. module = wasm_module_new(self._wasm_store, binary)
  807. self.assertIsNotNone(module)
  808. self.assertIsNotNullPointer(module)
  809. wasm_byte_vec_delete(binary)
  810. wasm_module_delete(module)
  811. def test_wasm_module_new_neg(self):
  812. module = wasm_module_new(self._wasm_store, create_null_pointer(wasm_byte_vec_t))
  813. self.assertIsNotNone(module)
  814. self.assertIsNullPointer(module)
  815. wasm_module_delete(module)
  816. def test_wasm_module_delete_pos(self):
  817. binary = load_module_file(MODULE_BINARY)
  818. module = wasm_module_new(self._wasm_store, binary)
  819. wasm_byte_vec_delete(binary)
  820. wasm_module_delete(module)
  821. def test_wasm_module_delete_neg(self):
  822. module = wasm_module_new(self._wasm_store, create_null_pointer(wasm_byte_vec_t))
  823. wasm_module_delete(module)
  824. def test_wasm_module_validate_pos(self):
  825. binary = load_module_file(MODULE_BINARY)
  826. validation = wasm_module_validate(self._wasm_store, binary)
  827. self.assertTrue(validation)
  828. wasm_byte_vec_delete(binary)
  829. def test_wasm_module_validate_neg(self):
  830. tmp = (1024).to_bytes(2, byteorder="big")
  831. binary = load_module_file(tmp)
  832. validation = wasm_module_validate(self._wasm_store, binary)
  833. self.assertFalse(validation)
  834. wasm_byte_vec_delete(binary)
  835. def test_wasm_module_imports_pos(self):
  836. binary = load_module_file(MODULE_BINARY)
  837. module = wasm_module_new(self._wasm_store, binary)
  838. imports = wasm_importtype_vec_t()
  839. wasm_module_imports(module, imports)
  840. imports_list = wasm_vec_to_list(imports)
  841. self.assertEqual(len(imports_list), 2)
  842. func_type = wasm_functype_new_1_1(
  843. wasm_valtype_new(WASM_F32),
  844. wasm_valtype_new(WASM_F64),
  845. )
  846. ext_type = wasm_functype_as_externtype(func_type)
  847. self.assertEqual(
  848. dereference(wasm_importtype_type(imports_list[0])), dereference(ext_type)
  849. )
  850. wasm_externtype_delete(ext_type)
  851. wasm_importtype_vec_delete(imports)
  852. wasm_byte_vec_delete(binary)
  853. wasm_module_delete(module)
  854. def test_wasm_module_imports_null_module(self):
  855. imports = wasm_importtype_vec_t()
  856. wasm_module_imports(create_null_pointer(wasm_module_t), imports)
  857. self.assertEqual(imports.size, 0)
  858. wasm_importtype_vec_delete(imports)
  859. def test_wasm_module_imports_null_out(self):
  860. binary = load_module_file(MODULE_BINARY)
  861. module = wasm_module_new(self._wasm_store, binary)
  862. wasm_module_imports(module, create_null_pointer(wasm_importtype_vec_t))
  863. wasm_byte_vec_delete(binary)
  864. wasm_module_delete(module)
  865. def test_wasm_module_exports_pos(self):
  866. binary = load_module_file(MODULE_BINARY)
  867. module = wasm_module_new(self._wasm_store, binary)
  868. exports = wasm_exporttype_vec_t()
  869. wasm_module_exports(module, exports)
  870. exports_list = wasm_vec_to_list(exports)
  871. self.assertEqual(len(exports_list), 2)
  872. glbl_type = wasm_globaltype_new(wasm_valtype_new(WASM_F32), True)
  873. ext_type = wasm_globaltype_as_externtype(glbl_type)
  874. self.assertEqual(
  875. dereference(wasm_exporttype_type(exports_list[1])), dereference(ext_type)
  876. )
  877. wasm_exporttype_vec_delete(exports)
  878. wasm_byte_vec_delete(binary)
  879. wasm_module_delete(module)
  880. def test_wasm_module_exports_null_module(self):
  881. exports = wasm_exporttype_vec_t()
  882. wasm_module_exports(create_null_pointer(wasm_module_t), exports)
  883. self.assertEqual(exports.size, 0)
  884. wasm_exporttype_vec_delete(exports)
  885. def test_wasm_module_exports_null_out(self):
  886. binary = load_module_file(MODULE_BINARY)
  887. module = wasm_module_new(self._wasm_store, binary)
  888. wasm_module_exports(module, create_null_pointer(wasm_exporttype_vec_t))
  889. wasm_byte_vec_delete(binary)
  890. wasm_module_delete(module)
  891. def test_wasm_instance_new_pos_empty_imports(self):
  892. binary = load_module_file(MODULE_BINARY)
  893. module = wasm_module_new(self._wasm_store, binary)
  894. imports = wasm_extern_vec_t()
  895. wasm_extern_vec_new_empty(imports)
  896. instance = wasm_instance_new(
  897. self._wasm_store, module, imports, create_null_pointer(wasm_trap_t)
  898. )
  899. wasm_module_delete(module)
  900. self.assertIsNullPointer(instance)
  901. def test_wasm_instance_new_pos(self):
  902. binary = load_module_file(MODULE_BINARY)
  903. module = wasm_module_new(self._wasm_store, binary)
  904. ft = wasm_functype_new_1_1(
  905. wasm_valtype_new(WASM_F32),
  906. wasm_valtype_new(WASM_F64),
  907. )
  908. func = wasm_func_new(self._wasm_store, ft, callback)
  909. gt = wasm_globaltype_new(wasm_valtype_new(WASM_I32), True)
  910. init = wasm_i32_val(100)
  911. gb = wasm_global_new(self._wasm_store, gt, init)
  912. imports = wasm_extern_vec_t()
  913. data = list_to_carray(
  914. c.POINTER(wasm_extern_t),
  915. wasm_func_as_extern(func),
  916. wasm_global_as_extern(gb),
  917. )
  918. wasm_extern_vec_new(imports, 2, data)
  919. instance = wasm_instance_new(
  920. self._wasm_store, module, imports, create_null_pointer(wasm_trap_t)
  921. )
  922. self.assertIsNotNone(instance)
  923. wasm_instance_delete(instance)
  924. wasm_module_delete(module)
  925. def test_wasm_instance_new_neg_null_imports(self):
  926. binary = load_module_file(MODULE_BINARY)
  927. module = wasm_module_new(self._wasm_store, binary)
  928. instance = wasm_instance_new(
  929. self._wasm_store,
  930. module,
  931. create_null_pointer(wasm_extern_vec_t),
  932. create_null_pointer(wasm_trap_t),
  933. )
  934. wasm_module_delete(module)
  935. self.assertIsNullPointer(instance)
  936. # test those APIs in advanced:
  937. # wasm_instance_delete
  938. # wasm_instance_exports
  939. def test_wasm_func_new_pos(self):
  940. vt1 = wasm_valtype_new(WASM_F32)
  941. vt2 = wasm_valtype_new(WASM_FUNCREF)
  942. ft = wasm_functype_new_1_1(vt1, vt2)
  943. func = wasm_func_new(self._wasm_store, ft, callback)
  944. self.assertIsNotNone(func)
  945. self.assertIsNotNullPointer(func)
  946. wasm_func_delete(func)
  947. def test_wasm_func_new_null_type(self):
  948. func = wasm_func_new(
  949. self._wasm_store, create_null_pointer(wasm_functype_t), callback
  950. )
  951. self.assertIsNotNone(func)
  952. self.assertIsNullPointer(func)
  953. wasm_func_delete(func)
  954. def test_wasm_func_new_null_callback(self):
  955. vt1 = wasm_valtype_new(WASM_F32)
  956. vt2 = wasm_valtype_new(WASM_FUNCREF)
  957. ft = wasm_functype_new_1_1(vt1, vt2)
  958. func = wasm_func_new(self._wasm_store, ft, wasm_func_callback_t())
  959. self.assertIsNotNone(func)
  960. self.assertIsNullPointer(func)
  961. wasm_func_delete(func)
  962. def test_wasm_func_new_with_env_pos(self):
  963. ft = wasm_functype_new_3_1(
  964. wasm_valtype_new(WASM_I32),
  965. wasm_valtype_new(WASM_F32),
  966. wasm_valtype_new(WASM_I64),
  967. wasm_valtype_new(WASM_I64),
  968. )
  969. func = wasm_func_new_with_env(
  970. self._wasm_store,
  971. ft,
  972. callback_with_env,
  973. c.c_void_p(0),
  974. wasm_finalizer(0),
  975. )
  976. self.assertIsNotNone(func)
  977. self.assertIsNotNullPointer(func)
  978. wasm_func_delete(func)
  979. def test_wasm_func_new_with_env_null_type(self):
  980. func = wasm_func_new_with_env(
  981. self._wasm_store,
  982. create_null_pointer(wasm_functype_t),
  983. callback_with_env,
  984. c.c_void_p(0),
  985. wasm_finalizer(0),
  986. )
  987. self.assertIsNotNone(func)
  988. self.assertIsNullPointer(func)
  989. wasm_func_delete(func)
  990. def test_wasm_func_new_with_env_null_callback(self):
  991. ft = wasm_functype_new_3_1(
  992. wasm_valtype_new(WASM_I32),
  993. wasm_valtype_new(WASM_F32),
  994. wasm_valtype_new(WASM_I64),
  995. wasm_valtype_new(WASM_I64),
  996. )
  997. func = wasm_func_new_with_env(
  998. self._wasm_store,
  999. ft,
  1000. wasm_func_callback_with_env_t(),
  1001. c.c_void_p(0),
  1002. wasm_finalizer(0),
  1003. )
  1004. self.assertIsNotNone(func)
  1005. self.assertIsNullPointer(func)
  1006. wasm_func_delete(func)
  1007. def test_wasm_func_delete_pos(self):
  1008. ft = wasm_functype_new_0_0()
  1009. func = wasm_func_new(self._wasm_store, ft, callback)
  1010. wasm_func_delete(func)
  1011. def test_wasm_func_delete_neg(self):
  1012. wasm_func_delete(create_null_pointer(wasm_func_t))
  1013. def test_wasm_func_type_pos(self):
  1014. ft = wasm_functype_new_2_0(
  1015. wasm_valtype_new(WASM_F32),
  1016. wasm_valtype_new(WASM_FUNCREF),
  1017. )
  1018. func = wasm_func_new(self._wasm_store, ft, callback)
  1019. ft_ret = wasm_func_type(func)
  1020. self.assertEqual(
  1021. dereference(ft),
  1022. dereference(ft_ret),
  1023. )
  1024. wasm_functype_delete(ft_ret)
  1025. wasm_func_delete(func)
  1026. def test_wasm_func_type_neg(self):
  1027. ft_ret = wasm_func_type(create_null_pointer(wasm_func_t))
  1028. wasm_functype_delete(ft_ret)
  1029. def test_wasm_func_copy_pos(self):
  1030. vt1 = wasm_valtype_new(WASM_F32)
  1031. ft = wasm_functype_new_0_1(vt1)
  1032. func1 = wasm_func_new(self._wasm_store, ft, callback)
  1033. func2 = wasm_func_copy(func1)
  1034. self.assertEqual(
  1035. dereference(wasm_func_type(func1)), dereference(wasm_func_type(func2))
  1036. )
  1037. wasm_func_delete(func2)
  1038. wasm_func_delete(func1)
  1039. def test_wasm_func_copy_neg(self):
  1040. func1 = wasm_func_new(
  1041. self._wasm_store, create_null_pointer(wasm_functype_t), callback
  1042. )
  1043. func2 = wasm_func_copy(func1)
  1044. wasm_func_delete(func2)
  1045. wasm_func_delete(func1)
  1046. # test wasm_func_call in advanced
  1047. def test_wasm_global_new_pos(self):
  1048. vt = wasm_valtype_new(WASM_F32)
  1049. gt = wasm_globaltype_new(vt, False)
  1050. v = wasm_f32_val(3.14)
  1051. g = wasm_global_new(self._wasm_store, gt, v)
  1052. self.assertIsNotNone(g)
  1053. self.assertIsNotNullPointer(g)
  1054. wasm_globaltype_delete(gt)
  1055. wasm_global_delete(g)
  1056. def test_wasm_global_new_null_type(self):
  1057. v = wasm_f32_val(3.14)
  1058. g = wasm_global_new(self._wasm_store, create_null_pointer(wasm_globaltype_t), v)
  1059. self.assertIsNotNone(g)
  1060. self.assertIsNullPointer(g)
  1061. wasm_global_delete(g)
  1062. def test_wasm_global_new_null_init(self):
  1063. vt = wasm_valtype_new(WASM_F32)
  1064. gt = wasm_globaltype_new(vt, False)
  1065. g = wasm_global_new(self._wasm_store, gt, create_null_pointer(wasm_val_t))
  1066. self.assertIsNotNone(g)
  1067. self.assertIsNullPointer(g)
  1068. wasm_globaltype_delete(gt)
  1069. wasm_global_delete(g)
  1070. def test_wasm_global_delete_pos(self):
  1071. vt = wasm_valtype_new(WASM_I32)
  1072. gt = wasm_globaltype_new(vt, True)
  1073. v = wasm_i32_val(3)
  1074. g = wasm_global_new(self._wasm_store, gt, v)
  1075. wasm_globaltype_delete(gt)
  1076. wasm_global_delete(g)
  1077. def test_wasm_global_delete_neg(self):
  1078. wasm_global_delete(create_null_pointer(wasm_global_t))
  1079. def test_wasm_global_type_pos(self):
  1080. vt = wasm_valtype_new(WASM_I64)
  1081. gt = wasm_globaltype_new(vt, False)
  1082. v = wasm_i32_val(3)
  1083. g = wasm_global_new(self._wasm_store, gt, v)
  1084. gt_ret = wasm_global_type(g)
  1085. self.assertEqual(dereference(gt), dereference(gt_ret))
  1086. wasm_globaltype_delete(gt)
  1087. wasm_globaltype_delete(gt_ret)
  1088. wasm_global_delete(g)
  1089. def test_wasm_global_type_neg(self):
  1090. gt = wasm_global_type(create_null_pointer(wasm_global_t))
  1091. wasm_globaltype_delete(gt)
  1092. # test wasm_global_get and wasm_global_set in advanced
  1093. def test_wasm_table_new_pos(self):
  1094. vt = wasm_valtype_new(WASM_FUNCREF)
  1095. limits = wasm_limits_new(10, 15)
  1096. tt = wasm_tabletype_new(vt, limits)
  1097. t = wasm_table_new(self._wasm_store, tt, create_null_pointer(wasm_ref_t))
  1098. self.assertIsNotNone(t)
  1099. self.assertIsNotNullPointer(t)
  1100. wasm_table_delete(t)
  1101. def test_wasm_table_new_null_type(self):
  1102. t = wasm_table_new(
  1103. self._wasm_store,
  1104. create_null_pointer(wasm_tabletype_t),
  1105. create_null_pointer(wasm_ref_t),
  1106. )
  1107. self.assertIsNotNone(t)
  1108. self.assertIsNullPointer(t)
  1109. wasm_table_delete(t)
  1110. def test_wasm_table_delete_pos(self):
  1111. vt = wasm_valtype_new(WASM_FUNCREF)
  1112. limits = wasm_limits_new(10, 15)
  1113. tt = wasm_tabletype_new(vt, limits)
  1114. t = wasm_table_new(self._wasm_store, tt, create_null_pointer(wasm_ref_t))
  1115. wasm_table_delete(t)
  1116. def test_wasm_table_delete_neg(self):
  1117. wasm_table_delete(create_null_pointer(wasm_table_t))
  1118. def test_wasm_table_type_pos(self):
  1119. vt = wasm_valtype_new(WASM_FUNCREF)
  1120. limits = wasm_limits_new(1, 2)
  1121. tt = wasm_tabletype_new(vt, limits)
  1122. t = wasm_table_new(self._wasm_store, tt, create_null_pointer(wasm_ref_t))
  1123. tt_ret = wasm_table_type(t)
  1124. self.assertEqual(
  1125. dereference(tt),
  1126. dereference(tt_ret),
  1127. )
  1128. wasm_table_delete(t)
  1129. def test_wasm_table_type_neg(self):
  1130. t = wasm_table_new(
  1131. self._wasm_store,
  1132. create_null_pointer(wasm_tabletype_t),
  1133. create_null_pointer(wasm_ref_t),
  1134. )
  1135. tt_ret = wasm_table_type(t)
  1136. wasm_table_delete(t)
  1137. # test wasm_table_size, wasm_table_get, wasm_table_set in advanced
  1138. def test_wasm_memory_new_pos(self):
  1139. limits = wasm_limits_new(10, 12)
  1140. mt = wasm_memorytype_new(limits)
  1141. m = wasm_memory_new(self._wasm_store, mt)
  1142. self.assertIsNotNullPointer(m)
  1143. wasm_memory_delete(m)
  1144. def test_wasm_memory_new_null_type(self):
  1145. m = wasm_memory_new(self._wasm_store, create_null_pointer(wasm_memorytype_t))
  1146. self.assertIsNullPointer(m)
  1147. wasm_memory_delete(m)
  1148. def test_wasm_memory_delete_pos(self):
  1149. limits = wasm_limits_new(10, 21)
  1150. mt = wasm_memorytype_new(limits)
  1151. m = wasm_memory_new(self._wasm_store, mt)
  1152. wasm_memory_delete(m)
  1153. def test_wasm_memory_delete_neg(self):
  1154. wasm_memory_delete(create_null_pointer(wasm_memory_t))
  1155. def test_wasm_memory_type_pos(self):
  1156. limits = wasm_limits_new(10, 21)
  1157. mt = wasm_memorytype_new(limits)
  1158. m = wasm_memory_new(self._wasm_store, mt)
  1159. mt_ret = wasm_memory_type(m)
  1160. self.assertEqual(dereference(mt), dereference(mt_ret))
  1161. wasm_memory_delete(m)
  1162. def test_wasm_memory_type_neg(self):
  1163. mt = wasm_memory_type(create_null_pointer(wasm_memory_t))
  1164. self.assertIsNullPointer(mt)
  1165. wasm_memorytype_delete(mt)
  1166. # test wasm_memory_size, wasm_memory_data, wasm_memory_data_size in advanced
  1167. def test_wasm_extern_delete_pos(self):
  1168. vt = wasm_valtype_new(WASM_I64)
  1169. gt = wasm_globaltype_new(vt, False)
  1170. v = wasm_i64_val(128)
  1171. glb = wasm_global_new(self._wasm_store, gt, v)
  1172. etrn = wasm_global_as_extern(glb)
  1173. wasm_extern_delete(etrn)
  1174. def test_wasm_extern_delete_neg(self):
  1175. etrn = wasm_global_as_extern(create_null_pointer(wasm_global_t))
  1176. wasm_extern_delete(etrn)
  1177. def test_wasm_extern_type_pos(self):
  1178. vt = wasm_valtype_new(WASM_I64)
  1179. gt = wasm_globaltype_new(vt, False)
  1180. v = wasm_i64_val(128)
  1181. glb = wasm_global_new(self._wasm_store, gt, v)
  1182. etrn = wasm_global_as_extern(glb)
  1183. tp = wasm_extern_type(etrn)
  1184. gt_ret = wasm_externtype_as_globaltype(tp)
  1185. self.assertEqual(
  1186. dereference(gt),
  1187. dereference(gt_ret),
  1188. )
  1189. wasm_extern_delete(etrn)
  1190. def test_wasm_extern_type_neg(self):
  1191. wasm_extern_type(create_null_pointer(wasm_extern_t))
  1192. def test_wasm_extern_kind_pos(self):
  1193. ft = wasm_functype_new_0_0()
  1194. func = wasm_func_new(self._wasm_store, ft, callback)
  1195. etrn = wasm_func_as_extern(func)
  1196. kind = wasm_extern_kind(etrn)
  1197. self.assertEqual(WASM_EXTERN_FUNC, kind)
  1198. wasm_extern_delete(etrn)
  1199. def test_wasm_extern_kind_neg(self):
  1200. wasm_extern_kind(create_null_pointer(wasm_extern_t))
  1201. @classmethod
  1202. def tearDownClass(cls):
  1203. wasm_store_delete(cls._wasm_store)
  1204. wasm_engine_delete(cls._wasm_engine)
  1205. if __name__ == "__main__":
  1206. unittest.main()