| // Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| // dart2wasmOptions=--extra-compiler-option=--enable-experimental-wasm-interop | |
| // ignore: import_internal_library | |
| import 'dart:_wasm'; | |
| import 'package:expect/expect.dart'; | |
| // I8x16 | |
| const _i8x16 = WasmI8x16( | |
| WasmV128.i8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), | |
| ); | |
| // I16x8 | |
| const _i16x8 = WasmI16x8(WasmV128.i16x8(10, 20, 30, 40, 50, 60, 70, 80)); | |
| // I32x4 | |
| const _i32x4 = WasmI32x4(WasmV128.i32x4(100, 200, 300, 400)); | |
| // I64x2 | |
| const _i64x2 = WasmI64x2(WasmV128.i64x2(1000, 2000)); | |
| // F32x4 | |
| const _f32x4 = WasmF32x4(WasmV128.f32x4(1.5, 2.5, 3.5, 4.5)); | |
| // F64x2 | |
| const _f64x2 = WasmF64x2(WasmV128.f64x2(1.1, 2.2)); | |
| void main() { | |
| print("Starting tests..."); | |
| testI8x16(); | |
| testI16x8(); | |
| testI32x4(); | |
| testI64x2(); | |
| testF32x4(); | |
| testF64x2(); | |
| testF64x2Literal(); | |
| print("All tests passed!"); | |
| } | |
| void testF64x2Literal() { | |
| print("Running testF64x2Literal..."); | |
| // Constant | |
| const v_const = WasmF64x2(WasmV128.f64x2(3.3, 4.4)); | |
| Expect.equals(3.3, v_const.extractLane(0).toDouble()); | |
| Expect.equals(4.4, v_const.extractLane(1).toDouble()); | |
| // Using runtime call to verify intrinsic generation for non-const arguments. | |
| final a = 3.3; | |
| final b = 4.4; | |
| final v = WasmF64x2.fromDoubles(a, b); | |
| Expect.equals(3.3, v.extractLane(0).toDouble()); | |
| Expect.equals(4.4, v.extractLane(1).toDouble()); | |
| } | |
| void testI8x16() { | |
| print("Running testI8x16..."); | |
| final v = _i8x16; | |
| Expect.equals(1, v.extractLaneSigned(0).toIntSigned()); | |
| Expect.equals(2, v.extractLaneSigned(1).toIntSigned()); | |
| Expect.equals(8, v.extractLaneSigned(7).toIntSigned()); | |
| Expect.equals(16, v.extractLaneSigned(15).toIntSigned()); | |
| } | |
| void testI16x8() { | |
| print("Running testI16x8..."); | |
| final v = _i16x8; | |
| Expect.equals(10, v.extractLaneSigned(0).toIntSigned()); | |
| Expect.equals(20, v.extractLaneSigned(1).toIntSigned()); | |
| Expect.equals(80, v.extractLaneSigned(7).toIntSigned()); | |
| } | |
| void testI32x4() { | |
| print("Running testI32x4..."); | |
| final v = _i32x4; | |
| Expect.equals(100, v.extractLane(0).toIntSigned()); | |
| Expect.equals(200, v.extractLane(1).toIntSigned()); | |
| Expect.equals(400, v.extractLane(3).toIntSigned()); | |
| } | |
| void testI64x2() { | |
| print("Running testI64x2..."); | |
| final v = _i64x2; | |
| Expect.equals(1000, v.extractLane(0).toInt()); | |
| Expect.equals(2000, v.extractLane(1).toInt()); | |
| } | |
| void testF32x4() { | |
| print("Running testF32x4..."); | |
| final v = _f32x4; | |
| Expect.equals(1.5, v.extractLane(0).toDouble()); | |
| Expect.equals(2.5, v.extractLane(1).toDouble()); | |
| Expect.equals(4.5, v.extractLane(3).toDouble()); | |
| } | |
| void testF64x2() { | |
| print("Running testF64x2..."); | |
| final v = _f64x2; | |
| Expect.equals(1.1, v.extractLane(0).toDouble()); | |
| Expect.equals(2.2, v.extractLane(1).toDouble()); | |
| } |