"Given a stream of [[Comparable]] values, return the largest value in the stream, or `null` if the stream is empty. For any nonempty stream `it`, `max(it)` evaluates to the first element of `it` such that for every element `e` of `it`, `max(it) >= e`. Any value `x` which violates the reflexivity requirement of [[Object.equals]] such that `x!=x` is skipped, unless it is the last element in the stream. Thus, for a stream of [[Float]]s, `max()` will not return an [[undefined value|Float.undefined]] unless every element of the stream is undefined. Note that [[Iterable.max]] may be used to find the largest value in any stream, as determined by a given comparator function." see (`interface Comparable`, `function min`, `function largest`, `function Iterable.max`, `function Integer.max`, `function Float.max`) tagged("Comparisons", "Streams") shared native Absent|Value max<Value,Absent> (Iterable<Value,Absent> values) given Value satisfies Comparable<Value> given Absent satisfies Null; shared native("js") Absent|Value max<Value,Absent> (Iterable<Value,Absent> values) given Value satisfies Comparable<Value> given Absent satisfies Null { value it = values.iterator(); if (!is Finished first = it.next()) { variable value max = first; while (max!=max, //quick test for NaN !is Finished val = it.next()) { max = val; } while (!is Finished val = it.next()) { if (val>max) { max = val; } } return max; } else { "iterable must be empty" assert (is Absent null); return null; } } shared native("jvm") Absent|Value max<Value,Absent> (Iterable<Value,Absent> values) given Value satisfies Comparable<Value> given Absent satisfies Null { value it = values.iterator(); switch (first = it.next()) case (is Finished) { "iterable must be empty" assert (is Absent null); return null; } case (is Integer) { variable Integer max = first; while (is Integer val = it.next()) { if ((val of Integer) > max) { max = val; } } assert (is Value result = max); return result; } case (is Float) { variable Float max = first; while (max!=max, is Float val = it.next()) { max = val; } while (is Float val = it.next()) { if ((val of Float) > max) { max = val; } } assert (is Value result = max); return result; } else { variable value max = first; //exactly reproduce behavior on JS above while (max!=max, !is Finished val = it.next()) { max = val; } while (!is Finished val = it.next()) { if (val>max) { max = val; } } return max; } }