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

// 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], Complex(0, 1), 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) => 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;
}
