mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-26 13:01:34 +03:00
3ea77badf9
Contributes to: #30978 Reviewed-on: https://codeberg.org/ziglang/zig/pulls/31935 Reviewed-by: Andrew Kelley <andrew@ziglang.org>
53 lines
2.0 KiB
Zig
53 lines
2.0 KiB
Zig
const builtin = @import("builtin");
|
|
const std = @import("std");
|
|
|
|
const c = std.c;
|
|
const testing = std.testing;
|
|
|
|
test "strncmp" {
|
|
try testing.expect(c.strncmp(@ptrCast("a"), @ptrCast("b"), 1) < 0);
|
|
try testing.expect(c.strncmp(@ptrCast("a"), @ptrCast("c"), 1) < 0);
|
|
try testing.expect(c.strncmp(@ptrCast("b"), @ptrCast("a"), 1) > 0);
|
|
try testing.expect(c.strncmp(@ptrCast("\xff"), @ptrCast("\x02"), 1) > 0);
|
|
}
|
|
|
|
test "strdup" {
|
|
const org: [*:0]const u8 = "a";
|
|
const cpy_opt = c.strdup(@ptrCast(org));
|
|
const cpy = cpy_opt orelse return error.OutOfMemory;
|
|
defer c.free(cpy);
|
|
|
|
const cpy_u8: [*:0]u8 = @ptrCast(cpy);
|
|
try testing.expectEqualStrings(std.mem.span(org), std.mem.span(@as([*:0]const u8, cpy_u8)));
|
|
try testing.expect(@intFromPtr(cpy_u8) != @intFromPtr(org));
|
|
|
|
cpy_u8[0] = 'b';
|
|
try testing.expectEqualStrings("a", std.mem.span(org));
|
|
try testing.expectEqualStrings("b", std.mem.span(@as([*:0]const u8, cpy_u8)));
|
|
}
|
|
|
|
test "strndup" {
|
|
if (builtin.target.os.tag == .windows) return; // no strndup
|
|
const org1: [*:0]const u8 = "Hello";
|
|
|
|
const copy1_opt = c.strndup(@ptrCast(org1), 100);
|
|
const copy1 = copy1_opt orelse return error.OutOfMemory;
|
|
defer c.free(copy1);
|
|
const copy1_u8: [*:0]u8 = @ptrCast(copy1);
|
|
try testing.expectEqualStrings("Hello", std.mem.span(@as([*:0]const u8, copy1_u8)));
|
|
|
|
const org2: [*:0]const u8 = "Hello World!";
|
|
const copy2_opt = c.strndup(@ptrCast(org2), 5);
|
|
const copy2 = copy2_opt orelse return error.OutOfMemory;
|
|
defer c.free(copy2);
|
|
const copy2_u8: [*:0]u8 = @ptrCast(copy2);
|
|
try testing.expectEqualStrings("Hello", std.mem.span(@as([*:0]const u8, copy2_u8)));
|
|
try testing.expectEqual(@as(usize, 5), std.mem.len(copy2_u8));
|
|
|
|
const copy3_opt = c.strndup(@ptrCast(org1), 5);
|
|
const copy3 = copy3_opt orelse return error.OutOfMemory;
|
|
defer c.free(copy3);
|
|
const copy3_u8: [*:0]u8 = @ptrCast(copy3);
|
|
try testing.expectEqualStrings("Hello", std.mem.span(@as([*:0]const u8, copy3_u8)));
|
|
}
|