  // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion num clamp(num lowerLimit, num upperLimit)
/// Returns this num clamped to be in the range lowerLimit-upperLimit.
/// The comparison is done using compareTo and therefore takes -0.0 into account.
/// This also implies that double.nan is treated as the maximal double value.
/// @description Checks that returns num clamped to be in the range
/// lowerLimit-upperLimit, where one of the limits is double.nan
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";

check(num expected, num lowerLimit, num upperLimit, num value) {
  Expect.equals(expected, value.clamp(lowerLimit, upperLimit));
}

main() {
  check(double.maxFinite, 0, double.nan, double.maxFinite);
  check(double.nan, 0, double.nan, double.nan);
  check(double.infinity, 0, double.nan, double.infinity);
  check(double.nan, 0, double.nan, double.nan);

  check(-double.maxFinite, double.negativeInfinity, 0, -double.maxFinite);
  check(-double.maxFinite, -double.maxFinite, 0, double.negativeInfinity);
}
