| // 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. | 
 | // Test correct usage of inlined double temporary objects. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | main() { | 
 |   for (int i = 0; i < 2000; i++) { | 
 |     testBinaryOp(); | 
 |     testUnaryOp(); | 
 |   } | 
 | } | 
 |  | 
 | // VM: temporary double should not be used as result of division, | 
 | // otherwise the function always returns the same object. | 
 | double divide(double a, double b) { | 
 |   return a / b; | 
 | } | 
 |  | 
 | testBinaryOp() { | 
 |   var x = divide(1.0, 2.0); | 
 |   var y = divide(2.0, 3.0); | 
 |   Expect.notEquals(x, y); | 
 | } | 
 |  | 
 | // VM: temporary double should be used only for "-b", otherwise the | 
 | // function would always return the same object. | 
 | double unary(double a, double b) { | 
 |   return -(a * (-b)); | 
 | } | 
 |  | 
 | testUnaryOp() { | 
 |   var x = unary(1.0, 2.0); | 
 |   var y = unary(3.0, 4.0); | 
 |   Expect.equals(2.0, x); | 
 |   Expect.equals(12.0, y); | 
 | } |