// Copyright (c) 2013, 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 test optimization of modulo operator on Smi.
// VMOptions=--optimization-counter-threshold=10 --no-use-osr

// @dart = 2.9

import "package:expect/expect.dart";

main() {
  for (int i = -30; i < 30; i++) {
    Expect.equals(i % 9, foo(i, 9));
    // Zero test is done outside the loop.
    if (i < 0) {
      Expect.equals(i ~/ -i, foo2(i));
    } else if (i > 0) {
      Expect.equals(i ~/ i, foo2(i));
    }
  }
  // We don't specify the exact exception type here, that is covered in
  // truncdiv_zero_test. The correct answer is IntegerDivisionByZeroException,
  // but the web platform has only one num type and can't distinguish between
  // int and double, so it throws UnsupportedError (the behaviour for double).
  Expect.throws(() => foo2(0));
}

foo(i, x) => i % x;

foo2(i) {
  // Make sure x has a range computed.
  var x = 0;
  if (i < 0) {
    x = -i;
  } else {
    x = i;
  }
  return i ~/ x;
}
