// Copyright (c) 2011, 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 A numeric literal is either a decimal or hexadecimal integer of
 * arbitrary size, or a decimal double.
 *
 * numericLiteral:
 *   NUMBER|
 *   HEX_NUMBER
 *;
 * NUMBER:
 *   DIGIT+ ('.' DIGIT+)? EXPONENT? |
 *  '.' DIGIT+ EXPONENT?
 * ;
 * EXPONENT:
 *   ('e' | 'E') ('+' | '-')? DIGIT+
 * ;
 * HEX NUMBER:
 *   '0x' HEX DIGIT+ |
 *   '0X' HEX DIGIT+
 * ;
 * HEX DIGIT:
 *   'a'..'f' |
 *   'A'..'F' |
 *   DIGIT
 * ;
 * @description Checks different decimal numeric literals with decimal point
 * but no exponent.
 * @author hlodvig
 */
import '../../../Utils/expect.dart';

void check(i, expected) {
  Expect.isTrue(i is num);
  Expect.isTrue(expected is num);
  Expect.equals(expected, i);
}

main() {
  check(-0.0, -0);
  check(1.0, 1);
  check(-2.0, -2);
  check(3.0, 3);
  check(-4.0, -4);
  check(5.0, 5);
  check(-6.0, -6);
  check(7.0, 7);
  check(-8.0,-8);
  check(9.0, 9);
  check(-0.0, -0);
  check(1.1, 1.1);
  check(-2.2, -2.2);
  check(3.3, 3.3);
  check(-4.4, -4.4);
  check(5.5, 5.5);
  check(-6.6, -6.6);
  check(7.7, 7.7);
  check(-8.8, -8.8);
  check(9.9, 9.9);
  check(-.0, -0);
  check(.1, 0.1);
  check(-.2, -0.2);
  check(.3, 0.3);
  check(-.4, -0.4);
  check(.5, 0.5);
  check(-.6, -0.6);
  check(.7, 0.7);
  check(-.8, -0.8);
  check(.9, 0.9);
}
