// 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 'dart:_foreign_helper' show JS;
import "package:expect/expect.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();
}
