Coverage for tests/codegen/test_scalars.py: 100%
84 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-20 16:25 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-20 16:25 +0000
1from . import bindgen
2import math
3from wasmtime import Store
5module = """
6 (component
7 (import "host" (instance $i
8 (export "roundtrip-u8" (func (param "a" u8) (result u8)))
9 (export "roundtrip-s8" (func (param "a" s8) (result s8)))
10 (export "roundtrip-u16" (func (param "a" u16) (result u16)))
11 (export "roundtrip-s16" (func (param "a" s16) (result s16)))
12 (export "roundtrip-u32" (func (param "a" u32) (result u32)))
13 (export "roundtrip-s32" (func (param "a" s32) (result s32)))
14 (export "roundtrip-u64" (func (param "a" u64) (result u64)))
15 (export "roundtrip-s64" (func (param "a" s64) (result s64)))
16 (export "roundtrip-float32" (func (param "a" float32) (result float32)))
17 (export "roundtrip-float64" (func (param "a" float64) (result float64)))
18 (export "roundtrip-char" (func (param "a" char) (result char)))
19 (export "roundtrip-bool" (func (param "a" bool) (result bool)))
20 ))
21 (core module $m
22 (import "" "roundtrip-u8" (func $u8 (param i32) (result i32)))
23 (import "" "roundtrip-s8" (func $s8 (param i32) (result i32)))
24 (import "" "roundtrip-u16" (func $u16 (param i32) (result i32)))
25 (import "" "roundtrip-s16" (func $s16 (param i32) (result i32)))
26 (import "" "roundtrip-u32" (func $u32 (param i32) (result i32)))
27 (import "" "roundtrip-s32" (func $s32 (param i32) (result i32)))
28 (import "" "roundtrip-u64" (func $u64 (param i64) (result i64)))
29 (import "" "roundtrip-s64" (func $s64 (param i64) (result i64)))
31 (import "" "roundtrip-float32" (func $float32 (param f32) (result f32)))
32 (import "" "roundtrip-float64" (func $float64 (param f64) (result f64)))
34 (import "" "roundtrip-char" (func $char (param i32) (result i32)))
35 (import "" "roundtrip-bool" (func $bool (param i32) (result i32)))
37 (func (export "roundtrip-u8") (param i32) (result i32)
38 local.get 0 call $u8)
39 (func (export "roundtrip-s8") (param i32) (result i32)
40 local.get 0 call $s8)
41 (func (export "roundtrip-u16") (param i32) (result i32)
42 local.get 0 call $u16)
43 (func (export "roundtrip-s16") (param i32) (result i32)
44 local.get 0 call $s16)
45 (func (export "roundtrip-u32") (param i32) (result i32)
46 local.get 0 call $u32)
47 (func (export "roundtrip-s32") (param i32) (result i32)
48 local.get 0 call $s32)
49 (func (export "roundtrip-u64") (param i64) (result i64)
50 local.get 0 call $u64)
51 (func (export "roundtrip-s64") (param i64) (result i64)
52 local.get 0 call $s64)
54 (func (export "roundtrip-float32") (param f32) (result f32)
55 local.get 0 call $float32)
56 (func (export "roundtrip-float64") (param f64) (result f64)
57 local.get 0 call $float64)
59 (func (export "roundtrip-char") (param i32) (result i32)
60 local.get 0 call $char)
61 (func (export "roundtrip-bool") (param i32) (result i32)
62 local.get 0 call $bool)
63 )
64 (core func $u8 (canon lower (func $i "roundtrip-u8")))
65 (core func $s8 (canon lower (func $i "roundtrip-s8")))
66 (core func $u16 (canon lower (func $i "roundtrip-u16")))
67 (core func $s16 (canon lower (func $i "roundtrip-s16")))
68 (core func $u32 (canon lower (func $i "roundtrip-u32")))
69 (core func $s32 (canon lower (func $i "roundtrip-s32")))
70 (core func $u64 (canon lower (func $i "roundtrip-u64")))
71 (core func $s64 (canon lower (func $i "roundtrip-s64")))
72 (core func $float32 (canon lower (func $i "roundtrip-float32")))
73 (core func $float64 (canon lower (func $i "roundtrip-float64")))
74 (core func $char (canon lower (func $i "roundtrip-char")))
75 (core func $bool (canon lower (func $i "roundtrip-bool")))
77 (core instance $i (instantiate $m
78 (with "" (instance
79 (export "roundtrip-u8" (func $u8))
80 (export "roundtrip-s8" (func $s8))
81 (export "roundtrip-u16" (func $u16))
82 (export "roundtrip-s16" (func $s16))
83 (export "roundtrip-u32" (func $u32))
84 (export "roundtrip-s32" (func $s32))
85 (export "roundtrip-u64" (func $u64))
86 (export "roundtrip-s64" (func $s64))
87 (export "roundtrip-float32" (func $float32))
88 (export "roundtrip-float64" (func $float64))
89 (export "roundtrip-char" (func $char))
90 (export "roundtrip-bool" (func $bool))
91 ))
92 ))
94 (func (export "roundtrip-u8") (param "a" u8) (result u8)
95 (canon lift (core func $i "roundtrip-u8")))
96 (func (export "roundtrip-s8") (param "a" s8) (result s8)
97 (canon lift (core func $i "roundtrip-s8")))
98 (func (export "roundtrip-u16") (param "a" u16) (result u16)
99 (canon lift (core func $i "roundtrip-u16")))
100 (func (export "roundtrip-s16") (param "a" s16) (result s16)
101 (canon lift (core func $i "roundtrip-s16")))
102 (func (export "roundtrip-u32") (param "a" u32) (result u32)
103 (canon lift (core func $i "roundtrip-u32")))
104 (func (export "roundtrip-s32") (param "a" s32) (result s32)
105 (canon lift (core func $i "roundtrip-s32")))
106 (func (export "roundtrip-u64") (param "a" u64) (result u64)
107 (canon lift (core func $i "roundtrip-u64")))
108 (func (export "roundtrip-s64") (param "a" s64) (result s64)
109 (canon lift (core func $i "roundtrip-s64")))
110 (func (export "roundtrip-float32") (param "a" float32) (result float32)
111 (canon lift (core func $i "roundtrip-float32")))
112 (func (export "roundtrip-float64") (param "a" float64) (result float64)
113 (canon lift (core func $i "roundtrip-float64")))
114 (func (export "roundtrip-char") (param "a" char) (result char)
115 (canon lift (core func $i "roundtrip-char")))
116 (func (export "roundtrip-bool") (param "a" bool) (result bool)
117 (canon lift (core func $i "roundtrip-bool")))
118 )
119"""
120bindgen('scalars', module)
122from .generated.scalars import Root, RootImports, imports
125class Host(imports.HostHost):
126 def roundtrip_u8(self, val: int) -> int:
127 assert val >= 0
128 assert val <= (1 << 8) - 1
129 return val
131 def roundtrip_s8(self, val: int) -> int:
132 assert val >= -(1 << (8 - 1))
133 assert val <= (1 << (8 - 1)) - 1
134 return val
136 def roundtrip_u16(self, val: int) -> int:
137 assert val >= 0
138 assert val <= (1 << 16) - 1
139 return val
141 def roundtrip_s16(self, val: int) -> int:
142 assert val >= -(1 << (16 - 1))
143 assert val <= (1 << (16 - 1)) - 1
144 return val
146 def roundtrip_u32(self, val: int) -> int:
147 assert val >= 0
148 assert val <= (1 << 32) - 1
149 return val
151 def roundtrip_s32(self, val: int) -> int:
152 assert val >= -(1 << (32 - 1))
153 assert val <= (1 << (32 - 1)) - 1
154 return val
156 def roundtrip_u64(self, val: int) -> int:
157 assert val >= 0
158 assert val <= (1 << 64) - 1
159 return val
161 def roundtrip_s64(self, val: int) -> int:
162 assert val >= -(1 << (64 - 1))
163 assert val <= (1 << (64 - 1)) - 1
164 return val
166 def roundtrip_float32(self, a: float) -> float:
167 return a
169 def roundtrip_float64(self, a: float) -> float:
170 return a
172 def roundtrip_char(self, a: str) -> str:
173 return a
175 def roundtrip_bool(self, a: bool) -> bool:
176 return a
179def test_bindings():
180 store = Store()
181 bindings = Root(store, RootImports(host=Host()))
183 assert bindings.roundtrip_u8(store, 0) == 0
184 assert bindings.roundtrip_u8(store, (1 << 8) - 1) == (1 << 8) - 1
185 assert bindings.roundtrip_u16(store, 0) == 0
186 assert bindings.roundtrip_u16(store, (1 << 16) - 1) == (1 << 16) - 1
187 assert bindings.roundtrip_u32(store, 0) == 0
188 assert bindings.roundtrip_u32(store, (1 << 32) - 1) == (1 << 32) - 1
189 assert bindings.roundtrip_u64(store, 0) == 0
190 assert bindings.roundtrip_u64(store, (1 << 64) - 1) == (1 << 64) - 1
192 assert bindings.roundtrip_s8(store, 0) == 0
193 assert bindings.roundtrip_s8(store, (1 << (8 - 1)) - 1) == (1 << (8 - 1)) - 1
194 assert bindings.roundtrip_s8(store, -(1 << (8 - 1))) == -(1 << (8 - 1))
195 assert bindings.roundtrip_s16(store, 0) == 0
196 assert bindings.roundtrip_s16(store, (1 << (16 - 1)) - 1) == (1 << (16 - 1)) - 1
197 assert bindings.roundtrip_s16(store, -(1 << (16 - 1))) == -(1 << (16 - 1))
198 assert bindings.roundtrip_s32(store, 0) == 0
199 assert bindings.roundtrip_s32(store, (1 << (32 - 1)) - 1) == (1 << (32 - 1)) - 1
200 assert bindings.roundtrip_s32(store, -(1 << (32 - 1))) == -(1 << (32 - 1))
201 assert bindings.roundtrip_s64(store, 0) == 0
202 assert bindings.roundtrip_s64(store, (1 << (64 - 1)) - 1) == (1 << (64 - 1)) - 1
203 assert bindings.roundtrip_s64(store, -(1 << (64 - 1))) == -(1 << (64 - 1))
205 inf = float('inf')
206 assert bindings.roundtrip_float32(store, 1.0) == 1.0
207 assert bindings.roundtrip_float32(store, inf) == inf
208 assert bindings.roundtrip_float32(store, -inf) == -inf
209 assert math.isnan(bindings.roundtrip_float32(store, float('nan')))
211 assert bindings.roundtrip_float64(store, 1.0) == 1.0
212 assert bindings.roundtrip_float64(store, inf) == inf
213 assert bindings.roundtrip_float64(store, -inf) == -inf
214 assert math.isnan(bindings.roundtrip_float64(store, float('nan')))
216 assert bindings.roundtrip_char(store, 'a') == 'a'
217 assert bindings.roundtrip_char(store, ' ') == ' '
218 assert bindings.roundtrip_char(store, '🚩') == '🚩'
220 assert bindings.roundtrip_bool(store, True)
221 assert not bindings.roundtrip_bool(store, False)