mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 07:32:44 +00:00
42 lines
1.5 KiB
Zig
42 lines
1.5 KiB
Zig
|
const std = @import("std");
|
||
|
const expectEqual = std.testing.expectEqual;
|
||
|
|
||
|
test "Basic vector usage" {
|
||
|
// Vectors have a compile-time known length and base type.
|
||
|
const a = @Vector(4, i32){ 1, 2, 3, 4 };
|
||
|
const b = @Vector(4, i32){ 5, 6, 7, 8 };
|
||
|
|
||
|
// Math operations take place element-wise.
|
||
|
const c = a + b;
|
||
|
|
||
|
// Individual vector elements can be accessed using array indexing syntax.
|
||
|
try expectEqual(6, c[0]);
|
||
|
try expectEqual(8, c[1]);
|
||
|
try expectEqual(10, c[2]);
|
||
|
try expectEqual(12, c[3]);
|
||
|
}
|
||
|
|
||
|
test "Conversion between vectors, arrays, and slices" {
|
||
|
// Vectors and fixed-length arrays can be automatically assigned back and forth
|
||
|
const arr1: [4]f32 = [_]f32{ 1.1, 3.2, 4.5, 5.6 };
|
||
|
const vec: @Vector(4, f32) = arr1;
|
||
|
const arr2: [4]f32 = vec;
|
||
|
try expectEqual(arr1, arr2);
|
||
|
|
||
|
// You can also assign from a slice with comptime-known length to a vector using .*
|
||
|
const vec2: @Vector(2, f32) = arr1[1..3].*;
|
||
|
|
||
|
const slice: []const f32 = &arr1;
|
||
|
var offset: u32 = 1; // var to make it runtime-known
|
||
|
_ = &offset; // suppress 'var is never mutated' error
|
||
|
// To extract a comptime-known length from a runtime-known offset,
|
||
|
// first extract a new slice from the starting offset, then an array of
|
||
|
// comptime-known length
|
||
|
const vec3: @Vector(2, f32) = slice[offset..][0..2].*;
|
||
|
try expectEqual(slice[offset], vec2[0]);
|
||
|
try expectEqual(slice[offset + 1], vec2[1]);
|
||
|
try expectEqual(vec2, vec3);
|
||
|
}
|
||
|
|
||
|
// test
|