|  | // 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"; | 
|  | import 'dart:math'; | 
|  |  | 
|  | // Test that String interpolation works in some optimized cases. | 
|  |  | 
|  | bool get inscrutableFalse => Random().nextDouble() > 2; | 
|  |  | 
|  | returnsNullOrString(x) { | 
|  | if (inscrutableFalse) return 'hi'; | 
|  | if (inscrutableFalse) return null; | 
|  | return x; | 
|  | } | 
|  |  | 
|  | returnsNullOrInt(x) { | 
|  | if (inscrutableFalse) return 123; | 
|  | if (inscrutableFalse) return null; | 
|  | return x; | 
|  | } | 
|  |  | 
|  | spoil(a) { | 
|  | a[3] = 123; | 
|  | a[4] = 'ddd'; | 
|  | } | 
|  |  | 
|  | void testString() { | 
|  | var a = []..length = 100; // 'null' values in here are JavaScript undefined. | 
|  | spoil(a); | 
|  | var s = returnsNullOrString('hi'); | 
|  | var x = a[2]; | 
|  | if (x == null) { | 
|  | s = returnsNullOrString(x); | 
|  | } | 
|  |  | 
|  | Expect.equals('s: null', 's: $s'); | 
|  | } | 
|  |  | 
|  | void testInt() { | 
|  | var a = []..length = 100; // 'null' values in here are JavaScript undefined. | 
|  | spoil(a); | 
|  | var s = returnsNullOrInt(123); | 
|  | var x = a[2]; | 
|  | if (x == null) { | 
|  | s = returnsNullOrInt(x); | 
|  | } | 
|  |  | 
|  | Expect.equals('s: null', 's: $s'); | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | testInt(); | 
|  | testString(); | 
|  | } |