test_basic.py 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588
  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.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_ANYREF, 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_instance_delete(instance)
  900. wasm_module_delete(module)
  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_instance_delete(instance)
  935. wasm_module_delete(module)
  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()