Skip to content

Commit 57098f3

Browse files
WIP: snapshot tests for fully implemented select
1 parent 88fa2bb commit 57098f3

3 files changed

Lines changed: 73 additions & 20 deletions

File tree

naga/tests/in/wgsl/select.wgsl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const_assert select(0xdeadbeef, 42f, false) == 0xdeadbeef;
2+
const_assert select(0xdeadbeefu, 42, false) == 0xdeadbeefu;
3+
const_assert select(0xdeadi, 42, false) == 0xdeadi;
4+
5+
const_assert select(42f, 9001, true) == 9001;
6+
const_assert select(42f, 9001, true) == 9001f;
7+
const_assert select(42, 9001i, true) == 9001;
8+
const_assert select(42, 9001u, true) == 9001;
9+
10+
const_assert !select(false, true, false);
11+
const_assert select(false, true, true);
12+
const_assert select(true, false, false);
13+
const_assert !select(true, false, true);
14+
15+
const_assert all(select(vec2(2f), vec2(), true) == vec2(0));
16+
const_assert all(select(vec2(1), vec2(2f), false) == vec2(1));
17+
const_assert all(select(vec2(1), vec2(2f), false) == vec2(1));
18+
const_assert all(select(vec2(1), vec2(2f), vec2(false, false)) == vec2(1));
19+
const_assert all(select(vec2(1), vec2(2f), vec2(true)) == vec2(2));
20+
const_assert all(select(vec2(1), vec2(2f), vec2(true)) == vec2(2));
21+
const_assert all(select(vec2(1), vec2(2f), vec2(true, false)) == vec2(2, 1));
22+
23+
const_assert all(select(vec3(1), vec3(2f), vec3(true)) == vec3(2));
24+
const_assert all(select(vec4(1), vec4(2f), vec4(true)) == vec4(2));
25+
26+
@compute @workgroup_size(1, 1)
27+
fn main() {
28+
_ = select(1, 2f, false);
29+
30+
var x0 = vec2(1, 2);
31+
var i1: vec2<f32> = select(vec2<f32>(1., 0.), vec2<f32>(0., 1.), (x0.x < x0.y));
32+
}

naga/tests/naga/validation.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -670,26 +670,6 @@ error: Function [1] 'main' is invalid
670670
\n = Call to [0] is invalid
671671
= Requires 1 arguments, but 0 are provided
672672
673-
",
674-
),
675-
(
676-
"\
677-
@compute @workgroup_size(1, 1)
678-
fn main() {
679-
// Bad: `9001` isn't a `bool`.
680-
_ = select(1, 2, 9001);
681-
}
682-
",
683-
"\
684-
error: Entry point main at Compute is invalid
685-
┌─ wgsl:4:9
686-
687-
4 │ _ = select(1, 2, 9001);
688-
│ ^^^^^^ naga::ir::Expression [3]
689-
690-
= Expression [3] is invalid
691-
= Expected selection condition to be a boolean value, got Scalar(Scalar { kind: Sint, width: 4 })
692-
693673
",
694674
),
695675
(

naga/tests/naga/wgsl_errors.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,6 +2081,47 @@ fn select() {
20812081
)
20822082
if name.starts_with("select_")
20832083
}
2084+
2085+
let snapshots = [
2086+
(
2087+
"\
2088+
@compute @workgroup_size(1, 1)
2089+
fn main() {
2090+
// Bad: `9001` isn't a `bool`.
2091+
_ = select(1, 2, 9001);
2092+
}
2093+
",
2094+
"\
2095+
error: Expected boolean expression for condition argument of `select`, got something else
2096+
┌─ wgsl:4:9
2097+
2098+
4 │ _ = select(1, 2, 9001);
2099+
│ ^^^^^^ see msg
2100+
2101+
",
2102+
),
2103+
(
2104+
"\
2105+
@compute @workgroup_size(1, 1)
2106+
fn main() {
2107+
// Bad: `bool` and abstract int args. don't match.
2108+
_ = select(true, 1, false);
2109+
}
2110+
",
2111+
"\
2112+
error: Expected boolean expression for condition argument of `select`, got something else
2113+
┌─ wgsl:4:9
2114+
2115+
4 │ _ = select(true, 1, false);
2116+
│ ^^^^^^ see msg
2117+
2118+
",
2119+
),
2120+
];
2121+
2122+
for (input, snapshot) in snapshots {
2123+
assert_parse_err(input, snapshot);
2124+
}
20842125
}
20852126

20862127
#[test]

0 commit comments

Comments
 (0)