File: wasmer_example.py

package info (click to toggle)
node-sixel 0.16.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 40,936 kB
  • sloc: javascript: 1,861; cpp: 638; sh: 105; python: 26; makefile: 14
file content (54 lines) | stat: -rw-r--r-- 1,415 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python3

# Rudimentary test with wasmer-python
#
# Install with:
# - pip install wasmer==1.0.0
# - pip install wasmer_compiler_llvm==1.0.0
#
# Note: wasmer-python 1.0 does not support the bulk-memory feature,
#       thus compile wasm file without -mbulk-memory flag


from wasmer import engine, Store, Module, Instance, ImportObject, Function
from wasmer_compiler_llvm import Compiler


# some test data:
# - broken attributes --> mode 1
# - 2 lines with width 7
# - pending line with current_width 2
TEST = b'"1;1;7ABCDEFG$-ABCDEFG$-AB'


def handle_band(width: int) -> int:
    print('got a line of:', width)
    assert width == 7
    return 0

def mode_parsed(mode: int) -> int:
    print('mode selected:', mode)
    assert mode == 1
    return 0

# load wasm engine
store = Store(engine.JIT(Compiler))
module = Module(store, open('./decoder.wasm', 'rb').read())
import_object = ImportObject()
import_object.register("env", {
    "handle_band": Function(store, handle_band),
    'mode_parsed': Function(store, mode_parsed),
})
instance = Instance(module, import_object)
mem = instance.exports.memory.int8_view()
chunk_address = instance.exports.get_chunk_address()

# load test data
mem[chunk_address:] = TEST

# run
instance.exports.init(-1, 0, 256, 1)
instance.exports.decode(0, len(TEST))

print('current_width:', instance.exports.current_width())
assert instance.exports.current_width() == 2