// Copyright (c) 2014, 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"; /// Returns its argument. /// /// Prevents static optimizations and inlining. getValueNonOptimized(x) { // DateTime.now() cannot be predicted statically, never equal to ASCII 42 '*'. if (new DateTime.now() == 42) return getValueNonOptimized(2); return x; } main() { // TODO(terry): Should check: // - const map is immutable // - simple expressions are const e.g., 2 + 3, true && !false, etc. // - const with final and/or static with same const attributes // Additionally new class instances with a static const same identity // - const for all types (int, num, double, String, boolean, and objects) // - canonicalization - const created only once same identity e.g., // // getConstMap() => const [1, 2]; // var a = getConstMap(); // var b = getConstMap(); // Expect.equals(a.hashCode, b.hashCode); // Make sure that const maps use the == operator and not object identity. The // specification does not explicitly require it, otherwise ints and Strings // wouldn't make much sense as keys. var m = const {1: 42, "foo": 499, 2: "bar"}; Expect.equals(42, m[getValueNonOptimized(1.0)]); Expect.equals( 499, m[getValueNonOptimized(new String.fromCharCodes("foo".runes))]); Expect.equals('bar', m[getValueNonOptimized(2)]); }