master
 1const std = @import("std");
 2const common = @import("./common.zig");
 3
 4comptime {
 5    @export(&memcmp, .{ .name = "memcmp", .linkage = common.linkage, .visibility = common.visibility });
 6}
 7
 8pub fn memcmp(vl: [*]const u8, vr: [*]const u8, n: usize) callconv(.c) c_int {
 9    var i: usize = 0;
10    while (i < n) : (i += 1) {
11        const compared = @as(c_int, vl[i]) -% @as(c_int, vr[i]);
12        if (compared != 0) return compared;
13    }
14    return 0;
15}
16
17test "memcmp" {
18    const arr0 = &[_]u8{ 1, 1, 1 };
19    const arr1 = &[_]u8{ 1, 1, 1 };
20    const arr2 = &[_]u8{ 1, 0, 1 };
21    const arr3 = &[_]u8{ 1, 2, 1 };
22    const arr4 = &[_]u8{ 1, 0xff, 1 };
23
24    try std.testing.expect(memcmp(arr0, arr1, 3) == 0);
25    try std.testing.expect(memcmp(arr0, arr2, 3) > 0);
26    try std.testing.expect(memcmp(arr0, arr3, 3) < 0);
27
28    try std.testing.expect(memcmp(arr0, arr4, 3) < 0);
29    try std.testing.expect(memcmp(arr4, arr0, 3) > 0);
30}