GLSL: add .expected.glsl files for all tests.

Bug: tint:1301
Change-Id: Id3a591a2fa0dfdb112046d5c57defbae07483e0d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/69480
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..034c499
--- /dev/null
+++ b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat3 a = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  mat3 b = mat3(vec3(-1.0f, -2.0f, -3.0f), vec3(-4.0f, -5.0f, -6.0f), vec3(-7.0f, -8.0f, -9.0f));
+  mat3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..a11adca
--- /dev/null
+++ b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f + 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..4390508
--- /dev/null
+++ b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 + 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..5e1db81
--- /dev/null
+++ b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u + 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..0655ac2
--- /dev/null
+++ b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..ea0ed84
--- /dev/null
+++ b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..0fe0f75
--- /dev/null
+++ b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e7a27305
--- /dev/null
+++ b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a + 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..7882f3b
--- /dev/null
+++ b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a + 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..160e65c
--- /dev/null
+++ b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a + 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..7bd2c34
--- /dev/null
+++ b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..0b48495
--- /dev/null
+++ b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..bff24ce
--- /dev/null
+++ b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..ea9a02a
--- /dev/null
+++ b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 & 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..f46f9cd
--- /dev/null
+++ b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u & 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..d03945b
--- /dev/null
+++ b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a & b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..1fc4c7f
--- /dev/null
+++ b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a & b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..519f411
--- /dev/null
+++ b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 | 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..52ae9c0
--- /dev/null
+++ b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u | 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..a16e26d
--- /dev/null
+++ b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a | b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..887fc52
--- /dev/null
+++ b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a | b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..05cd2f1
--- /dev/null
+++ b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 ^ 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..284867d
--- /dev/null
+++ b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u ^ 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..8b212ba
--- /dev/null
+++ b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a ^ b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..59b5058
--- /dev/null
+++ b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a ^ b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..7db6fa7
--- /dev/null
+++ b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f / 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..f0efa17
--- /dev/null
+++ b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 / 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..d5d5366
--- /dev/null
+++ b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u / 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..6512ba3
--- /dev/null
+++ b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..08c20db
--- /dev/null
+++ b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..1ee9726
--- /dev/null
+++ b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..28eea80
--- /dev/null
+++ b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a / 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..126af32
--- /dev/null
+++ b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a / 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..6442c2c
--- /dev/null
+++ b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a / 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..4c1e415
--- /dev/null
+++ b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..18991b5
--- /dev/null
+++ b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..8b8ddcb
--- /dev/null
+++ b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..11e2270
--- /dev/null
+++ b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 << 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..8c7242c
--- /dev/null
+++ b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u << 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..71fa7c5
--- /dev/null
+++ b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  ivec3 r = (a << b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e7cf54f
--- /dev/null
+++ b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a << b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e0fd1be
--- /dev/null
+++ b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,22 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f % 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..5c42789
--- /dev/null
+++ b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 % 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..0015a14
--- /dev/null
+++ b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u % 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..602ca02
--- /dev/null
+++ b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,24 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a % b);
+  return;
+}
+void main() {
+  f();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump 3-component vector of float' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion)
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..7fa186b
--- /dev/null
+++ b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a % b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..101e545
--- /dev/null
+++ b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a % b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..36ae96a
--- /dev/null
+++ b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat2x4 a = mat2x4(vec4(1.0f, 2.0f, 3.0f, 4.0f), vec4(5.0f, 6.0f, 7.0f, 8.0f));
+  mat4x2 b = mat4x2(vec2(-1.0f, -2.0f), vec2(-3.0f, -4.0f), vec2(-5.0f, -6.0f), vec2(-7.0f, -8.0f));
+  mat4 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..79f4870
--- /dev/null
+++ b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat3x2 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec2 x = (data.matrix * data.vector);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..924136f
--- /dev/null
+++ b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat3 a = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  mat3 b = mat3(vec3(-1.0f, -2.0f, -3.0f), vec3(-4.0f, -5.0f, -6.0f), vec3(-7.0f, -8.0f, -9.0f));
+  mat3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..ba963d9
--- /dev/null
+++ b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat3 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec3 x = (data.matrix * data.vector);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..2596862
--- /dev/null
+++ b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat4x2 a = mat4x2(vec2(-1.0f, -2.0f), vec2(-3.0f, -4.0f), vec2(-5.0f, -6.0f), vec2(-7.0f, -8.0f));
+  mat2x4 b = mat2x4(vec4(1.0f, 2.0f, 3.0f, 4.0f), vec4(5.0f, 6.0f, 7.0f, 8.0f));
+  mat2 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..1629327
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f * 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..917ae68
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 * 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..22b2997
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u * 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..9c4bb5b
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..b3e5917
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..2d2fbf7
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..6103644
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat3 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec3 x = (data.vector * data.matrix);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..2b7ad6d
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat4x3 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec4 x = (data.vector * data.matrix);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..68aadcc
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a * 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..7e33049
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a * 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..9c19c28
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a * 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..fdfb8b4
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..bd7f2b7
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..20ed770
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..040542f
--- /dev/null
+++ b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 >> 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..7eeeb71
--- /dev/null
+++ b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u >> 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..eb2f2ed
--- /dev/null
+++ b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  ivec3 r = (a >> b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e62bc29
--- /dev/null
+++ b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a >> b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..358b664
--- /dev/null
+++ b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat3 a = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  mat3 b = mat3(vec3(-1.0f, -2.0f, -3.0f), vec3(-4.0f, -5.0f, -6.0f), vec3(-7.0f, -8.0f, -9.0f));
+  mat3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..116ab47
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f - 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..01bf2df
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 - 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..682d1bf
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u - 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..67f29c6
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..66d19e2
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e23b5c6
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..b2a2318
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a - 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..225c732
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a - 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..23e6c8a
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a - 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..88ca974
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..13aca0a8
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..5495326
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+