| ... | ... | @@ -3,7 +3,6 @@ const builtin = @import("builtin"); |
| 3 | 3 | const mem = std.mem; |
| 4 | 4 | const math = std.math; |
| 5 | 5 | const expect = std.testing.expect; |
| 6 | | const Vector = std.meta.Vector; |
| 7 | 6 | |
| 8 | 7 | test "implicit cast vector to array - bool" { |
| 9 | 8 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| ... | ... | @@ -14,7 +13,7 @@ test "implicit cast vector to array - bool" { |
| 14 | 13 | |
| 15 | 14 | const S = struct { |
| 16 | 15 | fn doTheTest() !void { |
| 17 | | const a: Vector(4, bool) = [_]bool{ true, false, true, false }; |
| 16 | const a: @Vector(4, bool) = [_]bool{ true, false, true, false }; |
| 18 | 17 | const result_array: [4]bool = a; |
| 19 | 18 | try expect(mem.eql(bool, &result_array, &[4]bool{ true, false, true, false })); |
| 20 | 19 | } |
| ... | ... | @@ -32,12 +31,12 @@ test "vector wrap operators" { |
| 32 | 31 | |
| 33 | 32 | const S = struct { |
| 34 | 33 | fn doTheTest() !void { |
| 35 | | var v: Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 }; |
| 36 | | var x: Vector(4, i32) = [4]i32{ 1, 2147483647, 3, 4 }; |
| 34 | var v: @Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 }; |
| 35 | var x: @Vector(4, i32) = [4]i32{ 1, 2147483647, 3, 4 }; |
| 37 | 36 | try expect(mem.eql(i32, &@as([4]i32, v +% x), &[4]i32{ -2147483648, 2147483645, 33, 44 })); |
| 38 | 37 | try expect(mem.eql(i32, &@as([4]i32, v -% x), &[4]i32{ 2147483646, 2147483647, 27, 36 })); |
| 39 | 38 | try expect(mem.eql(i32, &@as([4]i32, v *% x), &[4]i32{ 2147483647, 2, 90, 160 })); |
| 40 | | var z: Vector(4, i32) = [4]i32{ 1, 2, 3, -2147483648 }; |
| 39 | var z: @Vector(4, i32) = [4]i32{ 1, 2, 3, -2147483648 }; |
| 41 | 40 | try expect(mem.eql(i32, &@as([4]i32, -%z), &[4]i32{ -1, -2, -3, -2147483648 })); |
| 42 | 41 | } |
| 43 | 42 | }; |
| ... | ... | @@ -54,8 +53,8 @@ test "vector bin compares with mem.eql" { |
| 54 | 53 | |
| 55 | 54 | const S = struct { |
| 56 | 55 | fn doTheTest() !void { |
| 57 | | var v: Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 }; |
| 58 | | var x: Vector(4, i32) = [4]i32{ 1, 2147483647, 30, 4 }; |
| 56 | var v: @Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 }; |
| 57 | var x: @Vector(4, i32) = [4]i32{ 1, 2147483647, 30, 4 }; |
| 59 | 58 | try expect(mem.eql(bool, &@as([4]bool, v == x), &[4]bool{ false, false, true, false })); |
| 60 | 59 | try expect(mem.eql(bool, &@as([4]bool, v != x), &[4]bool{ true, true, false, true })); |
| 61 | 60 | try expect(mem.eql(bool, &@as([4]bool, v < x), &[4]bool{ false, true, false, false })); |
| ... | ... | @@ -77,8 +76,8 @@ test "vector int operators" { |
| 77 | 76 | |
| 78 | 77 | const S = struct { |
| 79 | 78 | fn doTheTest() !void { |
| 80 | | var v: Vector(4, i32) = [4]i32{ 10, 20, 30, 40 }; |
| 81 | | var x: Vector(4, i32) = [4]i32{ 1, 2, 3, 4 }; |
| 79 | var v: @Vector(4, i32) = [4]i32{ 10, 20, 30, 40 }; |
| 80 | var x: @Vector(4, i32) = [4]i32{ 1, 2, 3, 4 }; |
| 82 | 81 | try expect(mem.eql(i32, &@as([4]i32, v + x), &[4]i32{ 11, 22, 33, 44 })); |
| 83 | 82 | try expect(mem.eql(i32, &@as([4]i32, v - x), &[4]i32{ 9, 18, 27, 36 })); |
| 84 | 83 | try expect(mem.eql(i32, &@as([4]i32, v * x), &[4]i32{ 10, 40, 90, 160 })); |
| ... | ... | @@ -98,8 +97,8 @@ test "vector float operators" { |
| 98 | 97 | |
| 99 | 98 | const S = struct { |
| 100 | 99 | fn doTheTest() !void { |
| 101 | | var v: Vector(4, f32) = [4]f32{ 10, 20, 30, 40 }; |
| 102 | | var x: Vector(4, f32) = [4]f32{ 1, 2, 3, 4 }; |
| 100 | var v: @Vector(4, f32) = [4]f32{ 10, 20, 30, 40 }; |
| 101 | var x: @Vector(4, f32) = [4]f32{ 1, 2, 3, 4 }; |
| 103 | 102 | try expect(mem.eql(f32, &@as([4]f32, v + x), &[4]f32{ 11, 22, 33, 44 })); |
| 104 | 103 | try expect(mem.eql(f32, &@as([4]f32, v - x), &[4]f32{ 9, 18, 27, 36 })); |
| 105 | 104 | try expect(mem.eql(f32, &@as([4]f32, v * x), &[4]f32{ 10, 40, 90, 160 })); |
| ... | ... | @@ -119,8 +118,8 @@ test "vector bit operators" { |
| 119 | 118 | |
| 120 | 119 | const S = struct { |
| 121 | 120 | fn doTheTest() !void { |
| 122 | | var v: Vector(4, u8) = [4]u8{ 0b10101010, 0b10101010, 0b10101010, 0b10101010 }; |
| 123 | | var x: Vector(4, u8) = [4]u8{ 0b11110000, 0b00001111, 0b10101010, 0b01010101 }; |
| 121 | var v: @Vector(4, u8) = [4]u8{ 0b10101010, 0b10101010, 0b10101010, 0b10101010 }; |
| 122 | var x: @Vector(4, u8) = [4]u8{ 0b11110000, 0b00001111, 0b10101010, 0b01010101 }; |
| 124 | 123 | try expect(mem.eql(u8, &@as([4]u8, v ^ x), &[4]u8{ 0b01011010, 0b10100101, 0b00000000, 0b11111111 })); |
| 125 | 124 | try expect(mem.eql(u8, &@as([4]u8, v | x), &[4]u8{ 0b11111010, 0b10101111, 0b10101010, 0b11111111 })); |
| 126 | 125 | try expect(mem.eql(u8, &@as([4]u8, v & x), &[4]u8{ 0b10100000, 0b00001010, 0b10101010, 0b00000000 })); |
| ... | ... | @@ -139,7 +138,7 @@ test "implicit cast vector to array" { |
| 139 | 138 | |
| 140 | 139 | const S = struct { |
| 141 | 140 | fn doTheTest() !void { |
| 142 | | var a: Vector(4, i32) = [_]i32{ 1, 2, 3, 4 }; |
| 141 | var a: @Vector(4, i32) = [_]i32{ 1, 2, 3, 4 }; |
| 143 | 142 | var result_array: [4]i32 = a; |
| 144 | 143 | result_array = a; |
| 145 | 144 | try expect(mem.eql(i32, &result_array, &[4]i32{ 1, 2, 3, 4 })); |
| ... | ... | @@ -160,7 +159,7 @@ test "array to vector" { |
| 160 | 159 | fn doTheTest() !void { |
| 161 | 160 | var foo: f32 = 3.14; |
| 162 | 161 | var arr = [4]f32{ foo, 1.5, 0.0, 0.0 }; |
| 163 | | var vec: Vector(4, f32) = arr; |
| 162 | var vec: @Vector(4, f32) = arr; |
| 164 | 163 | try expect(mem.eql(f32, &@as([4]f32, vec), &arr)); |
| 165 | 164 | } |
| 166 | 165 | }; |
| ... | ... | @@ -178,22 +177,22 @@ test "vector casts of sizes not divisible by 8" { |
| 178 | 177 | const S = struct { |
| 179 | 178 | fn doTheTest() !void { |
| 180 | 179 | { |
| 181 | | var v: Vector(4, u3) = [4]u3{ 5, 2, 3, 0 }; |
| 180 | var v: @Vector(4, u3) = [4]u3{ 5, 2, 3, 0 }; |
| 182 | 181 | var x: [4]u3 = v; |
| 183 | 182 | try expect(mem.eql(u3, &x, &@as([4]u3, v))); |
| 184 | 183 | } |
| 185 | 184 | { |
| 186 | | var v: Vector(4, u2) = [4]u2{ 1, 2, 3, 0 }; |
| 185 | var v: @Vector(4, u2) = [4]u2{ 1, 2, 3, 0 }; |
| 187 | 186 | var x: [4]u2 = v; |
| 188 | 187 | try expect(mem.eql(u2, &x, &@as([4]u2, v))); |
| 189 | 188 | } |
| 190 | 189 | { |
| 191 | | var v: Vector(4, u1) = [4]u1{ 1, 0, 1, 0 }; |
| 190 | var v: @Vector(4, u1) = [4]u1{ 1, 0, 1, 0 }; |
| 192 | 191 | var x: [4]u1 = v; |
| 193 | 192 | try expect(mem.eql(u1, &x, &@as([4]u1, v))); |
| 194 | 193 | } |
| 195 | 194 | { |
| 196 | | var v: Vector(4, bool) = [4]bool{ false, false, true, false }; |
| 195 | var v: @Vector(4, bool) = [4]bool{ false, false, true, false }; |
| 197 | 196 | var x: [4]bool = v; |
| 198 | 197 | try expect(mem.eql(bool, &x, &@as([4]bool, v))); |
| 199 | 198 | } |
| ... | ... | @@ -214,7 +213,7 @@ test "vector @splat" { |
| 214 | 213 | fn testForT(comptime N: comptime_int, v: anytype) !void { |
| 215 | 214 | const T = @TypeOf(v); |
| 216 | 215 | var vec = @splat(N, v); |
| 217 | | try expect(Vector(N, T) == @TypeOf(vec)); |
| 216 | try expect(@Vector(N, T) == @TypeOf(vec)); |
| 218 | 217 | var as_array = @as([N]T, vec); |
| 219 | 218 | for (as_array) |elem| try expect(v == elem); |
| 220 | 219 | } |
| ... | ... | @@ -253,7 +252,7 @@ test "load vector elements via comptime index" { |
| 253 | 252 | |
| 254 | 253 | const S = struct { |
| 255 | 254 | fn doTheTest() !void { |
| 256 | | var v: Vector(4, i32) = [_]i32{ 1, 2, 3, undefined }; |
| 255 | var v: @Vector(4, i32) = [_]i32{ 1, 2, 3, undefined }; |
| 257 | 256 | try expect(v[0] == 1); |
| 258 | 257 | try expect(v[1] == 2); |
| 259 | 258 | try expect(loadv(&v[2]) == 3); |
| ... | ... | @@ -276,7 +275,7 @@ test "store vector elements via comptime index" { |
| 276 | 275 | |
| 277 | 276 | const S = struct { |
| 278 | 277 | fn doTheTest() !void { |
| 279 | | var v: Vector(4, i32) = [_]i32{ 1, 5, 3, undefined }; |
| 278 | var v: @Vector(4, i32) = [_]i32{ 1, 5, 3, undefined }; |
| 280 | 279 | |
| 281 | 280 | v[2] = 42; |
| 282 | 281 | try expect(v[1] == 5); |
| ... | ... | @@ -305,7 +304,7 @@ test "load vector elements via runtime index" { |
| 305 | 304 | |
| 306 | 305 | const S = struct { |
| 307 | 306 | fn doTheTest() !void { |
| 308 | | var v: Vector(4, i32) = [_]i32{ 1, 2, 3, undefined }; |
| 307 | var v: @Vector(4, i32) = [_]i32{ 1, 2, 3, undefined }; |
| 309 | 308 | var i: u32 = 0; |
| 310 | 309 | try expect(v[i] == 1); |
| 311 | 310 | i += 1; |
| ... | ... | @@ -328,7 +327,7 @@ test "store vector elements via runtime index" { |
| 328 | 327 | |
| 329 | 328 | const S = struct { |
| 330 | 329 | fn doTheTest() !void { |
| 331 | | var v: Vector(4, i32) = [_]i32{ 1, 5, 3, undefined }; |
| 330 | var v: @Vector(4, i32) = [_]i32{ 1, 5, 3, undefined }; |
| 332 | 331 | var i: u32 = 2; |
| 333 | 332 | v[i] = 1; |
| 334 | 333 | try expect(v[1] == 5); |
| ... | ... | @@ -351,7 +350,7 @@ test "initialize vector which is a struct field" { |
| 351 | 350 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 352 | 351 | |
| 353 | 352 | const Vec4Obj = struct { |
| 354 | | data: Vector(4, f32), |
| 353 | data: @Vector(4, f32), |
| 355 | 354 | }; |
| 356 | 355 | |
| 357 | 356 | const S = struct { |
| ... | ... | @@ -376,17 +375,17 @@ test "vector comparison operators" { |
| 376 | 375 | const S = struct { |
| 377 | 376 | fn doTheTest() !void { |
| 378 | 377 | { |
| 379 | | const v1: Vector(4, bool) = [_]bool{ true, false, true, false }; |
| 380 | | const v2: Vector(4, bool) = [_]bool{ false, true, false, true }; |
| 378 | var v1: @Vector(4, bool) = [_]bool{ true, false, true, false }; |
| 379 | var v2: @Vector(4, bool) = [_]bool{ false, true, false, true }; |
| 381 | 380 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 == v1))); |
| 382 | 381 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v1 == v2))); |
| 383 | 382 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 != v2))); |
| 384 | 383 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v2 != v2))); |
| 385 | 384 | } |
| 386 | 385 | { |
| 387 | | const v1 = @splat(4, @as(u32, 0xc0ffeeee)); |
| 388 | | const v2: Vector(4, c_uint) = v1; |
| 389 | | const v3 = @splat(4, @as(u32, 0xdeadbeef)); |
| 386 | var v1 = @splat(4, @as(u32, 0xc0ffeeee)); |
| 387 | var v2: @Vector(4, c_uint) = v1; |
| 388 | var v3 = @splat(4, @as(u32, 0xdeadbeef)); |
| 390 | 389 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 == v2))); |
| 391 | 390 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v1 == v3))); |
| 392 | 391 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 != v3))); |
| ... | ... | @@ -414,7 +413,7 @@ test "vector division operators" { |
| 414 | 413 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 415 | 414 | |
| 416 | 415 | const S = struct { |
| 417 | | fn doTheTestDiv(comptime T: type, x: Vector(4, T), y: Vector(4, T)) !void { |
| 416 | fn doTheTestDiv(comptime T: type, x: @Vector(4, T), y: @Vector(4, T)) !void { |
| 418 | 417 | if (!comptime std.meta.trait.isSignedInt(T)) { |
| 419 | 418 | const d0 = x / y; |
| 420 | 419 | for (@as([4]T, d0)) |v, i| { |
| ... | ... | @@ -435,7 +434,7 @@ test "vector division operators" { |
| 435 | 434 | } |
| 436 | 435 | } |
| 437 | 436 | |
| 438 | | fn doTheTestMod(comptime T: type, x: Vector(4, T), y: Vector(4, T)) !void { |
| 437 | fn doTheTestMod(comptime T: type, x: @Vector(4, T), y: @Vector(4, T)) !void { |
| 439 | 438 | if ((!comptime std.meta.trait.isSignedInt(T)) and @typeInfo(T) != .Float) { |
| 440 | 439 | const r0 = x % y; |
| 441 | 440 | for (@as([4]T, r0)) |v, i| { |
| ... | ... | @@ -502,7 +501,7 @@ test "vector bitwise not operator" { |
| 502 | 501 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 503 | 502 | |
| 504 | 503 | const S = struct { |
| 505 | | fn doTheTestNot(comptime T: type, x: Vector(4, T)) !void { |
| 504 | fn doTheTestNot(comptime T: type, x: @Vector(4, T)) !void { |
| 506 | 505 | var y = ~x; |
| 507 | 506 | for (@as([4]T, y)) |v, i| { |
| 508 | 507 | try expect(~x[i] == v); |
| ... | ... | @@ -538,8 +537,8 @@ test "vector shift operators" { |
| 538 | 537 | const TX = @typeInfo(@TypeOf(x)).Array.child; |
| 539 | 538 | const TY = @typeInfo(@TypeOf(y)).Array.child; |
| 540 | 539 | |
| 541 | | var xv = @as(Vector(N, TX), x); |
| 542 | | var yv = @as(Vector(N, TY), y); |
| 540 | var xv = @as(@Vector(N, TX), x); |
| 541 | var yv = @as(@Vector(N, TY), y); |
| 543 | 542 | |
| 544 | 543 | var z0 = xv >> yv; |
| 545 | 544 | for (@as([N]TX, z0)) |v, i| { |
| ... | ... | @@ -555,8 +554,8 @@ test "vector shift operators" { |
| 555 | 554 | const TX = @typeInfo(@TypeOf(x)).Array.child; |
| 556 | 555 | const TY = @typeInfo(@TypeOf(y)).Array.child; |
| 557 | 556 | |
| 558 | | var xv = @as(Vector(N, TX), x); |
| 559 | | var yv = @as(Vector(N, TY), y); |
| 557 | var xv = @as(@Vector(N, TX), x); |
| 558 | var yv = @as(@Vector(N, TY), y); |
| 560 | 559 | |
| 561 | 560 | var z = if (dir == .Left) @shlExact(xv, yv) else @shrExact(xv, yv); |
| 562 | 561 | for (@as([N]TX, z)) |v, i| { |
| ... | ... | @@ -768,10 +767,10 @@ test "mask parameter of @shuffle is comptime scope" { |
| 768 | 767 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 769 | 768 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 770 | 769 | |
| 771 | | const __v4hi = std.meta.Vector(4, i16); |
| 770 | const __v4hi = @Vector(4, i16); |
| 772 | 771 | var v4_a = __v4hi{ 0, 0, 0, 0 }; |
| 773 | 772 | var v4_b = __v4hi{ 0, 0, 0, 0 }; |
| 774 | | var shuffled: __v4hi = @shuffle(i16, v4_a, v4_b, std.meta.Vector(4, i32){ |
| 773 | var shuffled: __v4hi = @shuffle(i16, v4_a, v4_b, @Vector(4, i32){ |
| 775 | 774 | std.zig.c_translation.shuffleVectorIndex(0, @typeInfo(@TypeOf(v4_a)).Vector.len), |
| 776 | 775 | std.zig.c_translation.shuffleVectorIndex(0, @typeInfo(@TypeOf(v4_a)).Vector.len), |
| 777 | 776 | std.zig.c_translation.shuffleVectorIndex(0, @typeInfo(@TypeOf(v4_a)).Vector.len), |
| ... | ... | @@ -790,18 +789,18 @@ test "saturating add" { |
| 790 | 789 | const S = struct { |
| 791 | 790 | fn doTheTest() !void { |
| 792 | 791 | { // Broken out to avoid https://github.com/ziglang/zig/issues/11251 |
| 793 | | const u8x3 = std.meta.Vector(3, u8); |
| 794 | | const lhs = u8x3{ 255, 254, 1 }; |
| 795 | | const rhs = u8x3{ 1, 2, 255 }; |
| 796 | | const result = lhs +| rhs; |
| 792 | const u8x3 = @Vector(3, u8); |
| 793 | var lhs = u8x3{ 255, 254, 1 }; |
| 794 | var rhs = u8x3{ 1, 2, 255 }; |
| 795 | var result = lhs +| rhs; |
| 797 | 796 | const expected = u8x3{ 255, 255, 255 }; |
| 798 | 797 | try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result))); |
| 799 | 798 | } |
| 800 | 799 | { // Broken out to avoid https://github.com/ziglang/zig/issues/11251 |
| 801 | | const i8x3 = std.meta.Vector(3, i8); |
| 802 | | const lhs = i8x3{ 127, 126, 1 }; |
| 803 | | const rhs = i8x3{ 1, 2, 127 }; |
| 804 | | const result = lhs +| rhs; |
| 800 | const i8x3 = @Vector(3, i8); |
| 801 | var lhs = i8x3{ 127, 126, 1 }; |
| 802 | var rhs = i8x3{ 1, 2, 127 }; |
| 803 | var result = lhs +| rhs; |
| 805 | 804 | const expected = i8x3{ 127, 127, 127 }; |
| 806 | 805 | try expect(mem.eql(i8, &@as([3]i8, expected), &@as([3]i8, result))); |
| 807 | 806 | } |
| ... | ... | @@ -821,10 +820,10 @@ test "saturating subtraction" { |
| 821 | 820 | const S = struct { |
| 822 | 821 | fn doTheTest() !void { |
| 823 | 822 | // Broken out to avoid https://github.com/ziglang/zig/issues/11251 |
| 824 | | const u8x3 = std.meta.Vector(3, u8); |
| 825 | | const lhs = u8x3{ 0, 0, 0 }; |
| 826 | | const rhs = u8x3{ 255, 255, 255 }; |
| 827 | | const result = lhs -| rhs; |
| 823 | const u8x3 = @Vector(3, u8); |
| 824 | var lhs = u8x3{ 0, 0, 0 }; |
| 825 | var rhs = u8x3{ 255, 255, 255 }; |
| 826 | var result = lhs -| rhs; |
| 828 | 827 | const expected = u8x3{ 0, 0, 0 }; |
| 829 | 828 | try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result))); |
| 830 | 829 | } |
| ... | ... | @@ -846,10 +845,10 @@ test "saturating multiplication" { |
| 846 | 845 | const S = struct { |
| 847 | 846 | fn doTheTest() !void { |
| 848 | 847 | // Broken out to avoid https://github.com/ziglang/zig/issues/11251 |
| 849 | | const u8x3 = std.meta.Vector(3, u8); |
| 850 | | const lhs = u8x3{ 2, 2, 2 }; |
| 851 | | const rhs = u8x3{ 255, 255, 255 }; |
| 852 | | const result = lhs *| rhs; |
| 848 | const u8x3 = @Vector(3, u8); |
| 849 | var lhs = u8x3{ 2, 2, 2 }; |
| 850 | var rhs = u8x3{ 255, 255, 255 }; |
| 851 | var result = lhs *| rhs; |
| 853 | 852 | const expected = u8x3{ 255, 255, 255 }; |
| 854 | 853 | try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result))); |
| 855 | 854 | } |
| ... | ... | @@ -869,10 +868,10 @@ test "saturating shift-left" { |
| 869 | 868 | const S = struct { |
| 870 | 869 | fn doTheTest() !void { |
| 871 | 870 | // Broken out to avoid https://github.com/ziglang/zig/issues/11251 |
| 872 | | const u8x3 = std.meta.Vector(3, u8); |
| 873 | | const lhs = u8x3{ 1, 1, 1 }; |
| 874 | | const rhs = u8x3{ 255, 255, 255 }; |
| 875 | | const result = lhs <<| rhs; |
| 871 | const u8x3 = @Vector(3, u8); |
| 872 | var lhs = u8x3{ 1, 1, 1 }; |
| 873 | var rhs = u8x3{ 255, 255, 255 }; |
| 874 | var result = lhs <<| rhs; |
| 876 | 875 | const expected = u8x3{ 255, 255, 255 }; |
| 877 | 876 | try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result))); |
| 878 | 877 | } |