Skip to content

Commit c8c21f8

Browse files
feat: fix remaining 2.0 tests
Signed-off-by: Henry Gressmann <[email protected]>
1 parent de85e52 commit c8c21f8

24 files changed

+183
-233
lines changed

.cargo/config.toml

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[alias]
22
version-dev="workspaces version --no-git-commit --force tinywasm*"
33
dev="run -- -l debug run"
4-
test-mvp="test --package tinywasm --test test-mvp --release -- --enable "
5-
test-2="test --package tinywasm --test test-two --release -- --enable "
6-
test-wast="test --package tinywasm --test test-wast -- --enable "
7-
test-wast-release="test --package tinywasm --test test-wast --release -- --enable "
4+
5+
test-wasm-1="test --package tinywasm --test test-wasm-1 --release"
6+
test-wasm-2="test --package tinywasm --test test-wasm-2 --release"
7+
test-wast="test --package tinywasm --test test-wast"

.github/workflows/test.yaml

+24-5
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ jobs:
5050
run: cargo +stable test --workspace && cargo +stable run --example wasm-rust all
5151

5252
- name: Run MVP testsuite
53-
run: cargo +stable test-mvp
53+
run: cargo +stable test-wasm-1
54+
55+
- name: Run 2.0 testsuite
56+
run: cargo +stable test-wasm-2
5457

5558
test-no-std:
5659
needs: build-wasm
@@ -77,8 +80,11 @@ jobs:
7780
- name: Run tests (nightly, no default features)
7881
run: cargo +nightly test --workspace --no-default-features && cargo +nightly run --example wasm-rust all
7982

80-
- name: Run MVP testsuite (nightly)
81-
run: cargo +nightly test-mvp
83+
- name: Run MVP testsuite
84+
run: cargo +nightly test-wasm-1
85+
86+
- name: Run 2.0 testsuite
87+
run: cargo +nightly test-wasm-2
8288

8389
test-m1:
8490
needs: build-wasm
@@ -99,10 +105,15 @@ jobs:
99105

100106
- name: Build (stable)
101107
run: cargo +stable build
108+
102109
- name: Run tests (stable)
103110
run: cargo +stable test
111+
104112
- name: Run MVP testsuite
105-
run: cargo +stable test-mvp
113+
run: cargo +stable test-wasm-1
114+
115+
- name: Run 2.0 testsuite
116+
run: cargo +stable test-wasm-2
106117

107118
test-armv7:
108119
needs: build-wasm
@@ -131,6 +142,14 @@ jobs:
131142
uses: houseabsolute/[email protected]
132143
with:
133144
command: test
134-
args: "-p tinywasm --test test-mvp --release -- --enable"
145+
args: "-p tinywasm --test test-wasm-1 --release"
146+
target: armv7-unknown-linux-gnueabihf
147+
toolchain: nightly
148+
149+
- name: Run 2.0 testsuite
150+
uses: houseabsolute/[email protected]
151+
with:
152+
command: test
153+
args: "-p tinywasm --test test-wasm-2 --release"
135154
target: armv7-unknown-linux-gnueabihf
136155
toolchain: nightly

crates/tinywasm/Cargo.toml

+30-3
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,44 @@ simd=[]
3939
nightly=["tinywasm-parser?/nightly"]
4040

4141
[[test]]
42-
name="test-mvp"
42+
name="test-wasm-1"
4343
harness=false
44+
test=false
4445

4546
[[test]]
46-
name="test-two"
47+
name="test-wasm-2"
4748
harness=false
49+
test=false
4850

4951
[[test]]
50-
name="test-wast"
52+
name="test-wasm-multi-memory"
53+
harness=false
54+
test=false
55+
56+
[[test]]
57+
name="test-wasm-memory64"
58+
harness=false
59+
test=false
60+
61+
[[test]]
62+
name="test-wasm-annotations"
63+
harness=false
64+
test=false
65+
66+
[[test]]
67+
name="test-wasm-extended-const"
68+
harness=false
69+
test=false
70+
71+
[[test]]
72+
name="test-wasm-simd"
5173
harness=false
74+
test=false
5275

76+
[[test]]
77+
name="test-wast"
78+
harness=false
79+
test=false
5380

5481
[[bench]]
5582
name="argon2id"

crates/tinywasm/src/interpreter/executor.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,10 @@ impl<'store, 'stack> Executor<'store, 'stack> {
666666
Ok(())
667667
}
668668
fn exec_table_init(&mut self, elem_index: u32, table_index: u32) -> Result<()> {
669+
let size: i32 = self.stack.values.pop(); // n
670+
let offset: i32 = self.stack.values.pop(); // s
671+
let dst: i32 = self.stack.values.pop(); // d
672+
669673
let elem = self
670674
.store
671675
.data
@@ -683,11 +687,7 @@ impl<'store, 'stack> Executor<'store, 'stack> {
683687
let elem_len = elem.items.as_ref().map_or(0, alloc::vec::Vec::len);
684688
let table_len = table.size();
685689

686-
let size: i32 = self.stack.values.pop(); // n
687-
let offset: i32 = self.stack.values.pop(); // s
688-
let dst: i32 = self.stack.values.pop(); // d
689-
690-
if unlikely(((size + offset) as usize > elem_len) || ((dst + size) > table_len)) {
690+
if unlikely(size < 0 || ((size + offset) as usize > elem_len) || ((dst + size) > table_len)) {
691691
return Err(Trap::TableOutOfBounds { offset: offset as usize, len: size as usize, max: elem_len }.into());
692692
}
693693

@@ -703,7 +703,7 @@ impl<'store, 'stack> Executor<'store, 'stack> {
703703
return Err(Trap::TableOutOfBounds { offset: 0, len: 0, max: 0 }.into());
704704
};
705705

706-
table.init(self.module.func_addrs(), dst, &items[offset as usize..(offset + size) as usize])
706+
table.init(dst, &items[offset as usize..(offset + size) as usize])
707707
}
708708
fn exec_table_grow(&mut self, table_index: u32) -> Result<()> {
709709
let table = self.store.get_table_mut(self.module.resolve_table_addr(table_index));

crates/tinywasm/src/store/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ impl Store {
339339
// This isn't mentioned in the spec, but the "unofficial" testsuite has a test for it:
340340
// https://github.com/WebAssembly/testsuite/blob/5a1a590603d81f40ef471abba70a90a9ae5f4627/linking.wast#L264-L276
341341
// I have NO IDEA why this is allowed, but it is.
342-
if let Err(Error::Trap(trap)) = table.init_raw(offset, &init) {
342+
if let Err(Error::Trap(trap)) = table.init(offset, &init) {
343343
return Ok((elem_addrs.into_boxed_slice(), Some(trap)));
344344
}
345345

crates/tinywasm/src/store/table.rs

+2-10
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ impl TableInstance {
133133
.expect("error initializing table: function not found. This should have been caught by the validator")
134134
}
135135

136-
// Initialize the table with the given elements
137-
pub(crate) fn init_raw(&mut self, offset: i32, init: &[TableElement]) -> Result<()> {
136+
pub(crate) fn init(&mut self, offset: i32, init: &[TableElement]) -> Result<()> {
138137
let offset = offset as usize;
139138
let end = offset.checked_add(init.len()).ok_or_else(|| {
140139
Error::Trap(crate::Trap::TableOutOfBounds { offset, len: init.len(), max: self.elements.len() })
@@ -148,12 +147,6 @@ impl TableInstance {
148147
log::debug!("table: {:?}", self.elements);
149148
Ok(())
150149
}
151-
152-
// Initialize the table with the given elements (resolves function references)
153-
pub(crate) fn init(&mut self, func_addrs: &[u32], offset: i32, init: &[TableElement]) -> Result<()> {
154-
let init = init.iter().map(|item| item.map(|addr| self.resolve_func_ref(func_addrs, addr))).collect::<Vec<_>>();
155-
self.init_raw(offset, &init)
156-
}
157150
}
158151

159152
#[derive(Debug, Clone, Copy)]
@@ -248,8 +241,7 @@ mod tests {
248241
let mut table_instance = TableInstance::new(kind, 0);
249242

250243
let init_elements = vec![TableElement::Initialized(0); 5];
251-
let func_addrs = vec![0, 1, 2, 3, 4];
252-
let result = table_instance.init(&func_addrs, 0, &init_elements);
244+
let result = table_instance.init(0, &init_elements);
253245

254246
assert!(result.is_ok(), "Initializing table with elements failed");
255247

crates/tinywasm/tests/generated/README.md

-7
This file was deleted.

crates/tinywasm/tests/generated/progress-2.0.svg

-64
This file was deleted.

crates/tinywasm/tests/generated/progress-mvp.svg

-55
This file was deleted.

0 commit comments

Comments
 (0)