// Copyright (c) 2015, 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.

// @dart = 2.7

// Test file for testing source mappings of operations.

var counter = 0;

void record(result) {
  counter++;
}

main(args) {
  counter++;
  operations(args.length > 0, 0, 1.5, args[0], new Complex(0, 1),
      new Complex(1.5, 2.5));
  specialized(args.length > 0, null, 2, []);
  specialized(args.length > 0, 2, 2, []);
  return counter;
}

void operations(cond, a, b, c, d, e) {
  if (cond) record(a + a);
  if (cond) record(a + b);
  if (cond) record(a + c);
  if (cond) record(a + d);
  if (cond) record(a + e);
  if (cond) record(b + a);
  if (cond) record(b + b);
  if (cond) record(b + c);
  if (cond) record(b + d);
  if (cond) record(b + e);
  if (cond) record(c + a);
  if (cond) record(c + b);
  if (cond) record(c + c);
  if (cond) record(c + d);
  if (cond) record(c + e);
  if (cond) record(d + a);
  if (cond) record(d + b);
  if (cond) record(d + c);
  if (cond) record(d + d);
  if (cond) record(d + e);
  if (cond) record(e + a);
  if (cond) record(e + b);
  if (cond) record(e + c);
  if (cond) record(e + d);
  if (cond) record(e + e);
}

void specialized(cond, a, b, c) {
  if (cond) record(a + b);
  if (cond) record(a & b);
  if (cond) record(~a);
  if (cond) record(a | b);
  if (cond) record(a ^ b);
  if (cond) record(a / b);
  if (cond) record(a == b);
  if (cond) record(a >= b);
  if (cond) record(a > b);
  if (cond) record(a <= b);
  if (cond) record(a < b);
  if (cond) record(a % b);
  if (cond) record(a * b);
  if (cond) record(a << b);
  if (cond) record(a >> b);
  if (cond) record(a - b);
  if (cond) record(a ~/ b);
  if (cond) record(-a);

  if (cond) record(c[a] = b);
  if (cond) record(c[a]);
}

class Complex {
  final num re;
  final num im;

  const Complex(this.re, this.im);

  operator +(Complex other) => new Complex(re + other.re, im + other.im);

  // TODO(johnniwinther): Support implicit null check in '=='.
  //operator ==(Complex other) => re == other.re && im == other.im;

  int get hashCode => 13 * re.hashCode + 17 * im.hashCode;
}
