zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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 }