std.mem.minMax: make it return a tuple
this is a breaking change
This commit is contained in:
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user