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

/// @assertion Test for type aliases for built-in types
/// @description Checks right shift via type alias for int
/// @author sgrekhov@unipro.ru

// SharedOptions=--enable-experiment=nonfunction-type-aliases
import '../../../Utils/expect.dart';

typedef IntAlias = int;

main() {
  IntAlias i = 1;

  Expect.equals(0, i >> 1);
  Expect.equals(0, i >> 2);
  Expect.equals(0, i >> 64);
  Expect.equals(0, i >> 100);

  int j = 0x7FFFFFFFFFFFF000;
  if (isJS) {
    Expect.equals(2147481600, j >> 1);
    Expect.equals(1073740800, j >> 2);
    Expect.equals(536870400, j >> 3);
    Expect.equals(0, j >> 61);
    Expect.equals(0, j >> 62);
  } else {
    Expect.equals(4611686018427385856, j >> 1);
    Expect.equals(2305843009213692928, j >> 2);
    Expect.equals(1152921504606846464, j >> 3);
    Expect.equals(3, j >> 61);
    Expect.equals(1, j >> 62);
  }
  Expect.equals(0, j >> 63);
  Expect.equals(0, j >> 64);
  Expect.equals(0, j >> 65);
  Expect.equals(0, j >> 100);
}
