authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-10-27 16:09:12-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-10-28 10:14:15-07:00
log49b9e1e69bda9080445ae10f9578262266082f91
tree178caf304998faf740c0b0a0297b57c2a581c3c3
parent256ab68a97cb6a84278c78d93917ab5e8ae53209

std.mem.minMax: make it return a tuple

this is a breaking change

1 files changed, 22 insertions(+), 10 deletions(-)

lib/std/mem.zig+22-10
......@@ -3527,21 +3527,33 @@ test "max" {
35273527/// Finds the smallest and largest number in a slice. O(n).
35283528/// Returns an anonymous struct with the fields `min` and `max`.
35293529/// `slice` must not be empty.
3530pub fn minMax(comptime T: type, slice: []const T) struct { min: T, max: T } {
3530pub fn minMax(comptime T: type, slice: []const T) struct { T, T } {
35313531 assert(slice.len > 0);
3532 var minVal = slice[0];
3533 var maxVal = slice[0];
3532 var running_minimum = slice[0];
3533 var running_maximum = slice[0];
35343534 for (slice[1..]) |item| {
3535 minVal = @min(minVal, item);
3536 maxVal = @max(maxVal, item);
3535 running_minimum = @min(running_minimum, item);
3536 running_maximum = @max(running_maximum, item);
35373537 }
3538 return .{ .min = minVal, .max = maxVal };
3538 return .{ running_minimum, running_maximum };
35393539}
35403540
3541test "minMax" {
3542 try testing.expectEqual(minMax(u8, "abcdefg"), .{ .min = 'a', .max = 'g' });
3543 try testing.expectEqual(minMax(u8, "bcdefga"), .{ .min = 'a', .max = 'g' });
3544 try testing.expectEqual(minMax(u8, "a"), .{ .min = 'a', .max = 'a' });
3541test minMax {
3542 {
3543 const actual_min, const actual_max = minMax(u8, "abcdefg");
3544 try testing.expectEqual(@as(u8, 'a'), actual_min);
3545 try testing.expectEqual(@as(u8, 'g'), actual_max);
3546 }
3547 {
3548 const actual_min, const actual_max = minMax(u8, "bcdefga");
3549 try testing.expectEqual(@as(u8, 'a'), actual_min);
3550 try testing.expectEqual(@as(u8, 'g'), actual_max);
3551 }
3552 {
3553 const actual_min, const actual_max = minMax(u8, "a");
3554 try testing.expectEqual(@as(u8, 'a'), actual_min);
3555 try testing.expectEqual(@as(u8, 'a'), actual_max);
3556 }
35453557}
35463558
35473559/// Returns the index of the smallest number in a slice. O(n).