|
1 | 1 | use js_sys::*;
|
2 | 2 | use std::iter::FromIterator;
|
| 3 | +use wasm_bindgen::prelude::*; |
3 | 4 | use wasm_bindgen::JsCast;
|
4 | 5 | use wasm_bindgen::JsValue;
|
5 | 6 | use wasm_bindgen_test::*;
|
@@ -466,3 +467,87 @@ fn array_inheritance() {
|
466 | 467 | assert!(array.is_instance_of::<Object>());
|
467 | 468 | let _: &Object = array.as_ref();
|
468 | 469 | }
|
| 470 | + |
| 471 | +#[wasm_bindgen(module = "tests/wasm/Array.js")] |
| 472 | +extern "C" { |
| 473 | + fn populate_array(arr: JsValue, start: JsValue, len: JsValue) -> JsValue; |
| 474 | +} |
| 475 | + |
| 476 | +fn test_array_view_mut_raw<ElemT: std::cmp::PartialEq + std::fmt::Debug, ArrT>( |
| 477 | + sut: unsafe fn(*mut ElemT, usize) -> ArrT, |
| 478 | + u8ToElem: fn(u8) -> ElemT, |
| 479 | + arrToJsValue: fn(ArrT) -> JsValue, |
| 480 | +) { |
| 481 | + let start: u8 = 10; |
| 482 | + let len: usize = 32; |
| 483 | + let end: u8 = start + len as u8; |
| 484 | + let mut buffer: Vec<ElemT> = Vec::new(); |
| 485 | + buffer.reserve(len); |
| 486 | + unsafe { |
| 487 | + let array: ArrT = sut(buffer.as_mut_ptr(), len); |
| 488 | + populate_array( |
| 489 | + arrToJsValue(array), |
| 490 | + JsValue::from(start), |
| 491 | + JsValue::from(len as u32), |
| 492 | + ); |
| 493 | + buffer.set_len(len); |
| 494 | + } |
| 495 | + let expected: Vec<ElemT> = (start..end).map(u8ToElem).collect(); |
| 496 | + assert_eq!(buffer, expected) |
| 497 | +} |
| 498 | + |
| 499 | +#[wasm_bindgen_test] |
| 500 | +fn Int8Array_view_mut_raw() { |
| 501 | + fn u8Toi8_unsafe(x: u8) -> i8 { |
| 502 | + x as i8 |
| 503 | + } |
| 504 | + test_array_view_mut_raw( |
| 505 | + js_sys::Int8Array::view_mut_raw, |
| 506 | + u8Toi8_unsafe, |
| 507 | + JsValue::from, |
| 508 | + ); |
| 509 | +} |
| 510 | + |
| 511 | +#[wasm_bindgen_test] |
| 512 | +fn Int16Array_view_mut_raw() { |
| 513 | + test_array_view_mut_raw(js_sys::Int16Array::view_mut_raw, i16::from, JsValue::from); |
| 514 | +} |
| 515 | + |
| 516 | +#[wasm_bindgen_test] |
| 517 | +fn Int32Array_view_mut_raw() { |
| 518 | + test_array_view_mut_raw(js_sys::Int32Array::view_mut_raw, i32::from, JsValue::from); |
| 519 | +} |
| 520 | + |
| 521 | +#[wasm_bindgen_test] |
| 522 | +fn Uint8Array_view_mut_raw() { |
| 523 | + test_array_view_mut_raw(js_sys::Uint8Array::view_mut_raw, u8::from, JsValue::from); |
| 524 | +} |
| 525 | + |
| 526 | +#[wasm_bindgen_test] |
| 527 | +fn Uint8ClampedArray_view_mut_raw() { |
| 528 | + test_array_view_mut_raw( |
| 529 | + js_sys::Uint8ClampedArray::view_mut_raw, |
| 530 | + u8::from, |
| 531 | + JsValue::from, |
| 532 | + ); |
| 533 | +} |
| 534 | + |
| 535 | +#[wasm_bindgen_test] |
| 536 | +fn Uint16Array_view_mut_raw() { |
| 537 | + test_array_view_mut_raw(js_sys::Uint16Array::view_mut_raw, u16::from, JsValue::from); |
| 538 | +} |
| 539 | + |
| 540 | +#[wasm_bindgen_test] |
| 541 | +fn Uint32Array_view_mut_raw() { |
| 542 | + test_array_view_mut_raw(js_sys::Uint32Array::view_mut_raw, u32::from, JsValue::from); |
| 543 | +} |
| 544 | + |
| 545 | +#[wasm_bindgen_test] |
| 546 | +fn Float32Array_view_mut_raw() { |
| 547 | + test_array_view_mut_raw(js_sys::Float32Array::view_mut_raw, f32::from, JsValue::from); |
| 548 | +} |
| 549 | + |
| 550 | +#[wasm_bindgen_test] |
| 551 | +fn Float64Array_view_mut_raw() { |
| 552 | + test_array_view_mut_raw(js_sys::Float64Array::view_mut_raw, f64::from, JsValue::from); |
| 553 | +} |
0 commit comments