| ... | ... | @@ -1189,7 +1189,11 @@ fn fuzzTest(rng: *std.rand.Random) void { |
| 1189 | 1189 | } |
| 1190 | 1190 | } |
| 1191 | 1191 | |
| 1192 | | pub fn min(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) bool) T { |
| 1192 | pub fn min(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) bool) ?T { |
| 1193 | if (items.len == 0) { |
| 1194 | return null; |
| 1195 | } |
| 1196 | |
| 1193 | 1197 | var i: usize = 0; |
| 1194 | 1198 | var smallest = items[0]; |
| 1195 | 1199 | for (items[1..]) |item| { |
| ... | ... | @@ -1201,15 +1205,20 @@ pub fn min(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) boo |
| 1201 | 1205 | } |
| 1202 | 1206 | |
| 1203 | 1207 | test "std.sort.min" { |
| 1204 | | testing.expectEqual(@as(i32, 1), min(i32, &[_]i32{1}, asc(i32))); |
| 1205 | | testing.expectEqual(@as(i32, 1), min(i32, &[_]i32{ 1, 2, 3, 4, 5 }, asc(i32))); |
| 1206 | | testing.expectEqual(@as(i32, 2), min(i32, &[_]i32{ 9, 3, 8, 2, 5 }, asc(i32))); |
| 1207 | | testing.expectEqual(@as(i32, 1), min(i32, &[_]i32{ 1, 1, 1, 1, 1 }, asc(i32))); |
| 1208 | | testing.expectEqual(@as(i32, -10), min(i32, &[_]i32{ -10, 1, 10 }, asc(i32))); |
| 1209 | | testing.expectEqual(@as(i32, 7), min(i32, &[_]i32{ 6, 3, 5, 7, 6 }, desc(i32))); |
| 1208 | testing.expectEqual(@as(?i32, null), min(i32, &[_]i32{}, asc(i32))); |
| 1209 | testing.expectEqual(@as(?i32, 1), min(i32, &[_]i32{1}, asc(i32))); |
| 1210 | testing.expectEqual(@as(?i32, 1), min(i32, &[_]i32{ 1, 2, 3, 4, 5 }, asc(i32))); |
| 1211 | testing.expectEqual(@as(?i32, 2), min(i32, &[_]i32{ 9, 3, 8, 2, 5 }, asc(i32))); |
| 1212 | testing.expectEqual(@as(?i32, 1), min(i32, &[_]i32{ 1, 1, 1, 1, 1 }, asc(i32))); |
| 1213 | testing.expectEqual(@as(?i32, -10), min(i32, &[_]i32{ -10, 1, 10 }, asc(i32))); |
| 1214 | testing.expectEqual(@as(?i32, 7), min(i32, &[_]i32{ 6, 3, 5, 7, 6 }, desc(i32))); |
| 1210 | 1215 | } |
| 1211 | 1216 | |
| 1212 | | pub fn max(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) bool) T { |
| 1217 | pub fn max(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) bool) ?T { |
| 1218 | if (items.len == 0) { |
| 1219 | return null; |
| 1220 | } |
| 1221 | |
| 1213 | 1222 | var i: usize = 0; |
| 1214 | 1223 | var biggest = items[0]; |
| 1215 | 1224 | for (items[1..]) |item| { |
| ... | ... | @@ -1221,12 +1230,13 @@ pub fn max(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) boo |
| 1221 | 1230 | } |
| 1222 | 1231 | |
| 1223 | 1232 | test "std.sort.max" { |
| 1224 | | testing.expectEqual(@as(i32, 1), max(i32, &[_]i32{1}, asc(i32))); |
| 1225 | | testing.expectEqual(@as(i32, 5), max(i32, &[_]i32{ 1, 2, 3, 4, 5 }, asc(i32))); |
| 1226 | | testing.expectEqual(@as(i32, 9), max(i32, &[_]i32{ 9, 3, 8, 2, 5 }, asc(i32))); |
| 1227 | | testing.expectEqual(@as(i32, 1), max(i32, &[_]i32{ 1, 1, 1, 1, 1 }, asc(i32))); |
| 1228 | | testing.expectEqual(@as(i32, 10), max(i32, &[_]i32{ -10, 1, 10 }, asc(i32))); |
| 1229 | | testing.expectEqual(@as(i32, 3), max(i32, &[_]i32{ 6, 3, 5, 7, 6 }, desc(i32))); |
| 1233 | testing.expectEqual(@as(?i32, null), max(i32, &[_]i32{}, asc(i32))); |
| 1234 | testing.expectEqual(@as(?i32, 1), max(i32, &[_]i32{1}, asc(i32))); |
| 1235 | testing.expectEqual(@as(?i32, 5), max(i32, &[_]i32{ 1, 2, 3, 4, 5 }, asc(i32))); |
| 1236 | testing.expectEqual(@as(?i32, 9), max(i32, &[_]i32{ 9, 3, 8, 2, 5 }, asc(i32))); |
| 1237 | testing.expectEqual(@as(?i32, 1), max(i32, &[_]i32{ 1, 1, 1, 1, 1 }, asc(i32))); |
| 1238 | testing.expectEqual(@as(?i32, 10), max(i32, &[_]i32{ -10, 1, 10 }, asc(i32))); |
| 1239 | testing.expectEqual(@as(?i32, 3), max(i32, &[_]i32{ 6, 3, 5, 7, 6 }, desc(i32))); |
| 1230 | 1240 | } |
| 1231 | 1241 | |
| 1232 | 1242 | pub fn isSorted(comptime T: type, items: []const T, lessThan: fn (lhs: T, rhs: T) bool) bool { |