// 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.

// @dart = 2.9

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);
}
