memcmp.zig (931B) - Raw
1 const std = @import("std"); 2 const common = @import("./common.zig"); 3 4 comptime { 5 @export(&memcmp, .{ .name = "memcmp", .linkage = common.linkage, .visibility = common.visibility }); 6 } 7 8 pub 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 17 test "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 }