// 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 int toSigned(int width)
/// ...
/// If the input value fits in width bits without truncation, the result is the
/// same as the input. The minimum width needed to avoid truncation of x is
/// x.bitLength + 1, i.e.
///
/// x == x.toSigned(x.bitLength + 1);
/// @description Checks that x == x.toSigned(x.bitLength + 1);
/// @author sgrekhov@unipro.ru

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

test(int x) {
  Expect.equals(x, x.toSigned(x.bitLength + 1));
}

main() {
  test(0);
  test(1);
  test(17);
  test(1024);
  test(123456789);
  test(-1);
  test(-17);
  test(-1024);
  test(-123456789);
}
