From 4018034708beea63086a34d361ffb400979a1189 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 24 Nov 2019 16:52:32 -0500 Subject: [PATCH] add test cases for arbitrary pointer sentinels --- test/stage1/behavior/pointers.zig | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/stage1/behavior/pointers.zig b/test/stage1/behavior/pointers.zig index 8cf7611269..89c6b29871 100644 --- a/test/stage1/behavior/pointers.zig +++ b/test/stage1/behavior/pointers.zig @@ -213,3 +213,51 @@ test "null terminated pointer" { S.doTheTest(); comptime S.doTheTest(); } + +test "allow any sentinel" { + const S = struct { + fn doTheTest() void { + var array = [_:std.math.minInt(i32)]i32{1, 2, 3, 4}; + var ptr: [*:std.math.minInt(i32)]i32 = &array; + expect(ptr[4] == std.math.minInt(i32)); + } + }; + S.doTheTest(); + comptime S.doTheTest(); +} + +test "pointer sentinel with enums" { + const S = struct { + const Number = enum{one, two, sentinel}; + + fn doTheTest() void { + var ptr: [*:.sentinel]Number = &[_:.sentinel]Number{.one, .two, .two, .one}; + expect(ptr[4] == .sentinel); // TODO this should be comptime expect, see #3731 + } + }; + S.doTheTest(); + comptime S.doTheTest(); +} + +test "pointer sentinel with optional element" { + const S = struct { + fn doTheTest() void { + var ptr: [*:null]?i32 = &[_:null]?i32{1, 2, 3, 4}; + expect(ptr[4] == null); // TODO this should be comptime expect, see #3731 + } + }; + S.doTheTest(); + comptime S.doTheTest(); +} + +test "pointer sentinel with +inf" { + const S = struct { + fn doTheTest() void { + const inf = std.math.inf_f32; + var ptr: [*:inf]f32 = &[_:inf]f32{1.1, 2.2, 3.3, 4.4}; + expect(ptr[4] == inf); // TODO this should be comptime expect, see #3731 + } + }; + S.doTheTest(); + comptime S.doTheTest(); +}