From 49b9e1e69bda9080445ae10f9578262266082f91 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 27 Oct 2023 16:09:12 -0700 Subject: [PATCH] std.mem.minMax: make it return a tuple this is a breaking change --- lib/std/mem.zig | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/std/mem.zig b/lib/std/mem.zig index 4e2d5a805f..9d769d465b 100644 --- a/lib/std/mem.zig +++ b/lib/std/mem.zig @@ -3527,21 +3527,33 @@ test "max" { /// Finds the smallest and largest number in a slice. O(n). /// Returns an anonymous struct with the fields `min` and `max`. /// `slice` must not be empty. -pub fn minMax(comptime T: type, slice: []const T) struct { min: T, max: T } { +pub fn minMax(comptime T: type, slice: []const T) struct { T, T } { assert(slice.len > 0); - var minVal = slice[0]; - var maxVal = slice[0]; + var running_minimum = slice[0]; + var running_maximum = slice[0]; for (slice[1..]) |item| { - minVal = @min(minVal, item); - maxVal = @max(maxVal, item); + running_minimum = @min(running_minimum, item); + running_maximum = @max(running_maximum, item); } - return .{ .min = minVal, .max = maxVal }; + return .{ running_minimum, running_maximum }; } -test "minMax" { - try testing.expectEqual(minMax(u8, "abcdefg"), .{ .min = 'a', .max = 'g' }); - try testing.expectEqual(minMax(u8, "bcdefga"), .{ .min = 'a', .max = 'g' }); - try testing.expectEqual(minMax(u8, "a"), .{ .min = 'a', .max = 'a' }); +test minMax { + { + const actual_min, const actual_max = minMax(u8, "abcdefg"); + try testing.expectEqual(@as(u8, 'a'), actual_min); + try testing.expectEqual(@as(u8, 'g'), actual_max); + } + { + const actual_min, const actual_max = minMax(u8, "bcdefga"); + try testing.expectEqual(@as(u8, 'a'), actual_min); + try testing.expectEqual(@as(u8, 'g'), actual_max); + } + { + const actual_min, const actual_max = minMax(u8, "a"); + try testing.expectEqual(@as(u8, 'a'), actual_min); + try testing.expectEqual(@as(u8, 'a'), actual_max); + } } /// Returns the index of the smallest number in a slice. O(n).