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>;