mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 05:36:49 +00:00
cd83e0ccc0
Replaces uses of `webNumbers` with `jsNumbers`. CoreLibraryReviewExempt: no semantic changes - only updates to use new pkg/expect variations properties Change-Id: I8072b0b1f92d37e756c211b5d0de106a59d0960b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/346911 Reviewed-by: Mayank Patke <fishythefish@google.com>
99 lines
3.3 KiB
Dart
99 lines
3.3 KiB
Dart
// Copyright (c) 2012, 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 "package:expect/expect.dart";
|
|
import 'package:expect/variations.dart' as v;
|
|
|
|
main() {
|
|
/// Test that converting [value] to a string gives [expect].
|
|
/// Also test that `-value` gives `"-"+expect`.
|
|
test(int value, String expect) {
|
|
Expect.equals(expect, value.toString());
|
|
Expect.equals(expect, "$value");
|
|
Expect.equals(expect, (new StringBuffer()..write(value)).toString());
|
|
if (value <= 0) return;
|
|
expect = "-$expect";
|
|
value = -value;
|
|
Expect.equals(expect, value.toString());
|
|
Expect.equals(expect, "$value");
|
|
Expect.equals(expect, (new StringBuffer()..write(value)).toString());
|
|
}
|
|
|
|
// Very simple tests.
|
|
test(0, "0");
|
|
test(1, "1");
|
|
test(2, "2");
|
|
test(5, "5");
|
|
|
|
// Binary special cases.
|
|
|
|
// ~2^30.
|
|
test(0x3fffffff, "1073741823");
|
|
test(0x40000000, "1073741824");
|
|
test(0x40000001, "1073741825");
|
|
// ~2^31.
|
|
test(0x7fffffff, "2147483647");
|
|
test(0x80000000, "2147483648");
|
|
test(0x80000001, "2147483649");
|
|
// ~2^32.
|
|
test(0xffffffff, "4294967295");
|
|
test(0x100000000, "4294967296");
|
|
test(0x100000001, "4294967297");
|
|
|
|
// ~2^51.
|
|
test(0x7ffffffffffff, "2251799813685247");
|
|
test(0x8000000000000, "2251799813685248");
|
|
test(0x8000000000001, "2251799813685249");
|
|
// ~2^52.
|
|
test(0xfffffffffffff, "4503599627370495");
|
|
test(0x10000000000000, "4503599627370496");
|
|
test(0x10000000000001, "4503599627370497");
|
|
// ~2^53.
|
|
test(0x1fffffffffffff, "9007199254740991");
|
|
test(0x20000000000000, "9007199254740992");
|
|
// Split literals into sum of two web numbers to avoid compilation errors.
|
|
if (v.jsNumbers) {
|
|
// The String for large integral web numbers (doubles) could be any sequence
|
|
// of digits that parse back to the same value. The algorithm chooses 'nice'
|
|
// rounded numbers rather than the equivalent digits for some multiple of a
|
|
// power of two.
|
|
test(0x20000000000000 + 1, "9007199254740992");
|
|
// ~2^62.
|
|
test(0x3ffffffffffff000 + 0xfff, "4611686018427388000");
|
|
test(0x4000000000000000, "4611686018427388000");
|
|
test(0x4000000000000000 + 1, "4611686018427388000");
|
|
// ~2^63.
|
|
test(0x7ffffffffffff000 + 0xfff, "9223372036854776000");
|
|
test(0x8000000000000000, "9223372036854776000");
|
|
test(0x8000000000000000 + 1, "9223372036854776000");
|
|
// ~2^64.
|
|
test(0xfffffffffffff000 + 0xfff, "18446744073709552000");
|
|
} else {
|
|
test(0x20000000000000 + 1, "9007199254740993");
|
|
// ~2^62.
|
|
test(0x3ffffffffffff000 + 0xfff, "4611686018427387903");
|
|
test(0x4000000000000000, "4611686018427387904");
|
|
test(0x4000000000000000 + 1, "4611686018427387905");
|
|
// ~2^63.
|
|
test(0x7ffffffffffff000 + 0xfff, "9223372036854775807");
|
|
test(0x8000000000000000, "-9223372036854775808");
|
|
test(0x8000000000000000 + 1, "-9223372036854775807");
|
|
// ~2^64.
|
|
test(0xfffffffffffff000 + 0xfff, "-1");
|
|
}
|
|
|
|
// Decimal special cases.
|
|
|
|
int number = 10;
|
|
// Numbers 99..99, 100...00, and 100..01 up to 18 digits.
|
|
for (int i = 1; i < 19; i++) {
|
|
// Works in dart2js up to 10^15.
|
|
if (v.jsNumbers && i > 15) break;
|
|
test(number - 1, "9" * i);
|
|
test(number, "1" + "0" * i);
|
|
test(number + 1, "1" + "0" * (i - 1) + "1");
|
|
number *= 10;
|
|
}
|
|
}
|