MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / div_plus_load_reported_right

Function div_plus_load_reported_right

tests/all/traps.rs:1211–1302  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1209
1210#[test]
1211fn div_plus_load_reported_right() -> Result<()> {
1212 let engine = Engine::default();
1213 let mut store = Store::new(&engine, ());
1214 let module = Module::new(
1215 &engine,
1216 r#"
1217 (module
1218 (memory (export "memory") 1)
1219 (func (export "i32.div_s") (param i32 i32) (result i32)
1220 (i32.div_s (local.get 0) (i32.load (local.get 1))))
1221 (func (export "i32.div_u") (param i32 i32) (result i32)
1222 (i32.div_u (local.get 0) (i32.load (local.get 1))))
1223 (func (export "i32.rem_s") (param i32 i32) (result i32)
1224 (i32.rem_s (local.get 0) (i32.load (local.get 1))))
1225 (func (export "i32.rem_u") (param i32 i32) (result i32)
1226 (i32.rem_u (local.get 0) (i32.load (local.get 1))))
1227 )
1228 "#,
1229 )?;
1230 let instance = Instance::new(&mut store, &module, &[])?;
1231 let memory = instance.get_memory(&mut store, "memory").unwrap();
1232 let i32_div_s = instance.get_typed_func::<(i32, i32), i32>(&mut store, "i32.div_s")?;
1233 let i32_div_u = instance.get_typed_func::<(u32, u32), u32>(&mut store, "i32.div_u")?;
1234 let i32_rem_s = instance.get_typed_func::<(i32, i32), i32>(&mut store, "i32.rem_s")?;
1235 let i32_rem_u = instance.get_typed_func::<(u32, u32), u32>(&mut store, "i32.rem_u")?;
1236
1237 memory.write(&mut store, 0, &1i32.to_le_bytes()).unwrap();
1238 memory.write(&mut store, 4, &0i32.to_le_bytes()).unwrap();
1239 memory.write(&mut store, 8, &(-1i32).to_le_bytes()).unwrap();
1240
1241 assert_eq!(i32_div_s.call(&mut store, (100, 0))?, 100);
1242 assert_eq!(i32_div_u.call(&mut store, (101, 0))?, 101);
1243 assert_eq!(i32_rem_s.call(&mut store, (102, 0))?, 0);
1244 assert_eq!(i32_rem_u.call(&mut store, (103, 0))?, 0);
1245
1246 assert_trap(
1247 i32_div_s.call(&mut store, (100, 4)),
1248 Trap::IntegerDivisionByZero,
1249 );
1250 assert_trap(
1251 i32_div_u.call(&mut store, (100, 4)),
1252 Trap::IntegerDivisionByZero,
1253 );
1254 assert_trap(
1255 i32_rem_s.call(&mut store, (100, 4)),
1256 Trap::IntegerDivisionByZero,
1257 );
1258 assert_trap(
1259 i32_rem_u.call(&mut store, (100, 4)),
1260 Trap::IntegerDivisionByZero,
1261 );
1262
1263 assert_trap(
1264 i32_div_s.call(&mut store, (i32::MIN, 8)),
1265 Trap::IntegerOverflow,
1266 );
1267 assert_eq!(i32_rem_s.call(&mut store, (i32::MIN, 8))?, 0);
1268

Callers

nothing calls this directly

Calls 7

assert_trapFunction · 0.85
OkFunction · 0.85
newFunction · 0.50
unwrapMethod · 0.45
get_memoryMethod · 0.45
writeMethod · 0.45
callMethod · 0.45

Tested by

no test coverage detected