BoundArrayAccessors: Add more tests
Bug: tint:521
Change-Id: I0a9ea7f487b052d1ee6ffa5be079d18633acc72c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/42844
Commit-Queue: Austin Eng <enga@chromium.org>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/transform/bound_array_accessors_test.cc b/src/transform/bound_array_accessors_test.cc
index 58def8f..c5bef53 100644
--- a/src/transform/bound_array_accessors_test.cc
+++ b/src/transform/bound_array_accessors_test.cc
@@ -218,6 +218,79 @@
EXPECT_EQ(expect, str(got));
}
+TEST_F(BoundArrayAccessorsTest, Vector_Swizzle_Idx_Scalar) {
+ auto* src = R"(
+var a : vec3<f32>;
+
+fn f() -> void {
+ var b : f32 = a.xy[2];
+}
+)";
+
+ auto* expect = R"(
+var a : vec3<f32>;
+
+fn f() -> void {
+ var b : f32 = a.xy[1];
+}
+)";
+
+ auto got = Transform<BoundArrayAccessors>(src);
+
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(BoundArrayAccessorsTest, Vector_Swizzle_Idx_Var) {
+ auto* src = R"(
+var a : vec3<f32>;
+
+var c : u32;
+
+fn f() -> void {
+ var b : f32 = a.xy[c];
+}
+)";
+
+ auto* expect = R"(
+var a : vec3<f32>;
+
+var c : u32;
+
+fn f() -> void {
+ var b : f32 = a.xy[min(u32(c), 1u)];
+}
+)";
+
+ auto got = Transform<BoundArrayAccessors>(src);
+
+ EXPECT_EQ(expect, str(got));
+}
+TEST_F(BoundArrayAccessorsTest, Vector_Swizzle_Idx_Expr) {
+ auto* src = R"(
+var a : vec3<f32>;
+
+var c : u32;
+
+fn f() -> void {
+ var b : f32 = a.xy[c + 2 - 3];
+}
+)";
+
+ auto* expect = R"(
+var a : vec3<f32>;
+
+var c : u32;
+
+fn f() -> void {
+ var b : f32 = a.xy[min(u32(((c + 2) - 3)), 1u)];
+}
+)";
+
+ auto got = Transform<BoundArrayAccessors>(src);
+
+ EXPECT_EQ(expect, str(got));
+}
+
TEST_F(BoundArrayAccessorsTest, Vector_Idx_Negative) {
auto* src = R"(
var a : vec3<f32>;