dart-sdk/tests/standalone/double_smi_comparison_test.dart
srdjan@google.com 3d6b2fc18e Allow equality operation on mixed double/smi arguments.
Fix a bug in relational operations in 64 bit mode: if ICData specifies double and Smi as possible arguments, we generate code for double and unbox or convert to double the inputs. These works only if smi can fit into the double. Current solution for 64-bit architecture is to disallow two smi-s as input to a polymorphic comparison instruction (equality, relational).

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//20468002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25522 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-26 16:48:46 +00:00

24 lines
915 B
Dart

// 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.
// Test correct comparison (equality and relational) when mixing double and
// Smi arguments. We convert Smi to doubles and to the operation. This is
// not correct in 64-bit mode where not every Smi can be converted to a
// double without loss of precision.
// VMOptions=--optimization-counter-threshold=10 --no-use-osr
import "package:expect/expect.dart";
equalityFunc(a, b) => a == b;
lessThanFunc(a, b) => a < b;
main() {
for (int i = 0; i < 20; i++) {
Expect.isFalse(equalityFunc(1.0, 4));
Expect.isTrue(lessThanFunc(1.0, 4));
}
Expect.isFalse(equalityFunc(3459045988797251776, 3459045988797251777));
Expect.isTrue(lessThanFunc(3459045988797251776, 3459045988797251777));
}