clamp() methods added to Math and StrictMath

`int clamp(long, int, int)` is somewhat different, as it accepts a `long` value 
and safely clamps it to an `int` range. Other overloads work with a particular 
type (long, float and double). Using similar approach in other cases (e.g. 
`float clamp(double, float, float)`) may cause accidental precision loss even 
if the value is within range, so I decided to avoid this.

In all cases, `max >= min` precondition should met. For double and float we 
additionally order `-0.0 < 0.0`, similarly to what Math.max or Double.compare 
do. In double and float overloads I try to keep at most one arg-check 
comparison on common path, so the order of checks might look unusual.

For tests, I noticed that tests in java/lang/Math don't use any testing 
framework (even newer tests), so I somehow mimic the approach of neighbour 
tests.

-------------

Commit messages:
 - Line breaks
 - Trailing whitespace removed
 - Copyright added
 - 8301226 Add clamp() methods to java.lang.Math and to StrictMath

Changes: https://git.openjdk.org/jdk/pull/12428/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12428&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8301226
  Stats: 426 lines in 3 files changed: 425 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/12428.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12428/head:pull/12428

PR: https://git.openjdk.org/jdk/pull/12428

Reply via email to