// Copyright (c) 2015, 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.

import 'native_testing.dart';

// Negative constant numbers must be generated as negation, not just a literal
// with a sign, i.e.
//
//     (-5).toString()
//
// not
//
//     -5 .toString()
//
// The unparethesized version is `-(5 .toString())`, which creates the string
// `"5"`, then converts it to a number for negation, giving a number result
// instead of a string result.

@NoInline()
checkString(r) {
  Expect.isTrue(
      r is String, 'Expected string, found ${r} of type ${r.runtimeType}');
}

test1() {
  checkString(JS('', '#.toString()', -5));
}

test2() {
  checkString(JS('', '#.toString()', -1.5));
}

test3() {
  checkString(JS('', '#.toString()', -0.0));
}

main() {
  test1();
  test2();
  test3();
}
